From e98a71e6fe8b0b2a91a178839ddc28e73aca227a Mon Sep 17 00:00:00 2001 From: Vincent Vrijburg Date: Sun, 26 Nov 2023 15:15:34 +0100 Subject: [PATCH 01/19] Add support for time entries endpoint and refactor model structure --- .../Abstractions/IContactEndpoint.cs | 5 +- .../IExternalSalesInvoiceEndpoint.cs | 2 +- .../IFinancialStatementEndpoint.cs | 2 +- .../Abstractions/ILedgerAccountEndpoint.cs | 2 +- .../Abstractions/IProductEndpoint.cs | 2 +- .../Abstractions/IProjectEndpoint.cs | 2 +- .../Abstractions/ISalesInvoiceEndpoint.cs | 2 +- .../Abstractions/ITaxRateEndpoint.cs | 2 +- .../Abstractions/ITimeEntryEndpoint.cs | 21 ++ .../Abstractions/IWebhookEndpoint.cs | 2 +- .../AdministrationEndpoint.cs | 2 +- .../{Contacts => }/ContactEndpoint.cs | 7 +- .../Models/ContactNoteCreateOptions.cs | 10 - .../{CustomFields => }/CustomFieldEndpoint.cs | 2 +- .../DocumentStyleEndpoint.cs | 2 +- .../ExternalSalesInvoiceEndpoint.cs | 4 +- .../FinancialAccountEndpoint.cs | 2 +- .../FinancialStatementEndpoint.cs | 4 +- .../LedgerAccountEndpoint.cs | 4 +- .../{Payments => }/PaymentEndpoint.cs | 2 +- .../{Products => }/ProductEndpoint.cs | 4 +- .../{Projects => }/ProjectEndpoint.cs | 4 +- .../SalesInvoiceEndpoint.cs | 4 +- .../{TaxRates => }/TaxRateEndpoint.cs | 4 +- .../Endpoints/TimeEntryEndpoint.cs | 121 ++++++++++++ .../Endpoints/{Users => }/UserEndpoint.cs | 2 +- .../VerificationEndpoint.cs | 2 +- .../{Webhooks => }/WebhookEndpoint.cs | 4 +- .../{Workflows => }/WorkflowEndpoint.cs | 2 +- src/Moneybird.Net/Entities/Notes/Note.cs | 50 +++++ .../SalesInvoices/SalesInvoiceDetail.cs | 9 +- .../Entities/TimeEntries/TimeEntry.cs | 68 +++++++ .../Entities/TimeEntries/TimeEntryDetail.cs | 7 + .../Entities/TimeEntries/TimeEntryState.cs | 17 ++ .../Extensions/ContactsExtensions.cs | 2 +- .../ExternalSalesInvoicesExtensions.cs | 8 +- .../Extensions/ProjectsExtensions.cs | 4 +- .../Extensions/SalesInvoicesExtensions.cs | 18 +- .../Extensions/TaxRatesExtensions.cs | 10 +- .../Extensions/TimeEntriesExtensions.cs | 58 ++++++ .../Contacts}/ContactCreateItem.cs | 2 +- .../Contacts}/ContactCreateOptions.cs | 2 +- .../Contacts}/ContactFilterOptions.cs | 2 +- .../Contacts}/ContactListOptions.cs | 2 +- .../Contacts}/ContactPersonCreateItem.cs | 2 +- .../Contacts}/ContactPersonCreateOptions.cs | 2 +- .../Contacts}/ContactPersonUpdateItem.cs | 2 +- .../Contacts}/ContactPersonUpdateOptions.cs | 2 +- .../Contacts}/ContactUpdateItem.cs | 2 +- .../Contacts}/ContactUpdateOptions.cs | 2 +- .../ExternalSalesInvoiceCreate.cs | 2 +- .../ExternalSalesInvoiceCreateDetail.cs | 2 +- .../ExternalSalesInvoiceCreateOptions.cs | 2 +- .../ExternalSalesInvoiceFilterOptions.cs | 5 +- .../ExternalSalesInvoiceUpdate.cs | 2 +- .../ExternalSalesInvoiceUpdateDetail.cs | 2 +- .../ExternalSalesInvoiceUpdateOptions.cs | 2 +- .../FinancialStatementCreate.cs | 2 +- .../FinancialStatementCreateOptions.cs | 2 +- .../FinancialStatementUpdate.cs | 2 +- .../FinancialStatementUpdateOptions.cs | 2 +- .../LedgerAccounts}/LedgerAccountCreate.cs | 2 +- .../LedgerAccountCreateOptions.cs | 2 +- .../LedgerAccounts}/LedgerAccountUpdate.cs | 2 +- .../LedgerAccountUpdateOptions.cs | 2 +- .../Notes/NoteCreateItem.cs} | 4 +- .../Models/Notes/NoteCreateOptions.cs | 10 + .../Products}/ProductCreate.cs | 2 +- .../Products}/ProductCreateOptions.cs | 2 +- .../Products}/ProductUpdate.cs | 2 +- .../Products}/ProductUpdateOptions.cs | 2 +- .../Projects}/ProjectCreate.cs | 2 +- .../Projects}/ProjectCreateOptions.cs | 2 +- .../Projects}/ProjectFilterOptions.cs | 2 +- .../Projects}/ProjectUpdate.cs | 2 +- .../Projects}/ProjectUpdateOptions.cs | 2 +- .../SalesInvoices}/SalesInvoiceCreate.cs | 2 +- .../SalesInvoiceCreateDetail.cs | 2 +- .../SalesInvoiceCreateOptions.cs | 2 +- .../SalesInvoiceFilterOptions.cs | 8 +- .../SalesInvoices}/SalesInvoiceUpdate.cs | 2 +- .../SalesInvoiceUpdateDetail.cs | 2 +- .../SalesInvoiceUpdateOptions.cs | 2 +- .../TaxRates}/TaxRateFilterOptions.cs | 2 +- .../Models/TimeEntries/TimeEntryCreate.cs | 34 ++++ .../TimeEntries/TimeEntryCreateOptions.cs | 11 ++ .../TimeEntries/TimeEntryFilterOptions.cs | 26 +++ .../Models/TimeEntries/TimeEntryUpdate.cs | 28 +++ .../TimeEntries/TimeEntryUpdateOptions.cs | 11 ++ .../Webhooks}/WebhookCreateOptions.cs | 2 +- src/Moneybird.Net/MoneybirdClient.cs | 18 +- .../AdministrationEndpointTests.cs | 2 +- .../Contacts/ContactEndpointTests.cs | 9 +- .../CustomFields/CustomFieldEndpointTests.cs | 2 +- .../DocumentStyleEndpointTests.cs | 2 +- .../ExternalSalesInvoiceEndpointTests.cs | 6 +- .../FinancialAccountEndpointTests.cs | 2 +- .../FinancialStatementEndpointTests.cs | 4 +- .../LedgerAccountEndpointTests.cs | 4 +- .../Payments/PaymentEndpointTests.cs | 2 +- .../Products/ProductEndpointTests.cs | 4 +- .../Projects/ProjectEndpointTests.cs | 4 +- .../SalesInvoiceEndpointTests.cs | 10 +- .../TaxRates/TaxRateEndpointTests.cs | 4 +- .../Endpoints/Users/UserEndpointTests.cs | 2 +- .../VerificationEndpointTests.cs | 2 +- .../Webhooks/WebhookEndpointTests.cs | 4 +- .../Workflows/WorkflowEndpointTests.cs | 2 +- .../Extensions/ContactsExtensionsTests.cs | 10 +- .../ExternalSalesInvoicesExtensionsTests.cs | 24 +-- .../Extensions/ProjectsExtensionsTests.cs | 6 +- .../SalesInvoicesExtensionsTests.cs | 46 ++--- .../Extensions/TaxRatesExtensionsTests.cs | 30 +-- .../Extensions/TimeEntriesExtensionsTests.cs | 180 ++++++++++++++++++ 114 files changed, 849 insertions(+), 228 deletions(-) create mode 100644 src/Moneybird.Net/Endpoints/Abstractions/ITimeEntryEndpoint.cs rename src/Moneybird.Net/Endpoints/{Administrations => }/AdministrationEndpoint.cs (95%) rename src/Moneybird.Net/Endpoints/{Contacts => }/ContactEndpoint.cs (98%) delete mode 100644 src/Moneybird.Net/Endpoints/Contacts/Models/ContactNoteCreateOptions.cs rename src/Moneybird.Net/Endpoints/{CustomFields => }/CustomFieldEndpoint.cs (95%) rename src/Moneybird.Net/Endpoints/{DocumentStyles => }/DocumentStyleEndpoint.cs (95%) rename src/Moneybird.Net/Endpoints/{ExternalSalesInvoices => }/ExternalSalesInvoiceEndpoint.cs (97%) rename src/Moneybird.Net/Endpoints/{FinancialAccounts => }/FinancialAccountEndpoint.cs (95%) rename src/Moneybird.Net/Endpoints/{FinancialStatements => }/FinancialStatementEndpoint.cs (95%) rename src/Moneybird.Net/Endpoints/{LegderAccounts => }/LedgerAccountEndpoint.cs (97%) rename src/Moneybird.Net/Endpoints/{Payments => }/PaymentEndpoint.cs (96%) rename src/Moneybird.Net/Endpoints/{Products => }/ProductEndpoint.cs (97%) rename src/Moneybird.Net/Endpoints/{Projects => }/ProjectEndpoint.cs (97%) rename src/Moneybird.Net/Endpoints/{SalesInvoices => }/SalesInvoiceEndpoint.cs (97%) rename src/Moneybird.Net/Endpoints/{TaxRates => }/TaxRateEndpoint.cs (95%) create mode 100644 src/Moneybird.Net/Endpoints/TimeEntryEndpoint.cs rename src/Moneybird.Net/Endpoints/{Users => }/UserEndpoint.cs (96%) rename src/Moneybird.Net/Endpoints/{Verifications => }/VerificationEndpoint.cs (95%) rename src/Moneybird.Net/Endpoints/{Webhooks => }/WebhookEndpoint.cs (95%) rename src/Moneybird.Net/Endpoints/{Workflows => }/WorkflowEndpoint.cs (96%) create mode 100644 src/Moneybird.Net/Entities/Notes/Note.cs create mode 100644 src/Moneybird.Net/Entities/TimeEntries/TimeEntry.cs create mode 100644 src/Moneybird.Net/Entities/TimeEntries/TimeEntryDetail.cs create mode 100644 src/Moneybird.Net/Entities/TimeEntries/TimeEntryState.cs create mode 100644 src/Moneybird.Net/Extensions/TimeEntriesExtensions.cs rename src/Moneybird.Net/{Endpoints/Contacts/Models => Models/Contacts}/ContactCreateItem.cs (98%) rename src/Moneybird.Net/{Endpoints/Contacts/Models => Models/Contacts}/ContactCreateOptions.cs (84%) rename src/Moneybird.Net/{Endpoints/Contacts/Models => Models/Contacts}/ContactFilterOptions.cs (87%) rename src/Moneybird.Net/{Endpoints/Contacts/Models => Models/Contacts}/ContactListOptions.cs (80%) rename src/Moneybird.Net/{Endpoints/Contacts/Models => Models/Contacts}/ContactPersonCreateItem.cs (92%) rename src/Moneybird.Net/{Endpoints/Contacts/Models => Models/Contacts}/ContactPersonCreateOptions.cs (80%) rename src/Moneybird.Net/{Endpoints/Contacts/Models => Models/Contacts}/ContactPersonUpdateItem.cs (92%) rename src/Moneybird.Net/{Endpoints/Contacts/Models => Models/Contacts}/ContactPersonUpdateOptions.cs (80%) rename src/Moneybird.Net/{Endpoints/Contacts/Models => Models/Contacts}/ContactUpdateItem.cs (98%) rename src/Moneybird.Net/{Endpoints/Contacts/Models => Models/Contacts}/ContactUpdateOptions.cs (84%) rename src/Moneybird.Net/{Endpoints/ExternalSalesInvoices/Models => Models/ExternalSalesInvoices}/ExternalSalesInvoiceCreate.cs (94%) rename src/Moneybird.Net/{Endpoints/ExternalSalesInvoices/Models => Models/ExternalSalesInvoices}/ExternalSalesInvoiceCreateDetail.cs (96%) rename src/Moneybird.Net/{Endpoints/ExternalSalesInvoices/Models => Models/ExternalSalesInvoices}/ExternalSalesInvoiceCreateOptions.cs (86%) rename src/Moneybird.Net/{Endpoints/ExternalSalesInvoices/Models => Models/ExternalSalesInvoices}/ExternalSalesInvoiceFilterOptions.cs (68%) rename src/Moneybird.Net/{Endpoints/ExternalSalesInvoices/Models => Models/ExternalSalesInvoices}/ExternalSalesInvoiceUpdate.cs (94%) rename src/Moneybird.Net/{Endpoints/ExternalSalesInvoices/Models => Models/ExternalSalesInvoices}/ExternalSalesInvoiceUpdateDetail.cs (96%) rename src/Moneybird.Net/{Endpoints/ExternalSalesInvoices/Models => Models/ExternalSalesInvoices}/ExternalSalesInvoiceUpdateOptions.cs (86%) rename src/Moneybird.Net/{Endpoints/FinancialStatements/Models => Models/FinancialStatements}/FinancialStatementCreate.cs (94%) rename src/Moneybird.Net/{Endpoints/FinancialStatements/Models => Models/FinancialStatements}/FinancialStatementCreateOptions.cs (83%) rename src/Moneybird.Net/{Endpoints/FinancialStatements/Models => Models/FinancialStatements}/FinancialStatementUpdate.cs (94%) rename src/Moneybird.Net/{Endpoints/FinancialStatements/Models => Models/FinancialStatements}/FinancialStatementUpdateOptions.cs (83%) rename src/Moneybird.Net/{Endpoints/LegderAccounts/Models => Models/LedgerAccounts}/LedgerAccountCreate.cs (93%) rename src/Moneybird.Net/{Endpoints/LegderAccounts/Models => Models/LedgerAccounts}/LedgerAccountCreateOptions.cs (83%) rename src/Moneybird.Net/{Endpoints/LegderAccounts/Models => Models/LedgerAccounts}/LedgerAccountUpdate.cs (93%) rename src/Moneybird.Net/{Endpoints/LegderAccounts/Models => Models/LedgerAccounts}/LedgerAccountUpdateOptions.cs (83%) rename src/Moneybird.Net/{Endpoints/Contacts/Models/ContactNoteCreateItem.cs => Models/Notes/NoteCreateItem.cs} (77%) create mode 100644 src/Moneybird.Net/Models/Notes/NoteCreateOptions.cs rename src/Moneybird.Net/{Endpoints/Products/Models => Models/Products}/ProductCreate.cs (97%) rename src/Moneybird.Net/{Endpoints/Products/Models => Models/Products}/ProductCreateOptions.cs (83%) rename src/Moneybird.Net/{Endpoints/Products/Models => Models/Products}/ProductUpdate.cs (97%) rename src/Moneybird.Net/{Endpoints/Products/Models => Models/Products}/ProductUpdateOptions.cs (83%) rename src/Moneybird.Net/{Endpoints/Projects/Models => Models/Projects}/ProjectCreate.cs (83%) rename src/Moneybird.Net/{Endpoints/Projects/Models => Models/Projects}/ProjectCreateOptions.cs (83%) rename src/Moneybird.Net/{Endpoints/Projects/Models => Models/Projects}/ProjectFilterOptions.cs (81%) rename src/Moneybird.Net/{Endpoints/Projects/Models => Models/Projects}/ProjectUpdate.cs (83%) rename src/Moneybird.Net/{Endpoints/Projects/Models => Models/Projects}/ProjectUpdateOptions.cs (83%) rename src/Moneybird.Net/{Endpoints/SalesInvoices/Models => Models/SalesInvoices}/SalesInvoiceCreate.cs (97%) rename src/Moneybird.Net/{Endpoints/SalesInvoices/Models => Models/SalesInvoices}/SalesInvoiceCreateDetail.cs (97%) rename src/Moneybird.Net/{Endpoints/SalesInvoices/Models => Models/SalesInvoices}/SalesInvoiceCreateOptions.cs (89%) rename src/Moneybird.Net/{Endpoints/SalesInvoices/Models => Models/SalesInvoices}/SalesInvoiceFilterOptions.cs (71%) rename src/Moneybird.Net/{Endpoints/SalesInvoices/Models => Models/SalesInvoices}/SalesInvoiceUpdate.cs (98%) rename src/Moneybird.Net/{Endpoints/SalesInvoices/Models => Models/SalesInvoices}/SalesInvoiceUpdateDetail.cs (97%) rename src/Moneybird.Net/{Endpoints/SalesInvoices/Models => Models/SalesInvoices}/SalesInvoiceUpdateOptions.cs (83%) rename src/Moneybird.Net/{Endpoints/TaxRates/Models => Models/TaxRates}/TaxRateFilterOptions.cs (93%) create mode 100644 src/Moneybird.Net/Models/TimeEntries/TimeEntryCreate.cs create mode 100644 src/Moneybird.Net/Models/TimeEntries/TimeEntryCreateOptions.cs create mode 100644 src/Moneybird.Net/Models/TimeEntries/TimeEntryFilterOptions.cs create mode 100644 src/Moneybird.Net/Models/TimeEntries/TimeEntryUpdate.cs create mode 100644 src/Moneybird.Net/Models/TimeEntries/TimeEntryUpdateOptions.cs rename src/Moneybird.Net/{Endpoints/Webhooks/Models => Models/Webhooks}/WebhookCreateOptions.cs (89%) create mode 100644 tests/Moneybird.Net.Tests/Extensions/TimeEntriesExtensionsTests.cs diff --git a/src/Moneybird.Net/Endpoints/Abstractions/IContactEndpoint.cs b/src/Moneybird.Net/Endpoints/Abstractions/IContactEndpoint.cs index 38c02c7..dd8f180 100644 --- a/src/Moneybird.Net/Endpoints/Abstractions/IContactEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/Abstractions/IContactEndpoint.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions.Common; -using Moneybird.Net.Endpoints.Contacts.Models; using Moneybird.Net.Entities.Contacts; +using Moneybird.Net.Models.Contacts; +using Moneybird.Net.Models.Notes; namespace Moneybird.Net.Endpoints.Abstractions { @@ -18,7 +19,7 @@ public interface IContactEndpoint : Task> GetSynchronizationContactsAsync(string administrationId, string accessToken, ContactFilterOptions options); Task> GetContactsByIdsAsync(string administrationId, string accessToken, ContactListOptions options); Task GetContactByCustomerIdAsync(string administrationId, string customerId, string accessToken); - Task CreateContactNoteAsync(string administrationId, string contactId, ContactNoteCreateOptions options, string accessToken); + Task CreateContactNoteAsync(string administrationId, string contactId, NoteCreateOptions options, string accessToken); Task DeleteContactNoteByIdAsync(string administrationId, string contactId, string noteId, string accessToken); Task GetContactPersonByIdAsync(string administrationId, string contactId, string contactPersonId, string accessToken); Task CreateContactPersonAsync(string administrationId, string contactId, ContactPersonCreateOptions options, string accessToken); diff --git a/src/Moneybird.Net/Endpoints/Abstractions/IExternalSalesInvoiceEndpoint.cs b/src/Moneybird.Net/Endpoints/Abstractions/IExternalSalesInvoiceEndpoint.cs index 0724e26..aa71c08 100644 --- a/src/Moneybird.Net/Endpoints/Abstractions/IExternalSalesInvoiceEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/Abstractions/IExternalSalesInvoiceEndpoint.cs @@ -1,8 +1,8 @@ using System.IO; using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions.Common; -using Moneybird.Net.Endpoints.ExternalSalesInvoices.Models; using Moneybird.Net.Entities.ExternalSalesInvoices; +using Moneybird.Net.Models.ExternalSalesInvoices; namespace Moneybird.Net.Endpoints.Abstractions { diff --git a/src/Moneybird.Net/Endpoints/Abstractions/IFinancialStatementEndpoint.cs b/src/Moneybird.Net/Endpoints/Abstractions/IFinancialStatementEndpoint.cs index dac16ce..a1d9fb1 100644 --- a/src/Moneybird.Net/Endpoints/Abstractions/IFinancialStatementEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/Abstractions/IFinancialStatementEndpoint.cs @@ -1,6 +1,6 @@ using Moneybird.Net.Endpoints.Abstractions.Common; -using Moneybird.Net.Endpoints.FinancialStatements.Models; using Moneybird.Net.Entities.FinancialStatements; +using Moneybird.Net.Models.FinancialStatements; namespace Moneybird.Net.Endpoints.Abstractions { diff --git a/src/Moneybird.Net/Endpoints/Abstractions/ILedgerAccountEndpoint.cs b/src/Moneybird.Net/Endpoints/Abstractions/ILedgerAccountEndpoint.cs index 28eac6b..0a6725d 100644 --- a/src/Moneybird.Net/Endpoints/Abstractions/ILedgerAccountEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/Abstractions/ILedgerAccountEndpoint.cs @@ -1,7 +1,7 @@ using System.Threading.Tasks; -using Moneybird.Net.Endpoints.LegderAccounts.Models; using Moneybird.Net.Endpoints.Abstractions.Common; using Moneybird.Net.Entities.LedgerAccounts; +using Moneybird.Net.Models.LedgerAccounts; namespace Moneybird.Net.Endpoints.Abstractions { diff --git a/src/Moneybird.Net/Endpoints/Abstractions/IProductEndpoint.cs b/src/Moneybird.Net/Endpoints/Abstractions/IProductEndpoint.cs index c97080f..7c2a1aa 100644 --- a/src/Moneybird.Net/Endpoints/Abstractions/IProductEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/Abstractions/IProductEndpoint.cs @@ -1,8 +1,8 @@ using System.Threading; using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions.Common; -using Moneybird.Net.Endpoints.Products.Models; using Moneybird.Net.Entities.Products; +using Moneybird.Net.Models.Products; namespace Moneybird.Net.Endpoints.Abstractions { diff --git a/src/Moneybird.Net/Endpoints/Abstractions/IProjectEndpoint.cs b/src/Moneybird.Net/Endpoints/Abstractions/IProjectEndpoint.cs index a55d74b..60af301 100644 --- a/src/Moneybird.Net/Endpoints/Abstractions/IProjectEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/Abstractions/IProjectEndpoint.cs @@ -1,6 +1,6 @@ using Moneybird.Net.Endpoints.Abstractions.Common; -using Moneybird.Net.Endpoints.Projects.Models; using Moneybird.Net.Entities.Projects; +using Moneybird.Net.Models.Projects; namespace Moneybird.Net.Endpoints.Abstractions { diff --git a/src/Moneybird.Net/Endpoints/Abstractions/ISalesInvoiceEndpoint.cs b/src/Moneybird.Net/Endpoints/Abstractions/ISalesInvoiceEndpoint.cs index fe10635..e48877d 100644 --- a/src/Moneybird.Net/Endpoints/Abstractions/ISalesInvoiceEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/Abstractions/ISalesInvoiceEndpoint.cs @@ -1,8 +1,8 @@ using System.IO; using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions.Common; -using Moneybird.Net.Endpoints.SalesInvoices.Models; using Moneybird.Net.Entities.SalesInvoices; +using Moneybird.Net.Models.SalesInvoices; namespace Moneybird.Net.Endpoints.Abstractions { diff --git a/src/Moneybird.Net/Endpoints/Abstractions/ITaxRateEndpoint.cs b/src/Moneybird.Net/Endpoints/Abstractions/ITaxRateEndpoint.cs index 955eb0c..1a51607 100644 --- a/src/Moneybird.Net/Endpoints/Abstractions/ITaxRateEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/Abstractions/ITaxRateEndpoint.cs @@ -1,6 +1,6 @@ -using Moneybird.Net.Endpoints.TaxRates.Models; using Moneybird.Net.Endpoints.Abstractions.Common; using Moneybird.Net.Entities.TaxRates; +using Moneybird.Net.Models.TaxRates; namespace Moneybird.Net.Endpoints.Abstractions { diff --git a/src/Moneybird.Net/Endpoints/Abstractions/ITimeEntryEndpoint.cs b/src/Moneybird.Net/Endpoints/Abstractions/ITimeEntryEndpoint.cs new file mode 100644 index 0000000..96b5e50 --- /dev/null +++ b/src/Moneybird.Net/Endpoints/Abstractions/ITimeEntryEndpoint.cs @@ -0,0 +1,21 @@ +using System.Threading.Tasks; +using Moneybird.Net.Endpoints.Abstractions.Common; +using Moneybird.Net.Entities.Notes; +using Moneybird.Net.Entities.TimeEntries; +using Moneybird.Net.Models.Notes; +using Moneybird.Net.Models.TimeEntries; + +namespace Moneybird.Net.Endpoints.Abstractions +{ + public interface ITimeEntryEndpoint : + IReadEndpoint, + IReadFilterEndpoint, + IGetEndpoint, + ICreateEndpoint, + IUpdateEndpoint, + IDeleteEndpoint + { + Task CreateTimeEntryNoteAsync(string administrationId, string timeEntryId, NoteCreateOptions options, string accessToken); + Task DeleteTimeEntryNoteByIdAsync(string administrationId, string contactId, string noteId, string accessToken); + } +} \ No newline at end of file diff --git a/src/Moneybird.Net/Endpoints/Abstractions/IWebhookEndpoint.cs b/src/Moneybird.Net/Endpoints/Abstractions/IWebhookEndpoint.cs index 9fd6582..4a2a189 100644 --- a/src/Moneybird.Net/Endpoints/Abstractions/IWebhookEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/Abstractions/IWebhookEndpoint.cs @@ -1,6 +1,6 @@ using Moneybird.Net.Endpoints.Abstractions.Common; -using Moneybird.Net.Endpoints.Webhooks.Models; using Moneybird.Net.Entities.Webhooks; +using Moneybird.Net.Models.Webhooks; namespace Moneybird.Net.Endpoints.Abstractions { diff --git a/src/Moneybird.Net/Endpoints/Administrations/AdministrationEndpoint.cs b/src/Moneybird.Net/Endpoints/AdministrationEndpoint.cs similarity index 95% rename from src/Moneybird.Net/Endpoints/Administrations/AdministrationEndpoint.cs rename to src/Moneybird.Net/Endpoints/AdministrationEndpoint.cs index 2ae982b..8132e52 100644 --- a/src/Moneybird.Net/Endpoints/Administrations/AdministrationEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/AdministrationEndpoint.cs @@ -5,7 +5,7 @@ using Moneybird.Net.Entities.Administrations; using Moneybird.Net.Http; -namespace Moneybird.Net.Endpoints.Administrations +namespace Moneybird.Net.Endpoints { public class AdministrationEndpoint : IAdministrationEndpoint { diff --git a/src/Moneybird.Net/Endpoints/Contacts/ContactEndpoint.cs b/src/Moneybird.Net/Endpoints/ContactEndpoint.cs similarity index 98% rename from src/Moneybird.Net/Endpoints/Contacts/ContactEndpoint.cs rename to src/Moneybird.Net/Endpoints/ContactEndpoint.cs index 3f027e3..a6ed339 100644 --- a/src/Moneybird.Net/Endpoints/Contacts/ContactEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/ContactEndpoint.cs @@ -2,12 +2,13 @@ using System.Text.Json; using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.Contacts.Models; using Moneybird.Net.Entities.Contacts; using Moneybird.Net.Extensions; using Moneybird.Net.Http; +using Moneybird.Net.Models.Contacts; +using Moneybird.Net.Models.Notes; -namespace Moneybird.Net.Endpoints.Contacts +namespace Moneybird.Net.Endpoints { public class ContactEndpoint : IContactEndpoint { @@ -149,7 +150,7 @@ public async Task DeleteByIdAsync(string administrationId, string id, stri return response; } - public async Task CreateContactNoteAsync(string administrationId, string contactId, ContactNoteCreateOptions options, string accessToken) + public async Task CreateContactNoteAsync(string administrationId, string contactId, NoteCreateOptions options, string accessToken) { var relativeUrl = string.Format(ContactsIdNotesUri, administrationId, contactId); var body = JsonSerializer.Serialize(options, _config.SerializerOptions); diff --git a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactNoteCreateOptions.cs b/src/Moneybird.Net/Endpoints/Contacts/Models/ContactNoteCreateOptions.cs deleted file mode 100644 index 62a304c..0000000 --- a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactNoteCreateOptions.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Text.Json.Serialization; - -namespace Moneybird.Net.Endpoints.Contacts.Models -{ - public class ContactNoteCreateOptions - { - [JsonPropertyName("note")] - public ContactNoteCreateItem Note { get; set; } - } -} \ No newline at end of file diff --git a/src/Moneybird.Net/Endpoints/CustomFields/CustomFieldEndpoint.cs b/src/Moneybird.Net/Endpoints/CustomFieldEndpoint.cs similarity index 95% rename from src/Moneybird.Net/Endpoints/CustomFields/CustomFieldEndpoint.cs rename to src/Moneybird.Net/Endpoints/CustomFieldEndpoint.cs index 54408ae..fe3414c 100644 --- a/src/Moneybird.Net/Endpoints/CustomFields/CustomFieldEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/CustomFieldEndpoint.cs @@ -5,7 +5,7 @@ using Moneybird.Net.Entities.CustomFields; using Moneybird.Net.Http; -namespace Moneybird.Net.Endpoints.CustomFields +namespace Moneybird.Net.Endpoints { public class CustomFieldEndpoint : ICustomFieldEndpoint { diff --git a/src/Moneybird.Net/Endpoints/DocumentStyles/DocumentStyleEndpoint.cs b/src/Moneybird.Net/Endpoints/DocumentStyleEndpoint.cs similarity index 95% rename from src/Moneybird.Net/Endpoints/DocumentStyles/DocumentStyleEndpoint.cs rename to src/Moneybird.Net/Endpoints/DocumentStyleEndpoint.cs index 9982074..f834d5c 100644 --- a/src/Moneybird.Net/Endpoints/DocumentStyles/DocumentStyleEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/DocumentStyleEndpoint.cs @@ -5,7 +5,7 @@ using Moneybird.Net.Entities.DocumentStyles; using Moneybird.Net.Http; -namespace Moneybird.Net.Endpoints.DocumentStyles +namespace Moneybird.Net.Endpoints { public class DocumentStyleEndpoint : IDocumentStyleEndpoint { diff --git a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/ExternalSalesInvoiceEndpoint.cs b/src/Moneybird.Net/Endpoints/ExternalSalesInvoiceEndpoint.cs similarity index 97% rename from src/Moneybird.Net/Endpoints/ExternalSalesInvoices/ExternalSalesInvoiceEndpoint.cs rename to src/Moneybird.Net/Endpoints/ExternalSalesInvoiceEndpoint.cs index ac9dc7b..3072ef9 100644 --- a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/ExternalSalesInvoiceEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/ExternalSalesInvoiceEndpoint.cs @@ -3,12 +3,12 @@ using System.Text.Json; using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.ExternalSalesInvoices.Models; using Moneybird.Net.Entities.ExternalSalesInvoices; using Moneybird.Net.Extensions; using Moneybird.Net.Http; +using Moneybird.Net.Models.ExternalSalesInvoices; -namespace Moneybird.Net.Endpoints.ExternalSalesInvoices +namespace Moneybird.Net.Endpoints { public class ExternalSalesInvoiceEndpoint : IExternalSalesInvoiceEndpoint { diff --git a/src/Moneybird.Net/Endpoints/FinancialAccounts/FinancialAccountEndpoint.cs b/src/Moneybird.Net/Endpoints/FinancialAccountEndpoint.cs similarity index 95% rename from src/Moneybird.Net/Endpoints/FinancialAccounts/FinancialAccountEndpoint.cs rename to src/Moneybird.Net/Endpoints/FinancialAccountEndpoint.cs index 2f3c759..6f64b90 100644 --- a/src/Moneybird.Net/Endpoints/FinancialAccounts/FinancialAccountEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/FinancialAccountEndpoint.cs @@ -5,7 +5,7 @@ using Moneybird.Net.Entities.FinancialAccounts; using Moneybird.Net.Http; -namespace Moneybird.Net.Endpoints.FinancialAccounts +namespace Moneybird.Net.Endpoints { public class FinancialAccountEndpoint : IFinancialAccountEndpoint { diff --git a/src/Moneybird.Net/Endpoints/FinancialStatements/FinancialStatementEndpoint.cs b/src/Moneybird.Net/Endpoints/FinancialStatementEndpoint.cs similarity index 95% rename from src/Moneybird.Net/Endpoints/FinancialStatements/FinancialStatementEndpoint.cs rename to src/Moneybird.Net/Endpoints/FinancialStatementEndpoint.cs index 1efa3bb..0508a54 100644 --- a/src/Moneybird.Net/Endpoints/FinancialStatements/FinancialStatementEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/FinancialStatementEndpoint.cs @@ -1,11 +1,11 @@ using System.Text.Json; using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.FinancialStatements.Models; using Moneybird.Net.Entities.FinancialStatements; using Moneybird.Net.Http; +using Moneybird.Net.Models.FinancialStatements; -namespace Moneybird.Net.Endpoints.FinancialStatements +namespace Moneybird.Net.Endpoints { public class FinancialStatementEndpoint : IFinancialStatementEndpoint { diff --git a/src/Moneybird.Net/Endpoints/LegderAccounts/LedgerAccountEndpoint.cs b/src/Moneybird.Net/Endpoints/LedgerAccountEndpoint.cs similarity index 97% rename from src/Moneybird.Net/Endpoints/LegderAccounts/LedgerAccountEndpoint.cs rename to src/Moneybird.Net/Endpoints/LedgerAccountEndpoint.cs index eef55de..ef2a6c1 100644 --- a/src/Moneybird.Net/Endpoints/LegderAccounts/LedgerAccountEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/LedgerAccountEndpoint.cs @@ -2,11 +2,11 @@ using System.Text.Json; using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.LegderAccounts.Models; using Moneybird.Net.Entities.LedgerAccounts; using Moneybird.Net.Http; +using Moneybird.Net.Models.LedgerAccounts; -namespace Moneybird.Net.Endpoints.LegderAccounts +namespace Moneybird.Net.Endpoints { public class LedgerAccountEndpoint : ILedgerAccountEndpoint { diff --git a/src/Moneybird.Net/Endpoints/Payments/PaymentEndpoint.cs b/src/Moneybird.Net/Endpoints/PaymentEndpoint.cs similarity index 96% rename from src/Moneybird.Net/Endpoints/Payments/PaymentEndpoint.cs rename to src/Moneybird.Net/Endpoints/PaymentEndpoint.cs index ca101b4..02cbec4 100644 --- a/src/Moneybird.Net/Endpoints/Payments/PaymentEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/PaymentEndpoint.cs @@ -4,7 +4,7 @@ using Moneybird.Net.Entities.Payments; using Moneybird.Net.Http; -namespace Moneybird.Net.Endpoints.Payments +namespace Moneybird.Net.Endpoints { public class PaymentEndpoint : IPaymentEndpoint { diff --git a/src/Moneybird.Net/Endpoints/Products/ProductEndpoint.cs b/src/Moneybird.Net/Endpoints/ProductEndpoint.cs similarity index 97% rename from src/Moneybird.Net/Endpoints/Products/ProductEndpoint.cs rename to src/Moneybird.Net/Endpoints/ProductEndpoint.cs index 8e428c6..734543f 100644 --- a/src/Moneybird.Net/Endpoints/Products/ProductEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/ProductEndpoint.cs @@ -2,11 +2,11 @@ using System.Text.Json; using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.Products.Models; using Moneybird.Net.Entities.Products; using Moneybird.Net.Http; +using Moneybird.Net.Models.Products; -namespace Moneybird.Net.Endpoints.Products +namespace Moneybird.Net.Endpoints { public class ProductEndpoint : IProductEndpoint { diff --git a/src/Moneybird.Net/Endpoints/Projects/ProjectEndpoint.cs b/src/Moneybird.Net/Endpoints/ProjectEndpoint.cs similarity index 97% rename from src/Moneybird.Net/Endpoints/Projects/ProjectEndpoint.cs rename to src/Moneybird.Net/Endpoints/ProjectEndpoint.cs index 521fa72..e234fe6 100644 --- a/src/Moneybird.Net/Endpoints/Projects/ProjectEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/ProjectEndpoint.cs @@ -2,12 +2,12 @@ using System.Text.Json; using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.Projects.Models; using Moneybird.Net.Entities.Projects; using Moneybird.Net.Extensions; using Moneybird.Net.Http; +using Moneybird.Net.Models.Projects; -namespace Moneybird.Net.Endpoints.Projects +namespace Moneybird.Net.Endpoints { public class ProjectEndpoint : IProjectEndpoint { diff --git a/src/Moneybird.Net/Endpoints/SalesInvoices/SalesInvoiceEndpoint.cs b/src/Moneybird.Net/Endpoints/SalesInvoiceEndpoint.cs similarity index 97% rename from src/Moneybird.Net/Endpoints/SalesInvoices/SalesInvoiceEndpoint.cs rename to src/Moneybird.Net/Endpoints/SalesInvoiceEndpoint.cs index 0e6e553..79f2078 100644 --- a/src/Moneybird.Net/Endpoints/SalesInvoices/SalesInvoiceEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/SalesInvoiceEndpoint.cs @@ -3,12 +3,12 @@ using System.Text.Json; using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.SalesInvoices.Models; using Moneybird.Net.Entities.SalesInvoices; using Moneybird.Net.Extensions; using Moneybird.Net.Http; +using Moneybird.Net.Models.SalesInvoices; -namespace Moneybird.Net.Endpoints.SalesInvoices +namespace Moneybird.Net.Endpoints { public class SalesInvoiceEndpoint : ISalesInvoiceEndpoint { diff --git a/src/Moneybird.Net/Endpoints/TaxRates/TaxRateEndpoint.cs b/src/Moneybird.Net/Endpoints/TaxRateEndpoint.cs similarity index 95% rename from src/Moneybird.Net/Endpoints/TaxRates/TaxRateEndpoint.cs rename to src/Moneybird.Net/Endpoints/TaxRateEndpoint.cs index c9b3ae3..f8f1901 100644 --- a/src/Moneybird.Net/Endpoints/TaxRates/TaxRateEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/TaxRateEndpoint.cs @@ -2,12 +2,12 @@ using System.Text.Json; using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.TaxRates.Models; using Moneybird.Net.Entities.TaxRates; using Moneybird.Net.Extensions; using Moneybird.Net.Http; +using Moneybird.Net.Models.TaxRates; -namespace Moneybird.Net.Endpoints.TaxRates +namespace Moneybird.Net.Endpoints { public class TaxRateEndpoint : ITaxRateEndpoint { diff --git a/src/Moneybird.Net/Endpoints/TimeEntryEndpoint.cs b/src/Moneybird.Net/Endpoints/TimeEntryEndpoint.cs new file mode 100644 index 0000000..3d996fa --- /dev/null +++ b/src/Moneybird.Net/Endpoints/TimeEntryEndpoint.cs @@ -0,0 +1,121 @@ +using System.Collections.Generic; +using System.Text.Json; +using System.Threading.Tasks; +using Moneybird.Net.Endpoints.Abstractions; +using Moneybird.Net.Entities.Notes; +using Moneybird.Net.Entities.TimeEntries; +using Moneybird.Net.Extensions; +using Moneybird.Net.Http; +using Moneybird.Net.Models.Notes; +using Moneybird.Net.Models.TimeEntries; + +namespace Moneybird.Net.Endpoints +{ + public class TimeEntryEndpoint : ITimeEntryEndpoint + { + private const string TimeEntriesUri = "/{0}/time_entries.json"; + private const string TimeEntriesIdUri = "/{0}/time_entries/{1}.json"; + private const string TimeEntriesIdNotesUri = "/{0}/time_entries/{1}/notes.json"; + private const string TimeEntriesIdNotesIdUri = "/{0}/time_entries/{1}/notes/{2}.json"; + + private readonly MoneybirdConfig _config; + private readonly IRequester _requester; + + public TimeEntryEndpoint(MoneybirdConfig config, IRequester requester) + { + _requester = requester; + _config = config; + } + + public async Task> GetAsync(string administrationId, string accessToken) + { + var relativeUrl = string.Format(TimeEntriesUri, administrationId); + var responseJson = await _requester + .CreateGetRequestAsync(_config.ApiUri, relativeUrl, accessToken) + .ConfigureAwait(false); + + return JsonSerializer.Deserialize>(responseJson, _config.SerializerOptions); + } + + public async Task> GetAsync(string administrationId, string accessToken, TimeEntryFilterOptions options) + { + List paramValues = null; + + var filterString = options.GetFilterString(); + if (!string.IsNullOrEmpty(filterString)) + { + paramValues = new List { $"filter={filterString}" }; + } + + var relativeUrl = string.Format(TimeEntriesUri, administrationId); + var responseJson = await _requester + .CreateGetRequestAsync(_config.ApiUri, relativeUrl, accessToken, paramValues) + .ConfigureAwait(false); + + return JsonSerializer.Deserialize>(responseJson, _config.SerializerOptions); + } + + public async Task GetByIdAsync(string administrationId, string id, string accessToken) + { + var relativeUrl = string.Format(TimeEntriesIdUri, administrationId, id); + var responseJson = await _requester + .CreateGetRequestAsync(_config.ApiUri, relativeUrl, accessToken) + .ConfigureAwait(false); + + return JsonSerializer.Deserialize(responseJson, _config.SerializerOptions); + } + + public async Task CreateAsync(string administrationId, TimeEntryCreateOptions options, string accessToken) + { + var relativeUrl = string.Format(TimeEntriesUri, administrationId); + var body = JsonSerializer.Serialize(options, _config.SerializerOptions); + var responseJson = await _requester + .CreatePostRequestAsync(_config.ApiUri, relativeUrl, accessToken, body) + .ConfigureAwait(false); + + return JsonSerializer.Deserialize(responseJson, _config.SerializerOptions); + } + + public async Task UpdateByIdAsync(string administrationId, string id, TimeEntryUpdateOptions options, string accessToken) + { + var relativeUrl = string.Format(TimeEntriesUri, administrationId, id); + var body = JsonSerializer.Serialize(options, _config.SerializerOptions); + var responseJson = await _requester + .CreatePatchRequestAsync(_config.ApiUri, relativeUrl, accessToken, body) + .ConfigureAwait(false); + + return JsonSerializer.Deserialize(responseJson, _config.SerializerOptions); + } + + public async Task DeleteByIdAsync(string administrationId, string id, string accessToken) + { + var relativeUrl = string.Format(TimeEntriesUri, administrationId, id); + var response = await _requester + .CreateDeleteRequestAsync(_config.ApiUri, relativeUrl, accessToken) + .ConfigureAwait(false); + + return response; + } + + public async Task CreateTimeEntryNoteAsync(string administrationId, string timeEntryId, NoteCreateOptions options, string accessToken) + { + var relativeUrl = string.Format(TimeEntriesIdNotesUri, administrationId, timeEntryId); + var body = JsonSerializer.Serialize(options, _config.SerializerOptions); + var responseJson = await _requester + .CreatePostRequestAsync(_config.ApiUri, relativeUrl, accessToken, body) + .ConfigureAwait(false); + + return JsonSerializer.Deserialize(responseJson, _config.SerializerOptions); + } + + public async Task DeleteTimeEntryNoteByIdAsync(string administrationId, string contactId, string noteId, string accessToken) + { + var relativeUrl = string.Format(TimeEntriesIdNotesIdUri, administrationId, contactId, noteId); + var response = await _requester + .CreateDeleteRequestAsync(_config.ApiUri, relativeUrl, accessToken) + .ConfigureAwait(false); + + return response; + } + } +} \ No newline at end of file diff --git a/src/Moneybird.Net/Endpoints/Users/UserEndpoint.cs b/src/Moneybird.Net/Endpoints/UserEndpoint.cs similarity index 96% rename from src/Moneybird.Net/Endpoints/Users/UserEndpoint.cs rename to src/Moneybird.Net/Endpoints/UserEndpoint.cs index e2d1966..c534512 100644 --- a/src/Moneybird.Net/Endpoints/Users/UserEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/UserEndpoint.cs @@ -5,7 +5,7 @@ using Moneybird.Net.Entities.Users; using Moneybird.Net.Http; -namespace Moneybird.Net.Endpoints.Users +namespace Moneybird.Net.Endpoints { public class UserEndpoint : IUserEndpoint { diff --git a/src/Moneybird.Net/Endpoints/Verifications/VerificationEndpoint.cs b/src/Moneybird.Net/Endpoints/VerificationEndpoint.cs similarity index 95% rename from src/Moneybird.Net/Endpoints/Verifications/VerificationEndpoint.cs rename to src/Moneybird.Net/Endpoints/VerificationEndpoint.cs index 09c9798..ae1e996 100644 --- a/src/Moneybird.Net/Endpoints/Verifications/VerificationEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/VerificationEndpoint.cs @@ -4,7 +4,7 @@ using Moneybird.Net.Entities.Verifications; using Moneybird.Net.Http; -namespace Moneybird.Net.Endpoints.Verifications +namespace Moneybird.Net.Endpoints { public class VerificationEndpoint : IVerificationEndpoint { diff --git a/src/Moneybird.Net/Endpoints/Webhooks/WebhookEndpoint.cs b/src/Moneybird.Net/Endpoints/WebhookEndpoint.cs similarity index 95% rename from src/Moneybird.Net/Endpoints/Webhooks/WebhookEndpoint.cs rename to src/Moneybird.Net/Endpoints/WebhookEndpoint.cs index 9ca7a7b..b073cb1 100644 --- a/src/Moneybird.Net/Endpoints/Webhooks/WebhookEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/WebhookEndpoint.cs @@ -2,11 +2,11 @@ using System.Text.Json; using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.Webhooks.Models; using Moneybird.Net.Entities.Webhooks; using Moneybird.Net.Http; +using Moneybird.Net.Models.Webhooks; -namespace Moneybird.Net.Endpoints.Webhooks +namespace Moneybird.Net.Endpoints { public class WebhookEndpoint : IWebhookEndpoint { diff --git a/src/Moneybird.Net/Endpoints/Workflows/WorkflowEndpoint.cs b/src/Moneybird.Net/Endpoints/WorkflowEndpoint.cs similarity index 96% rename from src/Moneybird.Net/Endpoints/Workflows/WorkflowEndpoint.cs rename to src/Moneybird.Net/Endpoints/WorkflowEndpoint.cs index 79d4496..1e44359 100644 --- a/src/Moneybird.Net/Endpoints/Workflows/WorkflowEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/WorkflowEndpoint.cs @@ -5,7 +5,7 @@ using Moneybird.Net.Entities.Workflows; using Moneybird.Net.Http; -namespace Moneybird.Net.Endpoints.Workflows +namespace Moneybird.Net.Endpoints { public class WorkflowEndpoint : IWorkflowEndpoint { diff --git a/src/Moneybird.Net/Entities/Notes/Note.cs b/src/Moneybird.Net/Entities/Notes/Note.cs new file mode 100644 index 0000000..14650ab --- /dev/null +++ b/src/Moneybird.Net/Entities/Notes/Note.cs @@ -0,0 +1,50 @@ +using System; +using System.Text.Json.Serialization; + +namespace Moneybird.Net.Entities.Notes +{ + public class Note + { + [JsonPropertyName("id")] + public string Id { get; set; } + + [JsonPropertyName("administration_id")] + public string AdministrationId { get; set; } + + [JsonPropertyName("entity_id")] + public string EntityId { get; set; } + + [JsonPropertyName("entity_type")] + public string EntityType { get; set; } + + [JsonPropertyName("user_id")] + public string UserId { get; set; } + + [JsonPropertyName("assignee_id")] + public string AssigneeId { get; set; } + + [JsonPropertyName("todo")] + public bool Todo { get; set; } + + [JsonPropertyName("note")] + public string Value { get; set; } + + [JsonPropertyName("completed_at")] + public DateTime CompletedAt { get; set; } + + [JsonPropertyName("completed_by_id")] + public string CompletedById { get; set; } + + [JsonPropertyName("todo_type")] + public object TodoType { get; set; } + + [JsonPropertyName("data")] + public object Data { get; set; } + + [JsonPropertyName("created_at")] + public DateTime CreatedAt { get; set; } + + [JsonPropertyName("updated_at")] + public DateTime UpdatedAt { get; set; } + } +} \ No newline at end of file diff --git a/src/Moneybird.Net/Entities/SalesInvoices/SalesInvoiceDetail.cs b/src/Moneybird.Net/Entities/SalesInvoices/SalesInvoiceDetail.cs index e25af40..748452d 100644 --- a/src/Moneybird.Net/Entities/SalesInvoices/SalesInvoiceDetail.cs +++ b/src/Moneybird.Net/Entities/SalesInvoices/SalesInvoiceDetail.cs @@ -35,7 +35,8 @@ public class SalesInvoiceDetail public string Description { get; set; } [JsonPropertyName("price")] - public string Price { get; set; } + [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)] + public double Price { get; set; } [JsonPropertyName("period")] public string Period { get; set; } @@ -44,10 +45,12 @@ public class SalesInvoiceDetail public int RowOrder { get; set; } [JsonPropertyName("total_price_excl_tax_with_discount")] - public string TotalPriceExclTaxWithDiscount { get; set; } + [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)] + public double TotalPriceExclTaxWithDiscount { get; set; } [JsonPropertyName("total_price_excl_tax_with_discount_base")] - public string TotalPriceExclTaxWithDiscountBase { get; set; } + [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)] + public double TotalPriceExclTaxWithDiscountBase { get; set; } [JsonPropertyName("tax_report_reference")] public List TaxReportReference { get; set; } diff --git a/src/Moneybird.Net/Entities/TimeEntries/TimeEntry.cs b/src/Moneybird.Net/Entities/TimeEntries/TimeEntry.cs new file mode 100644 index 0000000..393bfc6 --- /dev/null +++ b/src/Moneybird.Net/Entities/TimeEntries/TimeEntry.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Text.Json.Serialization; +using Moneybird.Net.Entities.Contacts; +using Moneybird.Net.Entities.Notes; +using Moneybird.Net.Entities.Projects; +using Moneybird.Net.Entities.SalesInvoices; +using Moneybird.Net.Entities.Users; + +namespace Moneybird.Net.Entities.TimeEntries +{ + public class TimeEntry : IMoneybirdEntity + { + [JsonPropertyName("id")] + public string Id { get; set; } + + [JsonPropertyName("administration_id")] + public string AdministrationId { get; set; } + + [JsonPropertyName("contact_id")] + public string ContactId { get; set; } + + [JsonPropertyName("project_id")] + public string ProjectId { get; set; } + + [JsonPropertyName("user_id")] + public long UserId { get; set; } + + [JsonPropertyName("started_at")] + public DateTime StartedAt { get; set; } + + [JsonPropertyName("ended_at")] + public DateTime EndedAt { get; set; } + + [JsonPropertyName("description")] + public string Description { get; set; } + + [JsonPropertyName("paused_duration")] + public int PausedDuration { get; set; } + + [JsonPropertyName("billable")] + public bool Billable { get; set; } + + [JsonPropertyName("created_at")] + public DateTime CreatedAt { get; set; } + + [JsonPropertyName("updated_at")] + public DateTime UpdatedAt { get; set; } + + [JsonPropertyName("contact")] + public Contact Contact { get; set; } + + [JsonPropertyName("detail")] + public SalesInvoiceDetail Detail { get; set; } + + [JsonPropertyName("user")] + public User User { get; set; } + + [JsonPropertyName("project")] + public Project Project { get; set; } + + [JsonPropertyName("events")] + public List Events { get; set; } + + [JsonPropertyName("notes")] + public List Notes { get; set; } + } +} \ No newline at end of file diff --git a/src/Moneybird.Net/Entities/TimeEntries/TimeEntryDetail.cs b/src/Moneybird.Net/Entities/TimeEntries/TimeEntryDetail.cs new file mode 100644 index 0000000..19cb804 --- /dev/null +++ b/src/Moneybird.Net/Entities/TimeEntries/TimeEntryDetail.cs @@ -0,0 +1,7 @@ +namespace Moneybird.Net.Entities.TimeEntries +{ + public class TimeEntryDetail + { + + } +} \ No newline at end of file diff --git a/src/Moneybird.Net/Entities/TimeEntries/TimeEntryState.cs b/src/Moneybird.Net/Entities/TimeEntries/TimeEntryState.cs new file mode 100644 index 0000000..dd0a730 --- /dev/null +++ b/src/Moneybird.Net/Entities/TimeEntries/TimeEntryState.cs @@ -0,0 +1,17 @@ +using System.Text.Json.Serialization; + +namespace Moneybird.Net.Entities.TimeEntries +{ + [JsonConverter(typeof(JsonStringEnumMemberConverter))] + public enum TimeEntryState + { + [JsonPropertyName("all")] + All, + + [JsonPropertyName("open")] + Open, + + [JsonPropertyName("non_billable")] + NonBillable, + } +} \ No newline at end of file diff --git a/src/Moneybird.Net/Extensions/ContactsExtensions.cs b/src/Moneybird.Net/Extensions/ContactsExtensions.cs index 665f59c..4c72903 100644 --- a/src/Moneybird.Net/Extensions/ContactsExtensions.cs +++ b/src/Moneybird.Net/Extensions/ContactsExtensions.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using System.Linq; -using Moneybird.Net.Endpoints.Contacts.Models; +using Moneybird.Net.Models.Contacts; namespace Moneybird.Net.Extensions { diff --git a/src/Moneybird.Net/Extensions/ExternalSalesInvoicesExtensions.cs b/src/Moneybird.Net/Extensions/ExternalSalesInvoicesExtensions.cs index 4752fb9..0bfb012 100644 --- a/src/Moneybird.Net/Extensions/ExternalSalesInvoicesExtensions.cs +++ b/src/Moneybird.Net/Extensions/ExternalSalesInvoicesExtensions.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using System.Linq; -using Moneybird.Net.Endpoints.ExternalSalesInvoices.Models; +using Moneybird.Net.Models.ExternalSalesInvoices; namespace Moneybird.Net.Extensions { @@ -12,7 +12,7 @@ public static string GetFilterString(this ExternalSalesInvoiceFilterOptions opti if (options.State.HasValue) { - filterValues.Add($"state:{options.State.Value}"); + filterValues.Add($"state:{options.State.Value.ToString().ToSnakeCase()}"); } if (!string.IsNullOrEmpty(options.Period)) @@ -20,9 +20,9 @@ public static string GetFilterString(this ExternalSalesInvoiceFilterOptions opti filterValues.Add($"period:{options.Period}"); } - if (options.ContactId.HasValue) + if (!string.IsNullOrEmpty(options.ContactId)) { - filterValues.Add($"contact_id:{options.ContactId.Value}"); + filterValues.Add($"contact_id:{options.ContactId}"); } return filterValues.Any() diff --git a/src/Moneybird.Net/Extensions/ProjectsExtensions.cs b/src/Moneybird.Net/Extensions/ProjectsExtensions.cs index 0188c50..df3bc51 100644 --- a/src/Moneybird.Net/Extensions/ProjectsExtensions.cs +++ b/src/Moneybird.Net/Extensions/ProjectsExtensions.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using System.Linq; -using Moneybird.Net.Endpoints.Projects.Models; +using Moneybird.Net.Models.Projects; namespace Moneybird.Net.Extensions { @@ -12,7 +12,7 @@ public static string GetFilterString(this ProjectFilterOptions options) if (options.State.HasValue) { - filterValues.Add($"state:{options.State.Value}"); + filterValues.Add($"state:{options.State.Value.ToString().ToSnakeCase()}"); } return filterValues.Any() diff --git a/src/Moneybird.Net/Extensions/SalesInvoicesExtensions.cs b/src/Moneybird.Net/Extensions/SalesInvoicesExtensions.cs index 1cde374..d01abe6 100644 --- a/src/Moneybird.Net/Extensions/SalesInvoicesExtensions.cs +++ b/src/Moneybird.Net/Extensions/SalesInvoicesExtensions.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using System.Linq; -using Moneybird.Net.Endpoints.SalesInvoices.Models; +using Moneybird.Net.Models.SalesInvoices; namespace Moneybird.Net.Extensions { @@ -12,7 +12,7 @@ public static string GetFilterString(this SalesInvoiceFilterOptions options) if (options.State.HasValue) { - filterValues.Add($"state:{options.State.Value}"); + filterValues.Add($"state:{options.State.Value.ToString().ToSnakeCase()}"); } if (!string.IsNullOrEmpty(options.Period)) @@ -24,20 +24,20 @@ public static string GetFilterString(this SalesInvoiceFilterOptions options) { filterValues.Add($"reference:{options.Reference}"); } - - if (options.ContactId.HasValue) + + if (!string.IsNullOrEmpty(options.ContactId)) { - filterValues.Add($"contact_id:{options.ContactId.Value}"); + filterValues.Add($"contact_id:{options.ContactId}"); } - if (options.RecurringSalesInvoiceId.HasValue) + if (!string.IsNullOrEmpty(options.RecurringSalesInvoiceId)) { - filterValues.Add($"recurring_sales_invoice_id:{options.RecurringSalesInvoiceId.Value}"); + filterValues.Add($"recurring_sales_invoice_id:{options.RecurringSalesInvoiceId}"); } - if (options.WorkflowId.HasValue) + if (!string.IsNullOrEmpty(options.WorkflowId)) { - filterValues.Add($"workflow_id:{options.WorkflowId.Value}"); + filterValues.Add($"workflow_id:{options.WorkflowId}"); } if (options.CreatedAfter.HasValue) diff --git a/src/Moneybird.Net/Extensions/TaxRatesExtensions.cs b/src/Moneybird.Net/Extensions/TaxRatesExtensions.cs index 0bdf620..759c98c 100644 --- a/src/Moneybird.Net/Extensions/TaxRatesExtensions.cs +++ b/src/Moneybird.Net/Extensions/TaxRatesExtensions.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using System.Linq; -using Moneybird.Net.Endpoints.TaxRates.Models; +using Moneybird.Net.Models.TaxRates; namespace Moneybird.Net.Extensions { @@ -27,12 +27,12 @@ public static string GetFilterString(this TaxRateFilterOptions options) if (options.TaxRateType.HasValue) { - filterValues.Add($"tax_rate_type:{options.TaxRateType.Value}"); + filterValues.Add($"tax_rate_type:{options.TaxRateType.Value.ToString().ToSnakeCase()}"); } if (options.State != null && options.State.Any()) { - filterValues.Add($"state:{string.Join("|", options.State)}"); + filterValues.Add($"state:{string.Join("|", options.State.Select(s => s.ToString().ToSnakeCase()))}"); } if (!string.IsNullOrEmpty(options.Country)) @@ -42,12 +42,12 @@ public static string GetFilterString(this TaxRateFilterOptions options) if (options.ShowTax.HasValue) { - filterValues.Add($"show_tax:{options.ShowTax.Value}"); + filterValues.Add($"show_tax:{options.ShowTax.Value.ToString().ToLowerInvariant()}"); } if (options.Active.HasValue) { - filterValues.Add($"active:{options.Active.Value}"); + filterValues.Add($"active:{options.Active.Value.ToString().ToLowerInvariant()}"); } if (options.CreatedAfter.HasValue) diff --git a/src/Moneybird.Net/Extensions/TimeEntriesExtensions.cs b/src/Moneybird.Net/Extensions/TimeEntriesExtensions.cs new file mode 100644 index 0000000..b179c02 --- /dev/null +++ b/src/Moneybird.Net/Extensions/TimeEntriesExtensions.cs @@ -0,0 +1,58 @@ +using System.Collections.Generic; +using System.Linq; +using Moneybird.Net.Models.TimeEntries; + +namespace Moneybird.Net.Extensions +{ + internal static class TimeEntriesExtensions + { + public static string GetFilterString(this TimeEntryFilterOptions options) + { + var filterValues = new List(); + + if (options.State != null && options.State.Any()) + { + filterValues.Add($"state:{string.Join("|", options.State.Select(s => s.ToString().ToSnakeCase()))}"); + } + + if (!string.IsNullOrEmpty(options.Period)) + { + filterValues.Add($"period:{options.Period}"); + } + + if (!string.IsNullOrEmpty(options.ContactId)) + { + filterValues.Add($"contact_id:{options.ContactId}"); + } + + if (options.IncludeNilContacts.HasValue) + { + filterValues.Add($"include_nil_contacts:{options.IncludeNilContacts.Value.ToString().ToLowerInvariant()}"); + } + + if (options.IncludeActive.HasValue) + { + filterValues.Add($"include_active:{options.IncludeActive.Value.ToString().ToLowerInvariant()}"); + } + + if (!string.IsNullOrEmpty(options.ProjectId)) + { + filterValues.Add($"project_id:{options.ProjectId}"); + } + + if (!string.IsNullOrEmpty(options.UserId)) + { + filterValues.Add($"user_id:{options.UserId}"); + } + + if (options.Day != default) + { + filterValues.Add($"day:{options.Day:yyyy-MM-dd}"); + } + + return filterValues.Any() + ? $"filter={string.Join(",", filterValues)}" + : string.Empty; + } + } +} \ No newline at end of file diff --git a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactCreateItem.cs b/src/Moneybird.Net/Models/Contacts/ContactCreateItem.cs similarity index 98% rename from src/Moneybird.Net/Endpoints/Contacts/Models/ContactCreateItem.cs rename to src/Moneybird.Net/Models/Contacts/ContactCreateItem.cs index 9f97499..bb4688b 100644 --- a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactCreateItem.cs +++ b/src/Moneybird.Net/Models/Contacts/ContactCreateItem.cs @@ -3,7 +3,7 @@ using Moneybird.Net.Entities.Contacts; using Moneybird.Net.Misc; -namespace Moneybird.Net.Endpoints.Contacts.Models +namespace Moneybird.Net.Models.Contacts { public class ContactCreateItem { diff --git a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactCreateOptions.cs b/src/Moneybird.Net/Models/Contacts/ContactCreateOptions.cs similarity index 84% rename from src/Moneybird.Net/Endpoints/Contacts/Models/ContactCreateOptions.cs rename to src/Moneybird.Net/Models/Contacts/ContactCreateOptions.cs index 159f6aa..3436d11 100644 --- a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactCreateOptions.cs +++ b/src/Moneybird.Net/Models/Contacts/ContactCreateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.Contacts.Models +namespace Moneybird.Net.Models.Contacts { public class ContactCreateOptions : IMoneybirdCreateOptions { diff --git a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactFilterOptions.cs b/src/Moneybird.Net/Models/Contacts/ContactFilterOptions.cs similarity index 87% rename from src/Moneybird.Net/Endpoints/Contacts/Models/ContactFilterOptions.cs rename to src/Moneybird.Net/Models/Contacts/ContactFilterOptions.cs index b8286ca..f908c2a 100644 --- a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactFilterOptions.cs +++ b/src/Moneybird.Net/Models/Contacts/ContactFilterOptions.cs @@ -1,7 +1,7 @@ using System; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.Contacts.Models +namespace Moneybird.Net.Models.Contacts { public class ContactFilterOptions : IMoneybirdFilterOptions { diff --git a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactListOptions.cs b/src/Moneybird.Net/Models/Contacts/ContactListOptions.cs similarity index 80% rename from src/Moneybird.Net/Endpoints/Contacts/Models/ContactListOptions.cs rename to src/Moneybird.Net/Models/Contacts/ContactListOptions.cs index 9ad042f..67041fb 100644 --- a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactListOptions.cs +++ b/src/Moneybird.Net/Models/Contacts/ContactListOptions.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.Contacts.Models +namespace Moneybird.Net.Models.Contacts { public class ContactListOptions { diff --git a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactPersonCreateItem.cs b/src/Moneybird.Net/Models/Contacts/ContactPersonCreateItem.cs similarity index 92% rename from src/Moneybird.Net/Endpoints/Contacts/Models/ContactPersonCreateItem.cs rename to src/Moneybird.Net/Models/Contacts/ContactPersonCreateItem.cs index 9ce6c6a..c49987f 100644 --- a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactPersonCreateItem.cs +++ b/src/Moneybird.Net/Models/Contacts/ContactPersonCreateItem.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.Contacts.Models +namespace Moneybird.Net.Models.Contacts { public class ContactPersonCreateItem { diff --git a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactPersonCreateOptions.cs b/src/Moneybird.Net/Models/Contacts/ContactPersonCreateOptions.cs similarity index 80% rename from src/Moneybird.Net/Endpoints/Contacts/Models/ContactPersonCreateOptions.cs rename to src/Moneybird.Net/Models/Contacts/ContactPersonCreateOptions.cs index 07e4131..897aff5 100644 --- a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactPersonCreateOptions.cs +++ b/src/Moneybird.Net/Models/Contacts/ContactPersonCreateOptions.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.Contacts.Models +namespace Moneybird.Net.Models.Contacts { public class ContactPersonCreateOptions { diff --git a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactPersonUpdateItem.cs b/src/Moneybird.Net/Models/Contacts/ContactPersonUpdateItem.cs similarity index 92% rename from src/Moneybird.Net/Endpoints/Contacts/Models/ContactPersonUpdateItem.cs rename to src/Moneybird.Net/Models/Contacts/ContactPersonUpdateItem.cs index 7ff6448..27ec945 100644 --- a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactPersonUpdateItem.cs +++ b/src/Moneybird.Net/Models/Contacts/ContactPersonUpdateItem.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.Contacts.Models +namespace Moneybird.Net.Models.Contacts { public class ContactPersonUpdateItem { diff --git a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactPersonUpdateOptions.cs b/src/Moneybird.Net/Models/Contacts/ContactPersonUpdateOptions.cs similarity index 80% rename from src/Moneybird.Net/Endpoints/Contacts/Models/ContactPersonUpdateOptions.cs rename to src/Moneybird.Net/Models/Contacts/ContactPersonUpdateOptions.cs index 48d3e28..124a6c7 100644 --- a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactPersonUpdateOptions.cs +++ b/src/Moneybird.Net/Models/Contacts/ContactPersonUpdateOptions.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.Contacts.Models +namespace Moneybird.Net.Models.Contacts { public class ContactPersonUpdateOptions { diff --git a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactUpdateItem.cs b/src/Moneybird.Net/Models/Contacts/ContactUpdateItem.cs similarity index 98% rename from src/Moneybird.Net/Endpoints/Contacts/Models/ContactUpdateItem.cs rename to src/Moneybird.Net/Models/Contacts/ContactUpdateItem.cs index 5fe4329..fa59462 100644 --- a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactUpdateItem.cs +++ b/src/Moneybird.Net/Models/Contacts/ContactUpdateItem.cs @@ -3,7 +3,7 @@ using Moneybird.Net.Entities.Contacts; using Moneybird.Net.Misc; -namespace Moneybird.Net.Endpoints.Contacts.Models +namespace Moneybird.Net.Models.Contacts { public class ContactUpdateItem { diff --git a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactUpdateOptions.cs b/src/Moneybird.Net/Models/Contacts/ContactUpdateOptions.cs similarity index 84% rename from src/Moneybird.Net/Endpoints/Contacts/Models/ContactUpdateOptions.cs rename to src/Moneybird.Net/Models/Contacts/ContactUpdateOptions.cs index 6caf233..f1c6f6a 100644 --- a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactUpdateOptions.cs +++ b/src/Moneybird.Net/Models/Contacts/ContactUpdateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.Contacts.Models +namespace Moneybird.Net.Models.Contacts { public class ContactUpdateOptions : IMoneybirdUpdateOptions { diff --git a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceCreate.cs b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceCreate.cs similarity index 94% rename from src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceCreate.cs rename to src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceCreate.cs index fa98eda..4181a71 100644 --- a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceCreate.cs +++ b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceCreate.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.ExternalSalesInvoices.Models +namespace Moneybird.Net.Models.ExternalSalesInvoices { public class ExternalSalesInvoiceCreate { diff --git a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceCreateDetail.cs b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceCreateDetail.cs similarity index 96% rename from src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceCreateDetail.cs rename to src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceCreateDetail.cs index afc98d3..73243f8 100644 --- a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceCreateDetail.cs +++ b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceCreateDetail.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.ExternalSalesInvoices.Models +namespace Moneybird.Net.Models.ExternalSalesInvoices { public class ExternalSalesInvoiceCreateDetail { diff --git a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceCreateOptions.cs b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceCreateOptions.cs similarity index 86% rename from src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceCreateOptions.cs rename to src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceCreateOptions.cs index 200dc7f..bde0de2 100644 --- a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceCreateOptions.cs +++ b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceCreateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.ExternalSalesInvoices.Models +namespace Moneybird.Net.Models.ExternalSalesInvoices { public class ExternalSalesInvoiceCreateOptions : IMoneybirdCreateOptions { diff --git a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceFilterOptions.cs b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceFilterOptions.cs similarity index 68% rename from src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceFilterOptions.cs rename to src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceFilterOptions.cs index d3debfe..11ee194 100644 --- a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceFilterOptions.cs +++ b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceFilterOptions.cs @@ -1,8 +1,7 @@ using Moneybird.Net.Endpoints.Abstractions.Options; using Moneybird.Net.Entities.ExternalSalesInvoices; -using Moneybird.Net.Entities.SalesInvoices; -namespace Moneybird.Net.Endpoints.ExternalSalesInvoices.Models +namespace Moneybird.Net.Models.ExternalSalesInvoices { public class ExternalSalesInvoiceFilterOptions : IMoneybirdFilterOptions { @@ -10,6 +9,6 @@ public class ExternalSalesInvoiceFilterOptions : IMoneybirdFilterOptions public string Period { get; set; } - public int? ContactId { get; set; } + public string ContactId { get; set; } } } diff --git a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceUpdate.cs b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceUpdate.cs similarity index 94% rename from src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceUpdate.cs rename to src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceUpdate.cs index 44d3d3f..5d66dce 100644 --- a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceUpdate.cs +++ b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceUpdate.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.ExternalSalesInvoices.Models +namespace Moneybird.Net.Models.ExternalSalesInvoices { public class ExternalSalesInvoiceUpdate { diff --git a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceUpdateDetail.cs b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceUpdateDetail.cs similarity index 96% rename from src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceUpdateDetail.cs rename to src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceUpdateDetail.cs index f087cee..c649989 100644 --- a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceUpdateDetail.cs +++ b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceUpdateDetail.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.ExternalSalesInvoices.Models +namespace Moneybird.Net.Models.ExternalSalesInvoices { public class ExternalSalesInvoiceUpdateDetail { diff --git a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceUpdateOptions.cs b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceUpdateOptions.cs similarity index 86% rename from src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceUpdateOptions.cs rename to src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceUpdateOptions.cs index c919ef0..40b17fc 100644 --- a/src/Moneybird.Net/Endpoints/ExternalSalesInvoices/Models/ExternalSalesInvoiceUpdateOptions.cs +++ b/src/Moneybird.Net/Models/ExternalSalesInvoices/ExternalSalesInvoiceUpdateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.ExternalSalesInvoices.Models +namespace Moneybird.Net.Models.ExternalSalesInvoices { public class ExternalSalesInvoiceUpdateOptions : IMoneybirdUpdateOptions { diff --git a/src/Moneybird.Net/Endpoints/FinancialStatements/Models/FinancialStatementCreate.cs b/src/Moneybird.Net/Models/FinancialStatements/FinancialStatementCreate.cs similarity index 94% rename from src/Moneybird.Net/Endpoints/FinancialStatements/Models/FinancialStatementCreate.cs rename to src/Moneybird.Net/Models/FinancialStatements/FinancialStatementCreate.cs index e633b7b..90f510f 100644 --- a/src/Moneybird.Net/Endpoints/FinancialStatements/Models/FinancialStatementCreate.cs +++ b/src/Moneybird.Net/Models/FinancialStatements/FinancialStatementCreate.cs @@ -3,7 +3,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Entities.FinancialMutations; -namespace Moneybird.Net.Endpoints.FinancialStatements.Models +namespace Moneybird.Net.Models.FinancialStatements { public class FinancialStatementCreate { diff --git a/src/Moneybird.Net/Endpoints/FinancialStatements/Models/FinancialStatementCreateOptions.cs b/src/Moneybird.Net/Models/FinancialStatements/FinancialStatementCreateOptions.cs similarity index 83% rename from src/Moneybird.Net/Endpoints/FinancialStatements/Models/FinancialStatementCreateOptions.cs rename to src/Moneybird.Net/Models/FinancialStatements/FinancialStatementCreateOptions.cs index 281a87d..c640e05 100644 --- a/src/Moneybird.Net/Endpoints/FinancialStatements/Models/FinancialStatementCreateOptions.cs +++ b/src/Moneybird.Net/Models/FinancialStatements/FinancialStatementCreateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.FinancialStatements.Models +namespace Moneybird.Net.Models.FinancialStatements { public class FinancialStatementCreateOptions : IMoneybirdCreateOptions { diff --git a/src/Moneybird.Net/Endpoints/FinancialStatements/Models/FinancialStatementUpdate.cs b/src/Moneybird.Net/Models/FinancialStatements/FinancialStatementUpdate.cs similarity index 94% rename from src/Moneybird.Net/Endpoints/FinancialStatements/Models/FinancialStatementUpdate.cs rename to src/Moneybird.Net/Models/FinancialStatements/FinancialStatementUpdate.cs index 13d9795..01444c9 100644 --- a/src/Moneybird.Net/Endpoints/FinancialStatements/Models/FinancialStatementUpdate.cs +++ b/src/Moneybird.Net/Models/FinancialStatements/FinancialStatementUpdate.cs @@ -3,7 +3,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Entities.FinancialMutations; -namespace Moneybird.Net.Endpoints.FinancialStatements.Models +namespace Moneybird.Net.Models.FinancialStatements { public class FinancialStatementUpdate { diff --git a/src/Moneybird.Net/Endpoints/FinancialStatements/Models/FinancialStatementUpdateOptions.cs b/src/Moneybird.Net/Models/FinancialStatements/FinancialStatementUpdateOptions.cs similarity index 83% rename from src/Moneybird.Net/Endpoints/FinancialStatements/Models/FinancialStatementUpdateOptions.cs rename to src/Moneybird.Net/Models/FinancialStatements/FinancialStatementUpdateOptions.cs index 94b9e83..511f984 100644 --- a/src/Moneybird.Net/Endpoints/FinancialStatements/Models/FinancialStatementUpdateOptions.cs +++ b/src/Moneybird.Net/Models/FinancialStatements/FinancialStatementUpdateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.FinancialStatements.Models +namespace Moneybird.Net.Models.FinancialStatements { public class FinancialStatementUpdateOptions : IMoneybirdUpdateOptions { diff --git a/src/Moneybird.Net/Endpoints/LegderAccounts/Models/LedgerAccountCreate.cs b/src/Moneybird.Net/Models/LedgerAccounts/LedgerAccountCreate.cs similarity index 93% rename from src/Moneybird.Net/Endpoints/LegderAccounts/Models/LedgerAccountCreate.cs rename to src/Moneybird.Net/Models/LedgerAccounts/LedgerAccountCreate.cs index 9c58dec..e94c4bc 100644 --- a/src/Moneybird.Net/Endpoints/LegderAccounts/Models/LedgerAccountCreate.cs +++ b/src/Moneybird.Net/Models/LedgerAccounts/LedgerAccountCreate.cs @@ -3,7 +3,7 @@ using Moneybird.Net.Entities.LedgerAccounts; using Moneybird.Net.Misc; -namespace Moneybird.Net.Endpoints.LegderAccounts.Models +namespace Moneybird.Net.Models.LedgerAccounts { public class LedgerAccountCreate { diff --git a/src/Moneybird.Net/Endpoints/LegderAccounts/Models/LedgerAccountCreateOptions.cs b/src/Moneybird.Net/Models/LedgerAccounts/LedgerAccountCreateOptions.cs similarity index 83% rename from src/Moneybird.Net/Endpoints/LegderAccounts/Models/LedgerAccountCreateOptions.cs rename to src/Moneybird.Net/Models/LedgerAccounts/LedgerAccountCreateOptions.cs index e1c425e..7eb7385 100644 --- a/src/Moneybird.Net/Endpoints/LegderAccounts/Models/LedgerAccountCreateOptions.cs +++ b/src/Moneybird.Net/Models/LedgerAccounts/LedgerAccountCreateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.LegderAccounts.Models +namespace Moneybird.Net.Models.LedgerAccounts { public class LedgerAccountCreateOptions : IMoneybirdCreateOptions { diff --git a/src/Moneybird.Net/Endpoints/LegderAccounts/Models/LedgerAccountUpdate.cs b/src/Moneybird.Net/Models/LedgerAccounts/LedgerAccountUpdate.cs similarity index 93% rename from src/Moneybird.Net/Endpoints/LegderAccounts/Models/LedgerAccountUpdate.cs rename to src/Moneybird.Net/Models/LedgerAccounts/LedgerAccountUpdate.cs index 41a9262..a83cb41 100644 --- a/src/Moneybird.Net/Endpoints/LegderAccounts/Models/LedgerAccountUpdate.cs +++ b/src/Moneybird.Net/Models/LedgerAccounts/LedgerAccountUpdate.cs @@ -3,7 +3,7 @@ using Moneybird.Net.Entities.LedgerAccounts; using Moneybird.Net.Misc; -namespace Moneybird.Net.Endpoints.LegderAccounts.Models +namespace Moneybird.Net.Models.LedgerAccounts { public class LedgerAccountUpdate { diff --git a/src/Moneybird.Net/Endpoints/LegderAccounts/Models/LedgerAccountUpdateOptions.cs b/src/Moneybird.Net/Models/LedgerAccounts/LedgerAccountUpdateOptions.cs similarity index 83% rename from src/Moneybird.Net/Endpoints/LegderAccounts/Models/LedgerAccountUpdateOptions.cs rename to src/Moneybird.Net/Models/LedgerAccounts/LedgerAccountUpdateOptions.cs index cefda8e..bedbe19 100644 --- a/src/Moneybird.Net/Endpoints/LegderAccounts/Models/LedgerAccountUpdateOptions.cs +++ b/src/Moneybird.Net/Models/LedgerAccounts/LedgerAccountUpdateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.LegderAccounts.Models +namespace Moneybird.Net.Models.LedgerAccounts { public class LedgerAccountUpdateOptions : IMoneybirdUpdateOptions { diff --git a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactNoteCreateItem.cs b/src/Moneybird.Net/Models/Notes/NoteCreateItem.cs similarity index 77% rename from src/Moneybird.Net/Endpoints/Contacts/Models/ContactNoteCreateItem.cs rename to src/Moneybird.Net/Models/Notes/NoteCreateItem.cs index 0e45fdc..2c96d70 100644 --- a/src/Moneybird.Net/Endpoints/Contacts/Models/ContactNoteCreateItem.cs +++ b/src/Moneybird.Net/Models/Notes/NoteCreateItem.cs @@ -1,8 +1,8 @@ using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.Contacts.Models +namespace Moneybird.Net.Models.Notes { - public class ContactNoteCreateItem + public class NoteCreateItem { [JsonPropertyName("note")] public string Note { get; set; } diff --git a/src/Moneybird.Net/Models/Notes/NoteCreateOptions.cs b/src/Moneybird.Net/Models/Notes/NoteCreateOptions.cs new file mode 100644 index 0000000..8a2a454 --- /dev/null +++ b/src/Moneybird.Net/Models/Notes/NoteCreateOptions.cs @@ -0,0 +1,10 @@ +using System.Text.Json.Serialization; + +namespace Moneybird.Net.Models.Notes +{ + public class NoteCreateOptions + { + [JsonPropertyName("note")] + public NoteCreateItem Note { get; set; } + } +} \ No newline at end of file diff --git a/src/Moneybird.Net/Endpoints/Products/Models/ProductCreate.cs b/src/Moneybird.Net/Models/Products/ProductCreate.cs similarity index 97% rename from src/Moneybird.Net/Endpoints/Products/Models/ProductCreate.cs rename to src/Moneybird.Net/Models/Products/ProductCreate.cs index 2e48a73..76a1dc7 100644 --- a/src/Moneybird.Net/Endpoints/Products/Models/ProductCreate.cs +++ b/src/Moneybird.Net/Models/Products/ProductCreate.cs @@ -2,7 +2,7 @@ using Moneybird.Net.Entities.Products; using Moneybird.Net.Misc; -namespace Moneybird.Net.Endpoints.Products.Models +namespace Moneybird.Net.Models.Products { public class ProductCreate { diff --git a/src/Moneybird.Net/Endpoints/Products/Models/ProductCreateOptions.cs b/src/Moneybird.Net/Models/Products/ProductCreateOptions.cs similarity index 83% rename from src/Moneybird.Net/Endpoints/Products/Models/ProductCreateOptions.cs rename to src/Moneybird.Net/Models/Products/ProductCreateOptions.cs index 745d9e8..09abc17 100644 --- a/src/Moneybird.Net/Endpoints/Products/Models/ProductCreateOptions.cs +++ b/src/Moneybird.Net/Models/Products/ProductCreateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.Products.Models +namespace Moneybird.Net.Models.Products { public class ProductCreateOptions : IMoneybirdCreateOptions { diff --git a/src/Moneybird.Net/Endpoints/Products/Models/ProductUpdate.cs b/src/Moneybird.Net/Models/Products/ProductUpdate.cs similarity index 97% rename from src/Moneybird.Net/Endpoints/Products/Models/ProductUpdate.cs rename to src/Moneybird.Net/Models/Products/ProductUpdate.cs index 423f566..8fb0c24 100644 --- a/src/Moneybird.Net/Endpoints/Products/Models/ProductUpdate.cs +++ b/src/Moneybird.Net/Models/Products/ProductUpdate.cs @@ -2,7 +2,7 @@ using Moneybird.Net.Entities.Products; using Moneybird.Net.Misc; -namespace Moneybird.Net.Endpoints.Products.Models +namespace Moneybird.Net.Models.Products { public class ProductUpdate { diff --git a/src/Moneybird.Net/Endpoints/Products/Models/ProductUpdateOptions.cs b/src/Moneybird.Net/Models/Products/ProductUpdateOptions.cs similarity index 83% rename from src/Moneybird.Net/Endpoints/Products/Models/ProductUpdateOptions.cs rename to src/Moneybird.Net/Models/Products/ProductUpdateOptions.cs index ac99ba4..5c7c069 100644 --- a/src/Moneybird.Net/Endpoints/Products/Models/ProductUpdateOptions.cs +++ b/src/Moneybird.Net/Models/Products/ProductUpdateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.Products.Models +namespace Moneybird.Net.Models.Products { public class ProductUpdateOptions : IMoneybirdUpdateOptions { diff --git a/src/Moneybird.Net/Endpoints/Projects/Models/ProjectCreate.cs b/src/Moneybird.Net/Models/Projects/ProjectCreate.cs similarity index 83% rename from src/Moneybird.Net/Endpoints/Projects/Models/ProjectCreate.cs rename to src/Moneybird.Net/Models/Projects/ProjectCreate.cs index 9a0abf8..459dbe6 100644 --- a/src/Moneybird.Net/Endpoints/Projects/Models/ProjectCreate.cs +++ b/src/Moneybird.Net/Models/Projects/ProjectCreate.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.Projects.Models +namespace Moneybird.Net.Models.Projects { public class ProjectCreate { diff --git a/src/Moneybird.Net/Endpoints/Projects/Models/ProjectCreateOptions.cs b/src/Moneybird.Net/Models/Projects/ProjectCreateOptions.cs similarity index 83% rename from src/Moneybird.Net/Endpoints/Projects/Models/ProjectCreateOptions.cs rename to src/Moneybird.Net/Models/Projects/ProjectCreateOptions.cs index 3c8486f..fac86b0 100644 --- a/src/Moneybird.Net/Endpoints/Projects/Models/ProjectCreateOptions.cs +++ b/src/Moneybird.Net/Models/Projects/ProjectCreateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.Projects.Models +namespace Moneybird.Net.Models.Projects { public class ProjectCreateOptions : IMoneybirdCreateOptions { diff --git a/src/Moneybird.Net/Endpoints/Projects/Models/ProjectFilterOptions.cs b/src/Moneybird.Net/Models/Projects/ProjectFilterOptions.cs similarity index 81% rename from src/Moneybird.Net/Endpoints/Projects/Models/ProjectFilterOptions.cs rename to src/Moneybird.Net/Models/Projects/ProjectFilterOptions.cs index 5ed39e4..4503915 100644 --- a/src/Moneybird.Net/Endpoints/Projects/Models/ProjectFilterOptions.cs +++ b/src/Moneybird.Net/Models/Projects/ProjectFilterOptions.cs @@ -1,7 +1,7 @@ using Moneybird.Net.Endpoints.Abstractions.Options; using Moneybird.Net.Entities.Projects; -namespace Moneybird.Net.Endpoints.Projects.Models +namespace Moneybird.Net.Models.Projects { public class ProjectFilterOptions : IMoneybirdFilterOptions { diff --git a/src/Moneybird.Net/Endpoints/Projects/Models/ProjectUpdate.cs b/src/Moneybird.Net/Models/Projects/ProjectUpdate.cs similarity index 83% rename from src/Moneybird.Net/Endpoints/Projects/Models/ProjectUpdate.cs rename to src/Moneybird.Net/Models/Projects/ProjectUpdate.cs index 2975fd1..b5f256b 100644 --- a/src/Moneybird.Net/Endpoints/Projects/Models/ProjectUpdate.cs +++ b/src/Moneybird.Net/Models/Projects/ProjectUpdate.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.Projects.Models +namespace Moneybird.Net.Models.Projects { public class ProjectUpdate { diff --git a/src/Moneybird.Net/Endpoints/Projects/Models/ProjectUpdateOptions.cs b/src/Moneybird.Net/Models/Projects/ProjectUpdateOptions.cs similarity index 83% rename from src/Moneybird.Net/Endpoints/Projects/Models/ProjectUpdateOptions.cs rename to src/Moneybird.Net/Models/Projects/ProjectUpdateOptions.cs index fe099ff..57d9c4e 100644 --- a/src/Moneybird.Net/Endpoints/Projects/Models/ProjectUpdateOptions.cs +++ b/src/Moneybird.Net/Models/Projects/ProjectUpdateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.Projects.Models +namespace Moneybird.Net.Models.Projects { public class ProjectUpdateOptions : IMoneybirdUpdateOptions { diff --git a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceCreate.cs b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceCreate.cs similarity index 97% rename from src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceCreate.cs rename to src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceCreate.cs index 0eee7b1..3cac54e 100644 --- a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceCreate.cs +++ b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceCreate.cs @@ -3,7 +3,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Entities.SalesInvoices; -namespace Moneybird.Net.Endpoints.SalesInvoices.Models +namespace Moneybird.Net.Models.SalesInvoices { public class SalesInvoiceCreate { diff --git a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceCreateDetail.cs b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceCreateDetail.cs similarity index 97% rename from src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceCreateDetail.cs rename to src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceCreateDetail.cs index 2d3a35b..a7de2bb 100644 --- a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceCreateDetail.cs +++ b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceCreateDetail.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.SalesInvoices.Models +namespace Moneybird.Net.Models.SalesInvoices { public class SalesInvoiceCreateDetail { diff --git a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceCreateOptions.cs b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceCreateOptions.cs similarity index 89% rename from src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceCreateOptions.cs rename to src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceCreateOptions.cs index 317e5ab..5d2a1f6 100644 --- a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceCreateOptions.cs +++ b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceCreateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.SalesInvoices.Models +namespace Moneybird.Net.Models.SalesInvoices { /// /// https://developer.moneybird.com/api/sales_invoices/#post_sales_invoices diff --git a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceFilterOptions.cs b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceFilterOptions.cs similarity index 71% rename from src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceFilterOptions.cs rename to src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceFilterOptions.cs index 58fb7c4..a34078f 100644 --- a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceFilterOptions.cs +++ b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceFilterOptions.cs @@ -2,7 +2,7 @@ using Moneybird.Net.Endpoints.Abstractions.Options; using Moneybird.Net.Entities.SalesInvoices; -namespace Moneybird.Net.Endpoints.SalesInvoices.Models +namespace Moneybird.Net.Models.SalesInvoices { public class SalesInvoiceFilterOptions : IMoneybirdFilterOptions { @@ -12,11 +12,11 @@ public class SalesInvoiceFilterOptions : IMoneybirdFilterOptions public string Reference { get; set; } - public int? ContactId { get; set; } + public string ContactId { get; set; } - public int? RecurringSalesInvoiceId { get; set; } + public string RecurringSalesInvoiceId { get; set; } - public int? WorkflowId { get; set; } + public string WorkflowId { get; set; } public DateTime? CreatedAfter { get; set; } diff --git a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceUpdate.cs b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceUpdate.cs similarity index 98% rename from src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceUpdate.cs rename to src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceUpdate.cs index 69f7fed..2929f1b 100644 --- a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceUpdate.cs +++ b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceUpdate.cs @@ -3,7 +3,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Entities.SalesInvoices; -namespace Moneybird.Net.Endpoints.SalesInvoices.Models +namespace Moneybird.Net.Models.SalesInvoices { public class SalesInvoiceUpdate { diff --git a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceUpdateDetail.cs b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceUpdateDetail.cs similarity index 97% rename from src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceUpdateDetail.cs rename to src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceUpdateDetail.cs index 1bd3509..652c6bb 100644 --- a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceUpdateDetail.cs +++ b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceUpdateDetail.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; -namespace Moneybird.Net.Endpoints.SalesInvoices.Models +namespace Moneybird.Net.Models.SalesInvoices { public class SalesInvoiceUpdateDetail { diff --git a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceUpdateOptions.cs b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceUpdateOptions.cs similarity index 83% rename from src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceUpdateOptions.cs rename to src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceUpdateOptions.cs index 917d878..363602a 100644 --- a/src/Moneybird.Net/Endpoints/SalesInvoices/Models/SalesInvoiceUpdateOptions.cs +++ b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceUpdateOptions.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; using Moneybird.Net.Endpoints.Abstractions.Options; -namespace Moneybird.Net.Endpoints.SalesInvoices.Models +namespace Moneybird.Net.Models.SalesInvoices { public class SalesInvoiceUpdateOptions : IMoneybirdUpdateOptions { diff --git a/src/Moneybird.Net/Endpoints/TaxRates/Models/TaxRateFilterOptions.cs b/src/Moneybird.Net/Models/TaxRates/TaxRateFilterOptions.cs similarity index 93% rename from src/Moneybird.Net/Endpoints/TaxRates/Models/TaxRateFilterOptions.cs rename to src/Moneybird.Net/Models/TaxRates/TaxRateFilterOptions.cs index 4d68ae1..7449dfb 100644 --- a/src/Moneybird.Net/Endpoints/TaxRates/Models/TaxRateFilterOptions.cs +++ b/src/Moneybird.Net/Models/TaxRates/TaxRateFilterOptions.cs @@ -3,7 +3,7 @@ using Moneybird.Net.Endpoints.Abstractions.Options; using Moneybird.Net.Entities.TaxRates; -namespace Moneybird.Net.Endpoints.TaxRates.Models +namespace Moneybird.Net.Models.TaxRates { public class TaxRateFilterOptions : IMoneybirdFilterOptions { diff --git a/src/Moneybird.Net/Models/TimeEntries/TimeEntryCreate.cs b/src/Moneybird.Net/Models/TimeEntries/TimeEntryCreate.cs new file mode 100644 index 0000000..d424065 --- /dev/null +++ b/src/Moneybird.Net/Models/TimeEntries/TimeEntryCreate.cs @@ -0,0 +1,34 @@ +using System.Text.Json.Serialization; + +namespace Moneybird.Net.Models.TimeEntries +{ + public class TimeEntryCreate + { + [JsonPropertyName("user_id")] + public long UserId { get; set; } + + [JsonPropertyName("started_at")] + public string StartedAt { get; set; } + + [JsonPropertyName("ended_at")] + public string EndedAt { get; set; } + + [JsonPropertyName("description")] + public string Description { get; set; } + + [JsonPropertyName("contact_id")] + public long ContactId { get; set; } + + [JsonPropertyName("project_id")] + public long ProjectId { get; set; } + + [JsonPropertyName("detail_id")] + public long DetailId { get; set; } + + [JsonPropertyName("billable")] + public bool Billable { get; set; } + + [JsonPropertyName("paused_duration")] + public int PausedDuration { get; set; } + } +} \ No newline at end of file diff --git a/src/Moneybird.Net/Models/TimeEntries/TimeEntryCreateOptions.cs b/src/Moneybird.Net/Models/TimeEntries/TimeEntryCreateOptions.cs new file mode 100644 index 0000000..d69b4da --- /dev/null +++ b/src/Moneybird.Net/Models/TimeEntries/TimeEntryCreateOptions.cs @@ -0,0 +1,11 @@ +using System.Text.Json.Serialization; +using Moneybird.Net.Endpoints.Abstractions.Options; + +namespace Moneybird.Net.Models.TimeEntries +{ + public class TimeEntryCreateOptions : IMoneybirdCreateOptions + { + [JsonPropertyName("time_entry")] + public TimeEntryCreate TimeEntry { get; set; } + } +} diff --git a/src/Moneybird.Net/Models/TimeEntries/TimeEntryFilterOptions.cs b/src/Moneybird.Net/Models/TimeEntries/TimeEntryFilterOptions.cs new file mode 100644 index 0000000..566c148 --- /dev/null +++ b/src/Moneybird.Net/Models/TimeEntries/TimeEntryFilterOptions.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using Moneybird.Net.Endpoints.Abstractions.Options; +using Moneybird.Net.Entities.TimeEntries; + +namespace Moneybird.Net.Models.TimeEntries +{ + public class TimeEntryFilterOptions : IMoneybirdFilterOptions + { + public IReadOnlyCollection State { get; set; } + + public string Period { get; set; } + + public string ContactId { get; set; } + + public bool? IncludeNilContacts { get; set; } + + public bool? IncludeActive { get; set; } + + public string ProjectId { get; set; } + + public string UserId { get; set; } + + public DateTime Day { get; set; } + } +} \ No newline at end of file diff --git a/src/Moneybird.Net/Models/TimeEntries/TimeEntryUpdate.cs b/src/Moneybird.Net/Models/TimeEntries/TimeEntryUpdate.cs new file mode 100644 index 0000000..1ff4761 --- /dev/null +++ b/src/Moneybird.Net/Models/TimeEntries/TimeEntryUpdate.cs @@ -0,0 +1,28 @@ +using System.Text.Json.Serialization; + +namespace Moneybird.Net.Models.TimeEntries +{ + public class TimeEntryUpdate + { + [JsonPropertyName("started_at")] + public string StartedAt { get; set; } + + [JsonPropertyName("ended_at")] + public string EndedAt { get; set; } + + [JsonPropertyName("paused_duration")] + public int PausedDuration { get; set; } + + [JsonPropertyName("contact_id")] + public long ContactId { get; set; } + + [JsonPropertyName("project_id")] + public long ProjectId { get; set; } + + [JsonPropertyName("description")] + public string Description { get; set; } + + [JsonPropertyName("billable")] + public bool Billable { get; set; } + } +} \ No newline at end of file diff --git a/src/Moneybird.Net/Models/TimeEntries/TimeEntryUpdateOptions.cs b/src/Moneybird.Net/Models/TimeEntries/TimeEntryUpdateOptions.cs new file mode 100644 index 0000000..10bc591 --- /dev/null +++ b/src/Moneybird.Net/Models/TimeEntries/TimeEntryUpdateOptions.cs @@ -0,0 +1,11 @@ +using System.Text.Json.Serialization; +using Moneybird.Net.Endpoints.Abstractions.Options; + +namespace Moneybird.Net.Models.TimeEntries +{ + public class TimeEntryUpdateOptions : IMoneybirdUpdateOptions + { + [JsonPropertyName("time_entry")] + public TimeEntryUpdate TimeEntry { get; set; } + } +} diff --git a/src/Moneybird.Net/Endpoints/Webhooks/Models/WebhookCreateOptions.cs b/src/Moneybird.Net/Models/Webhooks/WebhookCreateOptions.cs similarity index 89% rename from src/Moneybird.Net/Endpoints/Webhooks/Models/WebhookCreateOptions.cs rename to src/Moneybird.Net/Models/Webhooks/WebhookCreateOptions.cs index d2e83c6..ab52379 100644 --- a/src/Moneybird.Net/Endpoints/Webhooks/Models/WebhookCreateOptions.cs +++ b/src/Moneybird.Net/Models/Webhooks/WebhookCreateOptions.cs @@ -3,7 +3,7 @@ using Moneybird.Net.Endpoints.Abstractions.Options; using Moneybird.Net.Entities.Webhooks; -namespace Moneybird.Net.Endpoints.Webhooks.Models +namespace Moneybird.Net.Models.Webhooks { public class WebhookCreateOptions : IMoneybirdCreateOptions { diff --git a/src/Moneybird.Net/MoneybirdClient.cs b/src/Moneybird.Net/MoneybirdClient.cs index 5e5ff24..6124e30 100644 --- a/src/Moneybird.Net/MoneybirdClient.cs +++ b/src/Moneybird.Net/MoneybirdClient.cs @@ -1,24 +1,8 @@ using System; using System.Net.Http; using Moneybird.Net.Abstractions; +using Moneybird.Net.Endpoints; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.Administrations; -using Moneybird.Net.Endpoints.Contacts; -using Moneybird.Net.Endpoints.CustomFields; -using Moneybird.Net.Endpoints.DocumentStyles; -using Moneybird.Net.Endpoints.ExternalSalesInvoices; -using Moneybird.Net.Endpoints.FinancialAccounts; -using Moneybird.Net.Endpoints.FinancialStatements; -using Moneybird.Net.Endpoints.LegderAccounts; -using Moneybird.Net.Endpoints.Payments; -using Moneybird.Net.Endpoints.Products; -using Moneybird.Net.Endpoints.Projects; -using Moneybird.Net.Endpoints.SalesInvoices; -using Moneybird.Net.Endpoints.TaxRates; -using Moneybird.Net.Endpoints.Users; -using Moneybird.Net.Endpoints.Verifications; -using Moneybird.Net.Endpoints.Webhooks; -using Moneybird.Net.Endpoints.Workflows; using Moneybird.Net.Http; namespace Moneybird.Net diff --git a/tests/Moneybird.Net.Tests/Endpoints/Administrations/AdministrationEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/Administrations/AdministrationEndpointTests.cs index b924957..ebd53c0 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Administrations/AdministrationEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/Administrations/AdministrationEndpointTests.cs @@ -3,8 +3,8 @@ using System.Linq; using System.Text.Json; using FluentAssertions; +using Moneybird.Net.Endpoints; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.Administrations; using Moneybird.Net.Entities.Administrations; using Moneybird.Net.Http; using Moq; diff --git a/tests/Moneybird.Net.Tests/Endpoints/Contacts/ContactEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/Contacts/ContactEndpointTests.cs index 2c91c9e..e0e1ca5 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Contacts/ContactEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/Contacts/ContactEndpointTests.cs @@ -3,12 +3,13 @@ using System.Linq; using System.Text.Json; using FluentAssertions; +using Moneybird.Net.Endpoints; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.Contacts; -using Moneybird.Net.Endpoints.Contacts.Models; using Moneybird.Net.Entities.Contacts; using Moneybird.Net.Http; using Moneybird.Net.Misc; +using Moneybird.Net.Models.Contacts; +using Moneybird.Net.Models.Notes; using Moq; using Xunit; @@ -355,9 +356,9 @@ public async void DeleteContactByIdAsync_ByAccessToken_Returns_True() public async void CreateContactNoteAsync_ByAccessToken_Returns_NewContactNote() { var contactNoteJson = await File.ReadAllTextAsync(NewContactNoteResponsePath); - var contactNoteCreateOptions = new ContactNoteCreateOptions + var contactNoteCreateOptions = new NoteCreateOptions { - Note = new ContactNoteCreateItem + Note = new NoteCreateItem { Note = "Text of the note", Todo = true, diff --git a/tests/Moneybird.Net.Tests/Endpoints/CustomFields/CustomFieldEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/CustomFields/CustomFieldEndpointTests.cs index 87230ff..14c039c 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/CustomFields/CustomFieldEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/CustomFields/CustomFieldEndpointTests.cs @@ -3,8 +3,8 @@ using System.Linq; using System.Text.Json; using FluentAssertions; +using Moneybird.Net.Endpoints; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.CustomFields; using Moneybird.Net.Entities.CustomFields; using Moneybird.Net.Http; using Moq; diff --git a/tests/Moneybird.Net.Tests/Endpoints/DocumentStyles/DocumentStyleEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/DocumentStyles/DocumentStyleEndpointTests.cs index 5eb40c2..65923d5 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/DocumentStyles/DocumentStyleEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/DocumentStyles/DocumentStyleEndpointTests.cs @@ -3,8 +3,8 @@ using System.Linq; using System.Text.Json; using FluentAssertions; +using Moneybird.Net.Endpoints; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.DocumentStyles; using Moneybird.Net.Entities.DocumentStyles; using Moneybird.Net.Http; using Moq; diff --git a/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoices/ExternalSalesInvoiceEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoices/ExternalSalesInvoiceEndpointTests.cs index d81450a..4816ffb 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoices/ExternalSalesInvoiceEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoices/ExternalSalesInvoiceEndpointTests.cs @@ -4,11 +4,11 @@ using System.Linq; using System.Text.Json; using FluentAssertions; -using Moneybird.Net.Endpoints.ExternalSalesInvoices; -using Moneybird.Net.Endpoints.ExternalSalesInvoices.Models; +using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.ExternalSalesInvoices; using Moneybird.Net.Entities.SalesInvoices; using Moneybird.Net.Http; +using Moneybird.Net.Models.ExternalSalesInvoices; using Moq; using Xunit; @@ -70,7 +70,7 @@ public async void GetExternalSalesInvoicesAsync_UsingFilterOptions_ByAccessToken var filterOptions = new ExternalSalesInvoiceFilterOptions { - ContactId = 10, + ContactId = "369764545284015762", State = ExternalSalesInvoiceState.Open, Period = "ThisYear" }; diff --git a/tests/Moneybird.Net.Tests/Endpoints/FinancialAccounts/FinancialAccountEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/FinancialAccounts/FinancialAccountEndpointTests.cs index 6ee1b85..e2331f8 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/FinancialAccounts/FinancialAccountEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/FinancialAccounts/FinancialAccountEndpointTests.cs @@ -3,7 +3,7 @@ using System.Linq; using System.Text.Json; using FluentAssertions; -using Moneybird.Net.Endpoints.FinancialAccounts; +using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.FinancialAccounts; using Moneybird.Net.Http; using Moq; diff --git a/tests/Moneybird.Net.Tests/Endpoints/FinancialStatements/FinancialStatementEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/FinancialStatements/FinancialStatementEndpointTests.cs index 7a1dad2..9612dc1 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/FinancialStatements/FinancialStatementEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/FinancialStatements/FinancialStatementEndpointTests.cs @@ -3,11 +3,11 @@ using System.IO; using System.Text.Json; using FluentAssertions; -using Moneybird.Net.Endpoints.FinancialStatements; -using Moneybird.Net.Endpoints.FinancialStatements.Models; +using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.FinancialMutations; using Moneybird.Net.Entities.FinancialStatements; using Moneybird.Net.Http; +using Moneybird.Net.Models.FinancialStatements; using Moq; using Xunit; diff --git a/tests/Moneybird.Net.Tests/Endpoints/LedgerAccounts/LedgerAccountEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/LedgerAccounts/LedgerAccountEndpointTests.cs index 2a0e968..e1205ae 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/LedgerAccounts/LedgerAccountEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/LedgerAccounts/LedgerAccountEndpointTests.cs @@ -3,11 +3,11 @@ using System.Linq; using System.Text.Json; using FluentAssertions; -using Moneybird.Net.Endpoints.LegderAccounts; -using Moneybird.Net.Endpoints.LegderAccounts.Models; +using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.LedgerAccounts; using Moneybird.Net.Http; using Moneybird.Net.Misc; +using Moneybird.Net.Models.LedgerAccounts; using Moq; using Xunit; diff --git a/tests/Moneybird.Net.Tests/Endpoints/Payments/PaymentEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/Payments/PaymentEndpointTests.cs index d4fb409..e1ed357 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Payments/PaymentEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/Payments/PaymentEndpointTests.cs @@ -3,7 +3,7 @@ using System.Text.Json; using System.Threading.Tasks; using FluentAssertions; -using Moneybird.Net.Endpoints.Payments; +using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.Payments; using Moneybird.Net.Http; using Moq; diff --git a/tests/Moneybird.Net.Tests/Endpoints/Products/ProductEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/Products/ProductEndpointTests.cs index 772bd40..3f39e7d 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Products/ProductEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/Products/ProductEndpointTests.cs @@ -3,11 +3,11 @@ using System.Linq; using System.Text.Json; using FluentAssertions; -using Moneybird.Net.Endpoints.Products; -using Moneybird.Net.Endpoints.Products.Models; +using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.Products; using Moneybird.Net.Http; using Moneybird.Net.Misc; +using Moneybird.Net.Models.Products; using Moq; using Xunit; diff --git a/tests/Moneybird.Net.Tests/Endpoints/Projects/ProjectEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/Projects/ProjectEndpointTests.cs index 6ebff68..a147e48 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Projects/ProjectEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/Projects/ProjectEndpointTests.cs @@ -3,10 +3,10 @@ using System.Linq; using System.Text.Json; using FluentAssertions; -using Moneybird.Net.Endpoints.Projects; -using Moneybird.Net.Endpoints.Projects.Models; +using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.Projects; using Moneybird.Net.Http; +using Moneybird.Net.Models.Projects; using Moq; using Xunit; diff --git a/tests/Moneybird.Net.Tests/Endpoints/SalesInvoices/SalesInvoiceEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/SalesInvoices/SalesInvoiceEndpointTests.cs index c6615d9..04bf473 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/SalesInvoices/SalesInvoiceEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/SalesInvoices/SalesInvoiceEndpointTests.cs @@ -4,10 +4,10 @@ using System.Linq; using System.Text.Json; using FluentAssertions; -using Moneybird.Net.Endpoints.SalesInvoices; -using Moneybird.Net.Endpoints.SalesInvoices.Models; +using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.SalesInvoices; using Moneybird.Net.Http; +using Moneybird.Net.Models.SalesInvoices; using Moq; using Xunit; @@ -69,12 +69,12 @@ public async void GetSalesInvoicesAsync_UsingFilterOptions_ByAccessToken_Returns var filterOptions = new SalesInvoiceFilterOptions { - ContactId = 10, + ContactId = "369764595159532558", State = SalesInvoiceState.Open, Period = "ThisYear", Reference = "30052", - RecurringSalesInvoiceId = 1, - WorkflowId = 9, + RecurringSalesInvoiceId = null, + WorkflowId = "369764439669343349", CreatedAfter = DateTime.UtcNow, UpdatedAfter = DateTime.UtcNow }; diff --git a/tests/Moneybird.Net.Tests/Endpoints/TaxRates/TaxRateEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/TaxRates/TaxRateEndpointTests.cs index f511b59..259d31f 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/TaxRates/TaxRateEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/TaxRates/TaxRateEndpointTests.cs @@ -3,10 +3,10 @@ using System.Linq; using System.Text.Json; using FluentAssertions; -using Moneybird.Net.Endpoints.TaxRates; -using Moneybird.Net.Endpoints.TaxRates.Models; +using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.TaxRates; using Moneybird.Net.Http; +using Moneybird.Net.Models.TaxRates; using Moq; using Xunit; diff --git a/tests/Moneybird.Net.Tests/Endpoints/Users/UserEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/Users/UserEndpointTests.cs index 39d4542..904bf0c 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Users/UserEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/Users/UserEndpointTests.cs @@ -3,7 +3,7 @@ using System.Linq; using System.Text.Json; using FluentAssertions; -using Moneybird.Net.Endpoints.Users; +using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.Users; using Moneybird.Net.Http; using Moq; diff --git a/tests/Moneybird.Net.Tests/Endpoints/Verifications/VerificationEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/Verifications/VerificationEndpointTests.cs index 66e7238..d9367fd 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Verifications/VerificationEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/Verifications/VerificationEndpointTests.cs @@ -3,7 +3,7 @@ using System.Text.Json; using System.Threading.Tasks; using FluentAssertions; -using Moneybird.Net.Endpoints.Verifications; +using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.Verifications; using Moneybird.Net.Http; using Moq; diff --git a/tests/Moneybird.Net.Tests/Endpoints/Webhooks/WebhookEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/Webhooks/WebhookEndpointTests.cs index aec77fd..ca0e81d 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Webhooks/WebhookEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/Webhooks/WebhookEndpointTests.cs @@ -5,10 +5,10 @@ using System.Linq; using System.Text.Json; using FluentAssertions; -using Moneybird.Net.Endpoints.Webhooks; -using Moneybird.Net.Endpoints.Webhooks.Models; +using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.Webhooks; using Moneybird.Net.Http; +using Moneybird.Net.Models.Webhooks; using Moq; using Xunit; diff --git a/tests/Moneybird.Net.Tests/Endpoints/Workflows/WorkflowEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/Workflows/WorkflowEndpointTests.cs index 0c832db..6f01de0 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Workflows/WorkflowEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/Workflows/WorkflowEndpointTests.cs @@ -3,7 +3,7 @@ using System.Linq; using System.Text.Json; using FluentAssertions; -using Moneybird.Net.Endpoints.Workflows; +using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.Workflows; using Moneybird.Net.Http; using Moq; diff --git a/tests/Moneybird.Net.Tests/Extensions/ContactsExtensionsTests.cs b/tests/Moneybird.Net.Tests/Extensions/ContactsExtensionsTests.cs index 8e01573..798c55a 100644 --- a/tests/Moneybird.Net.Tests/Extensions/ContactsExtensionsTests.cs +++ b/tests/Moneybird.Net.Tests/Extensions/ContactsExtensionsTests.cs @@ -1,6 +1,6 @@ using System; -using Moneybird.Net.Endpoints.Contacts.Models; using Moneybird.Net.Extensions; +using Moneybird.Net.Models.Contacts; using Xunit; namespace Moneybird.Net.Tests.Extensions @@ -49,7 +49,7 @@ public void GetFilterString_FromContactFilterOptions_FirstnameOnly_Returns_Corre FirstName = firstName }; - var expectedString = $"filter=first_name:{firstName}"; + var expectedString = $"filter=first_name:Money"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -65,7 +65,7 @@ public void GetFilterString_FromContactFilterOptions_LastnameOnly_Returns_Correc LastName = lastName }; - var expectedString = $"filter=last_name:{lastName}"; + var expectedString = $"filter=last_name:Bird"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -89,8 +89,8 @@ public void GetFilterString_FromContactFilterOptions_All_Returns_CorrectString() var expectedString = $"filter=created_after:{createdDate:O}," + $"updated_after:{updatedDate:O}," + - $"first_name:{firstName}," + - $"last_name:{lastName}"; + $"first_name:Money," + + $"last_name:Bird"; var actualString = options.GetFilterString(); diff --git a/tests/Moneybird.Net.Tests/Extensions/ExternalSalesInvoicesExtensionsTests.cs b/tests/Moneybird.Net.Tests/Extensions/ExternalSalesInvoicesExtensionsTests.cs index 2968222..5cb00ac 100644 --- a/tests/Moneybird.Net.Tests/Extensions/ExternalSalesInvoicesExtensionsTests.cs +++ b/tests/Moneybird.Net.Tests/Extensions/ExternalSalesInvoicesExtensionsTests.cs @@ -1,7 +1,7 @@ -using Moneybird.Net.Endpoints.ExternalSalesInvoices.Models; using Moneybird.Net.Entities.ExternalSalesInvoices; using Moneybird.Net.Entities.SalesInvoices; using Moneybird.Net.Extensions; +using Moneybird.Net.Models.ExternalSalesInvoices; using Xunit; namespace Moneybird.Net.Tests.Extensions; @@ -18,7 +18,7 @@ public void GetFilterString_FromExternalSalesInvoiceFilterOptions_StateOnly_Retu State = state }; - var expectedString = $"filter=state:{state}"; + const string expectedString = "filter=state:all"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -27,14 +27,14 @@ public void GetFilterString_FromExternalSalesInvoiceFilterOptions_StateOnly_Retu [Fact] public void GetFilterString_FromExternalSalesInvoiceFilterOptions_PeriodOnly_Returns_CorrectString() { - const string period = "ThisYear"; + const string period = "this_year"; var options = new ExternalSalesInvoiceFilterOptions { Period = period }; - var expectedString = $"filter=period:{period}"; + const string expectedString = "filter=period:this_year"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -43,14 +43,14 @@ public void GetFilterString_FromExternalSalesInvoiceFilterOptions_PeriodOnly_Ret [Fact] public void GetFilterString_FromExternalSalesInvoiceFilterOptions_ContactIdOnly_Returns_CorrectString() { - const int contactId = 10; + const string contactId = "381666401394414610"; var options = new ExternalSalesInvoiceFilterOptions { ContactId = contactId }; - var expectedString = $"filter=contact_id:{contactId}"; + const string expectedString = "filter=contact_id:381666401394414610"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -59,9 +59,9 @@ public void GetFilterString_FromExternalSalesInvoiceFilterOptions_ContactIdOnly_ [Fact] public void GetFilterString_FromExternalSalesInvoiceFilterOptions_All_Returns_CorrectString() { - const ExternalSalesInvoiceState state = ExternalSalesInvoiceState.All; - const string period = "ThisYear"; - const int contactId = 10; + const ExternalSalesInvoiceState state = ExternalSalesInvoiceState.Late; + const string period = "this_month"; + const string contactId = "381666401394414610"; var options = new ExternalSalesInvoiceFilterOptions { @@ -70,9 +70,9 @@ public void GetFilterString_FromExternalSalesInvoiceFilterOptions_All_Returns_Co ContactId = contactId }; - var expectedString = $"filter=state:{state}," + - $"period:{period}," + - $"contact_id:{contactId}"; + const string expectedString = $"filter=state:late," + + $"period:this_month," + + $"contact_id:381666401394414610"; var actualString = options.GetFilterString(); diff --git a/tests/Moneybird.Net.Tests/Extensions/ProjectsExtensionsTests.cs b/tests/Moneybird.Net.Tests/Extensions/ProjectsExtensionsTests.cs index 0a34c48..6d2c7ca 100644 --- a/tests/Moneybird.Net.Tests/Extensions/ProjectsExtensionsTests.cs +++ b/tests/Moneybird.Net.Tests/Extensions/ProjectsExtensionsTests.cs @@ -1,6 +1,6 @@ -using Moneybird.Net.Endpoints.Projects.Models; using Moneybird.Net.Entities.Projects; using Moneybird.Net.Extensions; +using Moneybird.Net.Models.Projects; using Xunit; namespace Moneybird.Net.Tests.Extensions; @@ -10,14 +10,14 @@ public class ProjectsExtensionsTests [Fact] public void GetFilterString_FromProjectFilterOptions_StateOnly_Returns_CorrectString() { - const ProjectState state = ProjectState.All; + const ProjectState state = ProjectState.Active; var options = new ProjectFilterOptions { State = state }; - var expectedString = $"filter=state:{state}"; + const string expectedString = "filter=state:active"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); diff --git a/tests/Moneybird.Net.Tests/Extensions/SalesInvoicesExtensionsTests.cs b/tests/Moneybird.Net.Tests/Extensions/SalesInvoicesExtensionsTests.cs index 5ad5bcf..bd9dbde 100644 --- a/tests/Moneybird.Net.Tests/Extensions/SalesInvoicesExtensionsTests.cs +++ b/tests/Moneybird.Net.Tests/Extensions/SalesInvoicesExtensionsTests.cs @@ -1,7 +1,7 @@ using System; -using Moneybird.Net.Endpoints.SalesInvoices.Models; using Moneybird.Net.Entities.SalesInvoices; using Moneybird.Net.Extensions; +using Moneybird.Net.Models.SalesInvoices; using Xunit; namespace Moneybird.Net.Tests.Extensions; @@ -11,14 +11,14 @@ public class SalesInvoicesExtensionsTests [Fact] public void GetFilterString_FromSalesInvoiceFilterOptions_StateOnly_Returns_CorrectString() { - const SalesInvoiceState state = SalesInvoiceState.All; + const SalesInvoiceState state = SalesInvoiceState.Reminded; var options = new SalesInvoiceFilterOptions { State = state }; - var expectedString = $"filter=state:{state}"; + const string expectedString = "filter=state:reminded"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -27,14 +27,14 @@ public void GetFilterString_FromSalesInvoiceFilterOptions_StateOnly_Returns_Corr [Fact] public void GetFilterString_FromSalesInvoiceFilterOptions_PeriodOnly_Returns_CorrectString() { - const string period = "ThisYear"; + const string period = "this_month"; var options = new SalesInvoiceFilterOptions { Period = period }; - var expectedString = $"filter=period:{period}"; + const string expectedString = "filter=period:this_month"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -50,7 +50,7 @@ public void GetFilterString_FromSalesInvoiceFilterOptions_ReferenceOnly_Returns_ Reference = reference }; - var expectedString = $"filter=reference:{reference}"; + const string expectedString = "filter=reference:test"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -59,14 +59,14 @@ public void GetFilterString_FromSalesInvoiceFilterOptions_ReferenceOnly_Returns_ [Fact] public void GetFilterString_FromSalesInvoiceFilterOptions_ContactIdOnly_Returns_CorrectString() { - const int contactId = 10; + const string contactId = "381666401394414610"; var options = new SalesInvoiceFilterOptions { ContactId = contactId }; - var expectedString = $"filter=contact_id:{contactId}"; + const string expectedString = "filter=contact_id:381666401394414610"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -75,14 +75,14 @@ public void GetFilterString_FromSalesInvoiceFilterOptions_ContactIdOnly_Returns_ [Fact] public void GetFilterString_FromSalesInvoiceFilterOptions_RecurringSalesInvoiceIdOnly_Returns_CorrectString() { - const int recurringSalesInvoiceId = 100; + const string recurringSalesInvoiceId = "395773954254439850"; var options = new SalesInvoiceFilterOptions { RecurringSalesInvoiceId = recurringSalesInvoiceId }; - var expectedString = $"filter=recurring_sales_invoice_id:{recurringSalesInvoiceId}"; + const string expectedString = "filter=recurring_sales_invoice_id:395773954254439850"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -91,14 +91,14 @@ public void GetFilterString_FromSalesInvoiceFilterOptions_RecurringSalesInvoiceI [Fact] public void GetFilterString_FromSalesInvoiceFilterOptions_WorkflowIdOnly_Returns_CorrectString() { - const int workflowId = 1; + const string workflowId = "395773789247375285"; var options = new SalesInvoiceFilterOptions { WorkflowId = workflowId }; - var expectedString = $"filter=workflow_id:{workflowId}"; + const string expectedString = $"filter=workflow_id:395773789247375285"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -139,12 +139,12 @@ public void GetFilterString_FromSalesInvoiceFilterOptions_UpdatedOnly_Returns_Co [Fact] public void GetFilterString_FromSalesInvoiceFilterOptions_All_Returns_CorrectString() { - const SalesInvoiceState state = SalesInvoiceState.All; - const string period = "ThisYear"; + const SalesInvoiceState state = SalesInvoiceState.PendingPayment; + const string period = "this_year"; const string reference = "test"; - const int contactId = 10; - const int recurringSalesInvoiceId = 100; - const int workflowId = 1; + const string contactId = "381666401394414610"; + const string recurringSalesInvoiceId = "395773954254439850"; + const string workflowId = "395773789247375285"; var createdAfter = DateTime.UtcNow; var updatedAfter = DateTime.UtcNow; @@ -160,12 +160,12 @@ public void GetFilterString_FromSalesInvoiceFilterOptions_All_Returns_CorrectStr UpdatedAfter = updatedAfter }; - var expectedString = $"filter=state:{state}," + - $"period:{period}," + - $"reference:{reference}," + - $"contact_id:{contactId}," + - $"recurring_sales_invoice_id:{recurringSalesInvoiceId}," + - $"workflow_id:{workflowId}," + + var expectedString = $"filter=state:pending_payment," + + $"period:this_year," + + $"reference:test," + + $"contact_id:381666401394414610," + + $"recurring_sales_invoice_id:395773954254439850," + + $"workflow_id:395773789247375285," + $"created_after:{createdAfter:O}," + $"updated_after:{updatedAfter:O}"; diff --git a/tests/Moneybird.Net.Tests/Extensions/TaxRatesExtensionsTests.cs b/tests/Moneybird.Net.Tests/Extensions/TaxRatesExtensionsTests.cs index d617c51..0cd73fe 100644 --- a/tests/Moneybird.Net.Tests/Extensions/TaxRatesExtensionsTests.cs +++ b/tests/Moneybird.Net.Tests/Extensions/TaxRatesExtensionsTests.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; -using Moneybird.Net.Endpoints.TaxRates.Models; using Moneybird.Net.Entities.TaxRates; using Moneybird.Net.Extensions; +using Moneybird.Net.Models.TaxRates; using Xunit; namespace Moneybird.Net.Tests.Extensions; @@ -60,14 +60,14 @@ public void GetFilterString_FromTaxRateFilterOptions_PercentageOnly_Returns_Corr [Fact] public void GetFilterString_FromTaxRateFilterOptions_TaxRateTypeOnly_Returns_CorrectString() { - const TaxRateType taxRateType = TaxRateType.All; + const TaxRateType taxRateType = TaxRateType.GeneralJournalDocument; var options = new TaxRateFilterOptions { TaxRateType = taxRateType }; - var expectedString = $"filter=tax_rate_type:{taxRateType}"; + const string expectedString = "filter=tax_rate_type:general_journal_document"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -83,7 +83,7 @@ public void GetFilterString_FromTaxRateFilterOptions_StateOnly_Returns_CorrectSt State = taxRateType }; - var expectedString = $"filter=state:{string.Join("|", taxRateType)}"; + const string expectedString = "filter=state:purchase_invoice|sales_invoice"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -99,7 +99,7 @@ public void GetFilterString_FromTaxRateFilterOptions_CountryOnly_Returns_Correct Country = country }; - const string expectedString = $"filter=country:{country}"; + const string expectedString = "filter=country:NL"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -115,7 +115,7 @@ public void GetFilterString_FromTaxRateFilterOptions_ShowTaxOnly_Returns_Correct ShowTax = showTax }; - var expectedString = $"filter=show_tax:{showTax}"; + const string expectedString = "filter=show_tax:true"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -131,7 +131,7 @@ public void GetFilterString_FromTaxRateFilterOptions_ActiveOnly_Returns_CorrectS Active = active }; - var expectedString = $"filter=active:{active}"; + const string expectedString = "filter=active:true"; var actualString = options.GetFilterString(); Assert.Equal(expectedString, actualString); @@ -197,14 +197,14 @@ public void GetFilterString_FromTaxRateFilterOptions_All_Returns_CorrectString() UpdatedAfter = updatedAfter }; - var expectedString = $"filter=name:{name}," + - $"partial_name:{partialName}," + - $"percentage:{percentage}," + - $"tax_rate_type:{taxRateType}," + - $"state:{string.Join("|", state)}," + - $"country:{country}," + - $"show_tax:{showTax}," + - $"active:{active}," + + var expectedString = $"filter=name:Money Bird," + + $"partial_name:Bird," + + $"percentage:21," + + $"tax_rate_type:all," + + $"state:purchase_invoice|sales_invoice," + + $"country:NL," + + $"show_tax:true," + + $"active:true," + $"created_after:{createdAfter:O}," + $"updated_after:{updatedAfter:O}"; diff --git a/tests/Moneybird.Net.Tests/Extensions/TimeEntriesExtensionsTests.cs b/tests/Moneybird.Net.Tests/Extensions/TimeEntriesExtensionsTests.cs new file mode 100644 index 0000000..ba89252 --- /dev/null +++ b/tests/Moneybird.Net.Tests/Extensions/TimeEntriesExtensionsTests.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using Microsoft.VisualBasic; +using Moneybird.Net.Entities.TaxRates; +using Moneybird.Net.Entities.TimeEntries; +using Moneybird.Net.Extensions; +using Moneybird.Net.Models.TimeEntries; +using Xunit; + +namespace Moneybird.Net.Tests.Extensions; + +public class TimeEntriesExtensionsTests +{ + [Fact] + public void GetFilterString_FromTimeEntryFilterOptions_StateOnly_Returns_CorrectString() + { + var state = new List { TimeEntryState.Open }; + + var options = new TimeEntryFilterOptions + { + State = state + }; + + const string expectedString = "filter=state:open"; + var actualString = options.GetFilterString(); + + Assert.Equal(expectedString, actualString); + } + + [Fact] + public void GetFilterString_FromTimeEntryFilterOptions_PeriodOnly_Returns_CorrectString() + { + const string period = "this_year"; + + var options = new TimeEntryFilterOptions + { + Period = period + }; + + const string expectedString = "filter=period:this_year"; + var actualString = options.GetFilterString(); + + Assert.Equal(expectedString, actualString); + } + + [Fact] + public void GetFilterString_FromTimeEntryFilterOptions_ContactIdOnly_Returns_CorrectString() + { + const string contactId = "381666401394414610"; + + var options = new TimeEntryFilterOptions + { + ContactId = contactId + }; + + const string expectedString = "filter=contact_id:381666401394414610"; + var actualString = options.GetFilterString(); + + Assert.Equal(expectedString, actualString); + } + + [Fact] + public void GetFilterString_FromTimeEntryFilterOptions_IncludeNilContactsOnly_Returns_CorrectString() + { + const bool includeNilContacts = false; + + var options = new TimeEntryFilterOptions + { + IncludeNilContacts = includeNilContacts + }; + + const string expectedString = "filter=include_nil_contacts:false"; + var actualString = options.GetFilterString(); + + Assert.Equal(expectedString, actualString); + } + + [Fact] + public void GetFilterString_FromTimeEntryFilterOptions_IncludeActiveOnly_Returns_CorrectString() + { + const bool includeActive = true; + + var options = new TimeEntryFilterOptions + { + IncludeActive = includeActive + }; + + const string expectedString = "filter=include_active:true"; + var actualString = options.GetFilterString(); + + Assert.Equal(expectedString, actualString); + } + + [Fact] + public void GetFilterString_FromTimeEntryFilterOptions_ProjectIdOnly_Returns_CorrectString() + { + const string projectId = "386844401331200766"; + + var options = new TimeEntryFilterOptions + { + ProjectId = projectId + }; + + const string expectedString = "filter=project_id:386844401331200766"; + var actualString = options.GetFilterString(); + + Assert.Equal(expectedString, actualString); + } + + [Fact] + public void GetFilterString_FromTimeEntryFilterOptions_UserIdOnly_Returns_CorrectString() + { + const string userId = "252969831744742910"; + + var options = new TimeEntryFilterOptions + { + UserId = userId + }; + + const string expectedString = "filter=user_id:252969831744742910"; + var actualString = options.GetFilterString(); + + Assert.Equal(expectedString, actualString); + } + + [Fact] + public void GetFilterString_FromTimeEntryFilterOptions_DayOnly_Returns_CorrectString() + { + var day = DateTime.Parse("2023-11-05"); + + var options = new TimeEntryFilterOptions + { + Day = day + }; + + const string expectedString = "filter=day:2023-11-05"; + var actualString = options.GetFilterString(); + + Assert.Equal(expectedString, actualString); + } + + [Fact] + public void GetFilterString_FromTaxRateFilterOptions_All_Returns_CorrectString() + { + var state = new List { TimeEntryState.All }; + const string period = "this_month"; + const string contactId = "381666401394414610"; + const bool includeNilContacts = true; + const bool includeActive = false; + const string projectId = "386844401331200766"; + const string userId = "252969831744742910"; + var day = DateTime.Parse("2023-11-10"); + + var options = new TimeEntryFilterOptions + { + State = state, + Period = period, + ContactId = contactId, + IncludeNilContacts = includeNilContacts, + IncludeActive = includeActive, + ProjectId = projectId, + UserId = userId, + Day = day + }; + + const string expectedString = $"filter=state:all," + + $"period:this_month," + + $"contact_id:381666401394414610," + + $"include_nil_contacts:true," + + $"include_active:false," + + $"project_id:386844401331200766," + + $"user_id:252969831744742910," + + $"day:2023-11-10"; + + var actualString = options.GetFilterString(); + + Assert.Equal(expectedString, actualString); + } +} From db31bfec0bf9a0238d23a7156617e7af43464941 Mon Sep 17 00:00:00 2001 From: Vincent Vrijburg Date: Sun, 26 Nov 2023 15:19:20 +0100 Subject: [PATCH 02/19] Add extra test for extension method --- .../Extensions/TimeEntriesExtensionsTests.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/Moneybird.Net.Tests/Extensions/TimeEntriesExtensionsTests.cs b/tests/Moneybird.Net.Tests/Extensions/TimeEntriesExtensionsTests.cs index ba89252..250150f 100644 --- a/tests/Moneybird.Net.Tests/Extensions/TimeEntriesExtensionsTests.cs +++ b/tests/Moneybird.Net.Tests/Extensions/TimeEntriesExtensionsTests.cs @@ -12,6 +12,17 @@ namespace Moneybird.Net.Tests.Extensions; public class TimeEntriesExtensionsTests { + [Fact] + public void GetFilterString_FromTimeEntryFilterOptions_NoFilters_Returns_EmptyString() + { + var options = new TimeEntryFilterOptions(); + + const string expectedString = ""; + var actualString = options.GetFilterString(); + + Assert.Equal(expectedString, actualString); + } + [Fact] public void GetFilterString_FromTimeEntryFilterOptions_StateOnly_Returns_CorrectString() { From 29c80ee6bea1dafe69524610ad60c1bf1753b495 Mon Sep 17 00:00:00 2001 From: Vincent Vrijburg Date: Sun, 26 Nov 2023 15:21:45 +0100 Subject: [PATCH 03/19] Move endpoint tests --- .../{Administrations => }/AdministrationEndpointTests.cs | 2 +- .../Endpoints/{Contacts => }/ContactEndpointTests.cs | 2 +- .../Endpoints/{Contacts => }/ContactTestBase.cs | 2 +- .../Endpoints/{CustomFields => }/CustomFieldEndpointTests.cs | 2 +- .../{DocumentStyles => }/DocumentStyleEndpointTests.cs | 2 +- .../ExternalSalesInvoiceEndpointTests.cs | 3 +-- .../ExternalSalesInvoicesTestBase.cs | 2 +- .../{FinancialAccounts => }/FinancialAccountEndpointTests.cs | 2 +- .../FinancialStatementEndpointTests.cs | 2 +- .../{FinancialStatements => }/FinancialStatementTestBase.cs | 2 +- .../{LedgerAccounts => }/LedgerAccountEndpointTests.cs | 2 +- .../Endpoints/{LedgerAccounts => }/LedgerAccountTestBase.cs | 2 +- .../Endpoints/{Payments => }/PaymentEndpointTests.cs | 2 +- .../Endpoints/{Payments => }/PaymentTestBase.cs | 2 +- .../Endpoints/{Products => }/ProductEndpointTests.cs | 2 +- .../Endpoints/{Products => }/ProductTestBase.cs | 2 +- .../Endpoints/{Projects => }/ProjectEndpointTests.cs | 2 +- .../Endpoints/{Projects => }/ProjectTestBase.cs | 2 +- .../{SalesInvoices => }/SalesInvoiceEndpointTests.cs | 2 +- .../Endpoints/{SalesInvoices => }/SalesInvoiceTestBase.cs | 2 +- .../Endpoints/{TaxRates => }/TaxRateEndpointTests.cs | 2 +- .../Endpoints/{Users => }/UserEndpointTests.cs | 2 +- .../{Verifications => }/VerificationEndpointTests.cs | 2 +- .../Endpoints/{Webhooks => }/WebhookEndpointTestBase.cs | 2 +- .../Endpoints/{Webhooks => }/WebhookEndpointTests.cs | 4 +--- .../Endpoints/{Workflows => }/WorkflowEndpointTests.cs | 2 +- 26 files changed, 26 insertions(+), 29 deletions(-) rename tests/Moneybird.Net.Tests/Endpoints/{Administrations => }/AdministrationEndpointTests.cs (97%) rename tests/Moneybird.Net.Tests/Endpoints/{Contacts => }/ContactEndpointTests.cs (99%) rename tests/Moneybird.Net.Tests/Endpoints/{Contacts => }/ContactTestBase.cs (86%) rename tests/Moneybird.Net.Tests/Endpoints/{CustomFields => }/CustomFieldEndpointTests.cs (97%) rename tests/Moneybird.Net.Tests/Endpoints/{DocumentStyles => }/DocumentStyleEndpointTests.cs (97%) rename tests/Moneybird.Net.Tests/Endpoints/{ExternalSalesInvoices => }/ExternalSalesInvoiceEndpointTests.cs (99%) rename tests/Moneybird.Net.Tests/Endpoints/{ExternalSalesInvoices => }/ExternalSalesInvoicesTestBase.cs (68%) rename tests/Moneybird.Net.Tests/Endpoints/{FinancialAccounts => }/FinancialAccountEndpointTests.cs (97%) rename tests/Moneybird.Net.Tests/Endpoints/{FinancialStatements => }/FinancialStatementEndpointTests.cs (99%) rename tests/Moneybird.Net.Tests/Endpoints/{FinancialStatements => }/FinancialStatementTestBase.cs (68%) rename tests/Moneybird.Net.Tests/Endpoints/{LedgerAccounts => }/LedgerAccountEndpointTests.cs (99%) rename tests/Moneybird.Net.Tests/Endpoints/{LedgerAccounts => }/LedgerAccountTestBase.cs (69%) rename tests/Moneybird.Net.Tests/Endpoints/{Payments => }/PaymentEndpointTests.cs (96%) rename tests/Moneybird.Net.Tests/Endpoints/{Payments => }/PaymentTestBase.cs (69%) rename tests/Moneybird.Net.Tests/Endpoints/{Products => }/ProductEndpointTests.cs (99%) rename tests/Moneybird.Net.Tests/Endpoints/{Products => }/ProductTestBase.cs (77%) rename tests/Moneybird.Net.Tests/Endpoints/{Projects => }/ProjectEndpointTests.cs (99%) rename tests/Moneybird.Net.Tests/Endpoints/{Projects => }/ProjectTestBase.cs (69%) rename tests/Moneybird.Net.Tests/Endpoints/{SalesInvoices => }/SalesInvoiceEndpointTests.cs (99%) rename tests/Moneybird.Net.Tests/Endpoints/{SalesInvoices => }/SalesInvoiceTestBase.cs (68%) rename tests/Moneybird.Net.Tests/Endpoints/{TaxRates => }/TaxRateEndpointTests.cs (98%) rename tests/Moneybird.Net.Tests/Endpoints/{Users => }/UserEndpointTests.cs (97%) rename tests/Moneybird.Net.Tests/Endpoints/{Verifications => }/VerificationEndpointTests.cs (99%) rename tests/Moneybird.Net.Tests/Endpoints/{Webhooks => }/WebhookEndpointTestBase.cs (70%) rename tests/Moneybird.Net.Tests/Endpoints/{Webhooks => }/WebhookEndpointTests.cs (97%) rename tests/Moneybird.Net.Tests/Endpoints/{Workflows => }/WorkflowEndpointTests.cs (97%) diff --git a/tests/Moneybird.Net.Tests/Endpoints/Administrations/AdministrationEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/AdministrationEndpointTests.cs similarity index 97% rename from tests/Moneybird.Net.Tests/Endpoints/Administrations/AdministrationEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/AdministrationEndpointTests.cs index ebd53c0..8836d67 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Administrations/AdministrationEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/AdministrationEndpointTests.cs @@ -10,7 +10,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.Administrations +namespace Moneybird.Net.Tests.Endpoints { public class AdministrationEndpointTests : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/Contacts/ContactEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs similarity index 99% rename from tests/Moneybird.Net.Tests/Endpoints/Contacts/ContactEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs index e0e1ca5..b89ba20 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Contacts/ContactEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs @@ -13,7 +13,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.Contacts +namespace Moneybird.Net.Tests.Endpoints { public class ContactEndpointTests : ContactTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/Contacts/ContactTestBase.cs b/tests/Moneybird.Net.Tests/Endpoints/ContactTestBase.cs similarity index 86% rename from tests/Moneybird.Net.Tests/Endpoints/Contacts/ContactTestBase.cs rename to tests/Moneybird.Net.Tests/Endpoints/ContactTestBase.cs index f4b5292..dab479f 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Contacts/ContactTestBase.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ContactTestBase.cs @@ -1,4 +1,4 @@ -namespace Moneybird.Net.Tests.Endpoints.Contacts +namespace Moneybird.Net.Tests.Endpoints { public class ContactTestBase : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/CustomFields/CustomFieldEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/CustomFieldEndpointTests.cs similarity index 97% rename from tests/Moneybird.Net.Tests/Endpoints/CustomFields/CustomFieldEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/CustomFieldEndpointTests.cs index 14c039c..0e0176c 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/CustomFields/CustomFieldEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/CustomFieldEndpointTests.cs @@ -10,7 +10,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.CustomFields +namespace Moneybird.Net.Tests.Endpoints { public class CustomFieldEndpointTests : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/DocumentStyles/DocumentStyleEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/DocumentStyleEndpointTests.cs similarity index 97% rename from tests/Moneybird.Net.Tests/Endpoints/DocumentStyles/DocumentStyleEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/DocumentStyleEndpointTests.cs index 65923d5..63f0689 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/DocumentStyles/DocumentStyleEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/DocumentStyleEndpointTests.cs @@ -10,7 +10,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.DocumentStyles +namespace Moneybird.Net.Tests.Endpoints { public class DocumentStyleEndpointTests : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoices/ExternalSalesInvoiceEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoiceEndpointTests.cs similarity index 99% rename from tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoices/ExternalSalesInvoiceEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoiceEndpointTests.cs index 4816ffb..0b4ffea 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoices/ExternalSalesInvoiceEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoiceEndpointTests.cs @@ -6,13 +6,12 @@ using FluentAssertions; using Moneybird.Net.Endpoints; using Moneybird.Net.Entities.ExternalSalesInvoices; -using Moneybird.Net.Entities.SalesInvoices; using Moneybird.Net.Http; using Moneybird.Net.Models.ExternalSalesInvoices; using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.ExternalSalesInvoices; +namespace Moneybird.Net.Tests.Endpoints; public class ExternalSalesInvoiceEndpointTests : ExternalSalesInvoicesTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoices/ExternalSalesInvoicesTestBase.cs b/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoicesTestBase.cs similarity index 68% rename from tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoices/ExternalSalesInvoicesTestBase.cs rename to tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoicesTestBase.cs index ae6b541..c10107c 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoices/ExternalSalesInvoicesTestBase.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoicesTestBase.cs @@ -1,4 +1,4 @@ -namespace Moneybird.Net.Tests.Endpoints.ExternalSalesInvoices; +namespace Moneybird.Net.Tests.Endpoints; public class ExternalSalesInvoicesTestBase : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/FinancialAccounts/FinancialAccountEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/FinancialAccountEndpointTests.cs similarity index 97% rename from tests/Moneybird.Net.Tests/Endpoints/FinancialAccounts/FinancialAccountEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/FinancialAccountEndpointTests.cs index e2331f8..73262c4 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/FinancialAccounts/FinancialAccountEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/FinancialAccountEndpointTests.cs @@ -9,7 +9,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.FinancialAccounts; +namespace Moneybird.Net.Tests.Endpoints; public class FinancialAccountEndpointTests : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/FinancialStatements/FinancialStatementEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/FinancialStatementEndpointTests.cs similarity index 99% rename from tests/Moneybird.Net.Tests/Endpoints/FinancialStatements/FinancialStatementEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/FinancialStatementEndpointTests.cs index 9612dc1..feb2756 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/FinancialStatements/FinancialStatementEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/FinancialStatementEndpointTests.cs @@ -11,7 +11,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.FinancialStatements; +namespace Moneybird.Net.Tests.Endpoints; public class FinancialStatementEndpointTests : FinancialStatementTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/FinancialStatements/FinancialStatementTestBase.cs b/tests/Moneybird.Net.Tests/Endpoints/FinancialStatementTestBase.cs similarity index 68% rename from tests/Moneybird.Net.Tests/Endpoints/FinancialStatements/FinancialStatementTestBase.cs rename to tests/Moneybird.Net.Tests/Endpoints/FinancialStatementTestBase.cs index a97b848..2e69d1a 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/FinancialStatements/FinancialStatementTestBase.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/FinancialStatementTestBase.cs @@ -1,4 +1,4 @@ -namespace Moneybird.Net.Tests.Endpoints.FinancialStatements; +namespace Moneybird.Net.Tests.Endpoints; public class FinancialStatementTestBase : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/LedgerAccounts/LedgerAccountEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/LedgerAccountEndpointTests.cs similarity index 99% rename from tests/Moneybird.Net.Tests/Endpoints/LedgerAccounts/LedgerAccountEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/LedgerAccountEndpointTests.cs index e1205ae..13a8b2d 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/LedgerAccounts/LedgerAccountEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/LedgerAccountEndpointTests.cs @@ -11,7 +11,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.LedgerAccounts; +namespace Moneybird.Net.Tests.Endpoints; public class LedgerAccountEndpointTests : LedgerAccountTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/LedgerAccounts/LedgerAccountTestBase.cs b/tests/Moneybird.Net.Tests/Endpoints/LedgerAccountTestBase.cs similarity index 69% rename from tests/Moneybird.Net.Tests/Endpoints/LedgerAccounts/LedgerAccountTestBase.cs rename to tests/Moneybird.Net.Tests/Endpoints/LedgerAccountTestBase.cs index a7dc639..273d7de 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/LedgerAccounts/LedgerAccountTestBase.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/LedgerAccountTestBase.cs @@ -1,4 +1,4 @@ -namespace Moneybird.Net.Tests.Endpoints.LedgerAccounts; +namespace Moneybird.Net.Tests.Endpoints; public class LedgerAccountTestBase : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/Payments/PaymentEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/PaymentEndpointTests.cs similarity index 96% rename from tests/Moneybird.Net.Tests/Endpoints/Payments/PaymentEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/PaymentEndpointTests.cs index e1ed357..6a7550d 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Payments/PaymentEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/PaymentEndpointTests.cs @@ -9,7 +9,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.Payments; +namespace Moneybird.Net.Tests.Endpoints; public class PaymentEndpointTests : PaymentTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/Payments/PaymentTestBase.cs b/tests/Moneybird.Net.Tests/Endpoints/PaymentTestBase.cs similarity index 69% rename from tests/Moneybird.Net.Tests/Endpoints/Payments/PaymentTestBase.cs rename to tests/Moneybird.Net.Tests/Endpoints/PaymentTestBase.cs index 70ad22c..ed512d4 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Payments/PaymentTestBase.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/PaymentTestBase.cs @@ -1,4 +1,4 @@ -namespace Moneybird.Net.Tests.Endpoints.Payments; +namespace Moneybird.Net.Tests.Endpoints; public class PaymentTestBase : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/Products/ProductEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/ProductEndpointTests.cs similarity index 99% rename from tests/Moneybird.Net.Tests/Endpoints/Products/ProductEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/ProductEndpointTests.cs index 3f39e7d..c772c2b 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Products/ProductEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ProductEndpointTests.cs @@ -11,7 +11,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.Products; +namespace Moneybird.Net.Tests.Endpoints; public class ProductEndpointTests : ProductTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/Products/ProductTestBase.cs b/tests/Moneybird.Net.Tests/Endpoints/ProductTestBase.cs similarity index 77% rename from tests/Moneybird.Net.Tests/Endpoints/Products/ProductTestBase.cs rename to tests/Moneybird.Net.Tests/Endpoints/ProductTestBase.cs index bce1203..acd7855 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Products/ProductTestBase.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ProductTestBase.cs @@ -1,4 +1,4 @@ -namespace Moneybird.Net.Tests.Endpoints.Products; +namespace Moneybird.Net.Tests.Endpoints; public class ProductTestBase : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/Projects/ProjectEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/ProjectEndpointTests.cs similarity index 99% rename from tests/Moneybird.Net.Tests/Endpoints/Projects/ProjectEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/ProjectEndpointTests.cs index a147e48..9909fe1 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Projects/ProjectEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ProjectEndpointTests.cs @@ -10,7 +10,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.Projects; +namespace Moneybird.Net.Tests.Endpoints; public class ProjectEndpointTests : ProjectTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/Projects/ProjectTestBase.cs b/tests/Moneybird.Net.Tests/Endpoints/ProjectTestBase.cs similarity index 69% rename from tests/Moneybird.Net.Tests/Endpoints/Projects/ProjectTestBase.cs rename to tests/Moneybird.Net.Tests/Endpoints/ProjectTestBase.cs index 09a5b98..5c4c470 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Projects/ProjectTestBase.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ProjectTestBase.cs @@ -1,4 +1,4 @@ -namespace Moneybird.Net.Tests.Endpoints.Projects; +namespace Moneybird.Net.Tests.Endpoints; public class ProjectTestBase : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/SalesInvoices/SalesInvoiceEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceEndpointTests.cs similarity index 99% rename from tests/Moneybird.Net.Tests/Endpoints/SalesInvoices/SalesInvoiceEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceEndpointTests.cs index 04bf473..6ecf0b1 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/SalesInvoices/SalesInvoiceEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceEndpointTests.cs @@ -11,7 +11,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.SalesInvoices; +namespace Moneybird.Net.Tests.Endpoints; public class SalesInvoiceEndpointTests : SalesInvoiceTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/SalesInvoices/SalesInvoiceTestBase.cs b/tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceTestBase.cs similarity index 68% rename from tests/Moneybird.Net.Tests/Endpoints/SalesInvoices/SalesInvoiceTestBase.cs rename to tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceTestBase.cs index c7967ec..10c3a9a 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/SalesInvoices/SalesInvoiceTestBase.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceTestBase.cs @@ -1,4 +1,4 @@ -namespace Moneybird.Net.Tests.Endpoints.SalesInvoices; +namespace Moneybird.Net.Tests.Endpoints; public class SalesInvoiceTestBase : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/TaxRates/TaxRateEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/TaxRateEndpointTests.cs similarity index 98% rename from tests/Moneybird.Net.Tests/Endpoints/TaxRates/TaxRateEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/TaxRateEndpointTests.cs index 259d31f..d3c2bac 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/TaxRates/TaxRateEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/TaxRateEndpointTests.cs @@ -10,7 +10,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.TaxRates; +namespace Moneybird.Net.Tests.Endpoints; public class TaxRateEndpointTests : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/Users/UserEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/UserEndpointTests.cs similarity index 97% rename from tests/Moneybird.Net.Tests/Endpoints/Users/UserEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/UserEndpointTests.cs index 904bf0c..7c45268 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Users/UserEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/UserEndpointTests.cs @@ -9,7 +9,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.Users; +namespace Moneybird.Net.Tests.Endpoints; public class UserEndpointTests : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/Verifications/VerificationEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/VerificationEndpointTests.cs similarity index 99% rename from tests/Moneybird.Net.Tests/Endpoints/Verifications/VerificationEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/VerificationEndpointTests.cs index d9367fd..83550bc 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Verifications/VerificationEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/VerificationEndpointTests.cs @@ -9,7 +9,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.Verifications; +namespace Moneybird.Net.Tests.Endpoints; public class VerificationEndpointTests : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/Webhooks/WebhookEndpointTestBase.cs b/tests/Moneybird.Net.Tests/Endpoints/WebhookEndpointTestBase.cs similarity index 70% rename from tests/Moneybird.Net.Tests/Endpoints/Webhooks/WebhookEndpointTestBase.cs rename to tests/Moneybird.Net.Tests/Endpoints/WebhookEndpointTestBase.cs index bd0ee05..d650fd5 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Webhooks/WebhookEndpointTestBase.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/WebhookEndpointTestBase.cs @@ -1,4 +1,4 @@ -namespace Moneybird.Net.Tests.Endpoints.Webhooks; +namespace Moneybird.Net.Tests.Endpoints; public class WebhookEndpointTestBase : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/Webhooks/WebhookEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/WebhookEndpointTests.cs similarity index 97% rename from tests/Moneybird.Net.Tests/Endpoints/Webhooks/WebhookEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/WebhookEndpointTests.cs index ca0e81d..d4d7ed6 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Webhooks/WebhookEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/WebhookEndpointTests.cs @@ -1,6 +1,4 @@ -using System; using System.Collections.Generic; -using System.Globalization; using System.IO; using System.Linq; using System.Text.Json; @@ -12,7 +10,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.Webhooks; +namespace Moneybird.Net.Tests.Endpoints; public class WebhookEndpointTests : WebhookEndpointTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/Workflows/WorkflowEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/WorkflowEndpointTests.cs similarity index 97% rename from tests/Moneybird.Net.Tests/Endpoints/Workflows/WorkflowEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/WorkflowEndpointTests.cs index 6f01de0..9e8c879 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Workflows/WorkflowEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/WorkflowEndpointTests.cs @@ -9,7 +9,7 @@ using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.Workflows +namespace Moneybird.Net.Tests.Endpoints { public class WorkflowEndpointTests : CommonTestBase { From 268fa38d2dfbcb85cac33ffcf13601d9e6dcadca Mon Sep 17 00:00:00 2001 From: Vincent Vrijburg Date: Sun, 26 Nov 2023 15:43:12 +0100 Subject: [PATCH 04/19] Add unit tests for time entries and refactor contact endpoint tests --- .../Abstractions/IMoneybirdClient.cs | 5 + .../Abstractions/IContactEndpoint.cs | 3 +- .../Endpoints/ContactEndpoint.cs | 5 +- .../Entities/Contacts/Contact.cs | 3 +- .../Entities/Contacts/ContactNote.cs | 52 -------- src/Moneybird.Net/Entities/Notes/Note.cs | 3 +- .../Entities/TimeEntries/TimeEntry.cs | 2 +- src/Moneybird.Net/MoneybirdClient.cs | 2 + .../Endpoints/ContactEndpointTests.cs | 3 +- .../Endpoints/TimeEntryEndpointTests.cs | 106 +++++++++++++++ .../Endpoints/TimeEntryTestBase.cs | 7 + .../MoneybirdClientTests.cs | 1 + .../Endpoints/TimeEntries/getTimeEntries.json | 126 ++++++++++++++++++ .../TimeEntries/newTimeEntryNote.json | 17 +++ 14 files changed, 276 insertions(+), 59 deletions(-) delete mode 100644 src/Moneybird.Net/Entities/Contacts/ContactNote.cs create mode 100644 tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs create mode 100644 tests/Moneybird.Net.Tests/Endpoints/TimeEntryTestBase.cs create mode 100644 tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/getTimeEntries.json create mode 100644 tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/newTimeEntryNote.json diff --git a/src/Moneybird.Net/Abstractions/IMoneybirdClient.cs b/src/Moneybird.Net/Abstractions/IMoneybirdClient.cs index fa37f18..6366312 100644 --- a/src/Moneybird.Net/Abstractions/IMoneybirdClient.cs +++ b/src/Moneybird.Net/Abstractions/IMoneybirdClient.cs @@ -70,6 +70,11 @@ public interface IMoneybirdClient : IDisposable /// ITaxRateEndpoint TaxRate { get; } + /// + /// The TimeEntry Endpoint. + /// + ITimeEntryEndpoint TimeEntry { get; } + /// /// The User Endpoint. /// diff --git a/src/Moneybird.Net/Endpoints/Abstractions/IContactEndpoint.cs b/src/Moneybird.Net/Endpoints/Abstractions/IContactEndpoint.cs index dd8f180..87d4230 100644 --- a/src/Moneybird.Net/Endpoints/Abstractions/IContactEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/Abstractions/IContactEndpoint.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions.Common; using Moneybird.Net.Entities.Contacts; +using Moneybird.Net.Entities.Notes; using Moneybird.Net.Models.Contacts; using Moneybird.Net.Models.Notes; @@ -19,7 +20,7 @@ public interface IContactEndpoint : Task> GetSynchronizationContactsAsync(string administrationId, string accessToken, ContactFilterOptions options); Task> GetContactsByIdsAsync(string administrationId, string accessToken, ContactListOptions options); Task GetContactByCustomerIdAsync(string administrationId, string customerId, string accessToken); - Task CreateContactNoteAsync(string administrationId, string contactId, NoteCreateOptions options, string accessToken); + Task CreateContactNoteAsync(string administrationId, string contactId, NoteCreateOptions options, string accessToken); Task DeleteContactNoteByIdAsync(string administrationId, string contactId, string noteId, string accessToken); Task GetContactPersonByIdAsync(string administrationId, string contactId, string contactPersonId, string accessToken); Task CreateContactPersonAsync(string administrationId, string contactId, ContactPersonCreateOptions options, string accessToken); diff --git a/src/Moneybird.Net/Endpoints/ContactEndpoint.cs b/src/Moneybird.Net/Endpoints/ContactEndpoint.cs index a6ed339..b1d0cfc 100644 --- a/src/Moneybird.Net/Endpoints/ContactEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/ContactEndpoint.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Moneybird.Net.Endpoints.Abstractions; using Moneybird.Net.Entities.Contacts; +using Moneybird.Net.Entities.Notes; using Moneybird.Net.Extensions; using Moneybird.Net.Http; using Moneybird.Net.Models.Contacts; @@ -150,7 +151,7 @@ public async Task DeleteByIdAsync(string administrationId, string id, stri return response; } - public async Task CreateContactNoteAsync(string administrationId, string contactId, NoteCreateOptions options, string accessToken) + public async Task CreateContactNoteAsync(string administrationId, string contactId, NoteCreateOptions options, string accessToken) { var relativeUrl = string.Format(ContactsIdNotesUri, administrationId, contactId); var body = JsonSerializer.Serialize(options, _config.SerializerOptions); @@ -158,7 +159,7 @@ public async Task CreateContactNoteAsync(string administrationId, s .CreatePostRequestAsync(_config.ApiUri, relativeUrl, accessToken, body) .ConfigureAwait(false); - return JsonSerializer.Deserialize(responseJson, _config.SerializerOptions); + return JsonSerializer.Deserialize(responseJson, _config.SerializerOptions); } public async Task DeleteContactNoteByIdAsync(string administrationId, string contactId, string noteId, string accessToken) diff --git a/src/Moneybird.Net/Entities/Contacts/Contact.cs b/src/Moneybird.Net/Entities/Contacts/Contact.cs index ad4b527..c5abf83 100644 --- a/src/Moneybird.Net/Entities/Contacts/Contact.cs +++ b/src/Moneybird.Net/Entities/Contacts/Contact.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text.Json.Serialization; +using Moneybird.Net.Entities.Notes; using Moneybird.Net.Misc; namespace Moneybird.Net.Entities.Contacts @@ -137,7 +138,7 @@ public class Contact : IMoneybirdEntity public string SalesInvoicesUrl { get; set; } [JsonPropertyName("notes")] - public List Notes { get; set; } + public List Notes { get; set; } [JsonPropertyName("custom_fields")] public List CustomFields { get; set; } diff --git a/src/Moneybird.Net/Entities/Contacts/ContactNote.cs b/src/Moneybird.Net/Entities/Contacts/ContactNote.cs deleted file mode 100644 index 3684bd2..0000000 --- a/src/Moneybird.Net/Entities/Contacts/ContactNote.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text.Json.Serialization; - -namespace Moneybird.Net.Entities.Contacts -{ - public class ContactNote - { - [JsonPropertyName("id")] - public string Id { get; set; } - - [JsonPropertyName("administration_id")] - public string AdministrationId { get; set; } - - [JsonPropertyName("entity_id")] - public string EntityId { get; set; } - - [JsonPropertyName("entity_type")] - public string EntityType { get; set; } - - [JsonPropertyName("user_id")] - public string UserId { get; set; } - - [JsonPropertyName("assignee_id")] - public string AssigneeId { get; set; } - - [JsonPropertyName("todo")] - public bool Todo { get; set; } - - [JsonPropertyName("note")] - public string Note { get; set; } - - [JsonPropertyName("completed_at")] - public DateTime? CompletedAt { get; set; } - - [JsonPropertyName("completed_by_id")] - public string CompletedById { get; set; } - - [JsonPropertyName("todo_type")] - public string TodoType { get; set; } - - // TODO: Check documentation to understand what this data field is meant for. - [JsonIgnore] - [JsonPropertyName("data")] - public object Data { get; set; } - - [JsonPropertyName("created_at")] - public DateTime CreatedAt { get; set; } - - [JsonPropertyName("updated_at")] - public DateTime UpdatedAt { get; set; } - } -} \ No newline at end of file diff --git a/src/Moneybird.Net/Entities/Notes/Note.cs b/src/Moneybird.Net/Entities/Notes/Note.cs index 14650ab..12b35cb 100644 --- a/src/Moneybird.Net/Entities/Notes/Note.cs +++ b/src/Moneybird.Net/Entities/Notes/Note.cs @@ -30,7 +30,7 @@ public class Note public string Value { get; set; } [JsonPropertyName("completed_at")] - public DateTime CompletedAt { get; set; } + public DateTime? CompletedAt { get; set; } [JsonPropertyName("completed_by_id")] public string CompletedById { get; set; } @@ -38,6 +38,7 @@ public class Note [JsonPropertyName("todo_type")] public object TodoType { get; set; } + [JsonIgnore] [JsonPropertyName("data")] public object Data { get; set; } diff --git a/src/Moneybird.Net/Entities/TimeEntries/TimeEntry.cs b/src/Moneybird.Net/Entities/TimeEntries/TimeEntry.cs index 393bfc6..c9e3ad2 100644 --- a/src/Moneybird.Net/Entities/TimeEntries/TimeEntry.cs +++ b/src/Moneybird.Net/Entities/TimeEntries/TimeEntry.cs @@ -24,7 +24,7 @@ public class TimeEntry : IMoneybirdEntity public string ProjectId { get; set; } [JsonPropertyName("user_id")] - public long UserId { get; set; } + public string UserId { get; set; } [JsonPropertyName("started_at")] public DateTime StartedAt { get; set; } diff --git a/src/Moneybird.Net/MoneybirdClient.cs b/src/Moneybird.Net/MoneybirdClient.cs index 6124e30..280bd2f 100644 --- a/src/Moneybird.Net/MoneybirdClient.cs +++ b/src/Moneybird.Net/MoneybirdClient.cs @@ -28,6 +28,7 @@ public class MoneybirdClient : IMoneybirdClient public IProjectEndpoint Project { get; } public ISalesInvoiceEndpoint SalesInvoice { get; } public ITaxRateEndpoint TaxRate { get; } + public ITimeEntryEndpoint TimeEntry { get; } public IUserEndpoint User { get; } public IVerificationEndpoint Verification { get; } public IWebhookEndpoint Webhook { get; } @@ -72,6 +73,7 @@ public MoneybirdClient(MoneybirdConfig config, HttpClient client = null) Project = new ProjectEndpoint(Config, _requester); SalesInvoice = new SalesInvoiceEndpoint(Config, _requester); TaxRate = new TaxRateEndpoint(Config, _requester); + TimeEntry = new TimeEntryEndpoint(Config, _requester); User = new UserEndpoint(Config, _requester); Verification = new VerificationEndpoint(Config, _requester); Webhook = new WebhookEndpoint(Config, _requester); diff --git a/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs index b89ba20..b47215f 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs @@ -6,6 +6,7 @@ using Moneybird.Net.Endpoints; using Moneybird.Net.Endpoints.Abstractions; using Moneybird.Net.Entities.Contacts; +using Moneybird.Net.Entities.Notes; using Moneybird.Net.Http; using Moneybird.Net.Misc; using Moneybird.Net.Models.Contacts; @@ -372,7 +373,7 @@ public async void CreateContactNoteAsync_ByAccessToken_Returns_NewContactNote() It.IsAny(), It.Is(s => s.Equals(serializedContactNoteCreateOptions)), It.IsAny>())) .ReturnsAsync(contactNoteJson); - var contactNote = JsonSerializer.Deserialize(contactNoteJson, _config.SerializerOptions); + var contactNote = JsonSerializer.Deserialize(contactNoteJson, _config.SerializerOptions); Assert.NotNull(contactNote); var actualContactNote = await _contactEndpoint.CreateContactNoteAsync(AdministrationId, ContactId, contactNoteCreateOptions, AccessToken); diff --git a/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs new file mode 100644 index 0000000..8aa1a82 --- /dev/null +++ b/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs @@ -0,0 +1,106 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.Json; +using FluentAssertions; +using Moneybird.Net.Endpoints; +using Moneybird.Net.Entities.Notes; +using Moneybird.Net.Entities.TimeEntries; +using Moneybird.Net.Http; +using Moneybird.Net.Models.Notes; +using Moq; +using Xunit; + +namespace Moneybird.Net.Tests.Endpoints; + +public class TimeEntryEndpointTests : TimeEntryTestBase +{ + private static Mock _requester; + private readonly MoneybirdConfig _config; + private readonly TimeEntryEndpoint _timeEntryEndpoint; + + private const string ResponsePath = "./Responses/Endpoints/TimeEntries/getTimeEntries.json"; + private const string NewTimeEntryNoteResponsePath = "./Responses/Endpoints/TimeEntries/newTimeEntryNote.json"; + + public TimeEntryEndpointTests() + { + _requester = new Mock(); + _config = new MoneybirdConfig(); + _timeEntryEndpoint = new TimeEntryEndpoint(_config, _requester.Object); + } + + [Fact] + public async void GetTimeEntriesAsync_ByAccessToken_Returns_TimeEntries() + { + var timeEntriesList = await File.ReadAllTextAsync(ResponsePath); + + _requester.Setup(moq => moq.CreateGetRequestAsync(It.IsAny(), It.IsAny(), + It.IsAny(), It.IsAny>())).ReturnsAsync(timeEntriesList); + + var timeEntries = JsonSerializer.Deserialize>(timeEntriesList, _config.SerializerOptions); + Assert.NotNull(timeEntries); + + var actualTimeEntries = await _timeEntryEndpoint.GetAsync(AdministrationId, AccessToken); + Assert.NotNull(actualTimeEntries); + + var actualTimeEntryList = actualTimeEntries.ToList(); + Assert.Equal(timeEntries.Count, actualTimeEntryList.Count); + + foreach (var actualTimeEntry in actualTimeEntryList) + { + var user = timeEntries.FirstOrDefault(w => w.Id == actualTimeEntry.Id); + Assert.NotNull(user); + + user.Should().BeEquivalentTo(actualTimeEntry); + } + } + + [Fact] + public async void DeleteTimeEntryAsync_ByAccessToken_Returns_True() + { + _requester.Setup(moq => moq.CreateDeleteRequestAsync(It.IsAny(), It.IsAny(), + It.IsAny(), It.IsAny>())).ReturnsAsync(true); + + var actualTimeEntry = await _timeEntryEndpoint.DeleteByIdAsync(AdministrationId, TimeEntryId, AccessToken); + Assert.True(actualTimeEntry); + } + + [Fact] + public async void CreateTimeEntryNoteAsync_ByAccessToken_Returns_NewNote() + { + var timeEntryNoteJson = await File.ReadAllTextAsync(NewTimeEntryNoteResponsePath); + var noteCreateOptions = new NoteCreateOptions + { + Note = new NoteCreateItem + { + Note = "Text of the note", + Todo = true, + AssigneeId = "340087760888006110" + } + }; + + var serializedNoteCreateOptions = JsonSerializer.Serialize(noteCreateOptions, _config.SerializerOptions); + + _requester.Setup(moq => moq.CreatePostRequestAsync(It.IsAny(), It.IsAny(), + It.IsAny(), It.Is(s => s.Equals(serializedNoteCreateOptions)), It.IsAny>())) + .ReturnsAsync(timeEntryNoteJson); + + var timeEntryNote = JsonSerializer.Deserialize(timeEntryNoteJson, _config.SerializerOptions); + Assert.NotNull(timeEntryNote); + + var actualTimeEntryNote = await _timeEntryEndpoint.CreateTimeEntryNoteAsync(AdministrationId, TimeEntryId, noteCreateOptions, AccessToken); + Assert.NotNull(actualTimeEntryNote); + + timeEntryNote.Should().BeEquivalentTo(actualTimeEntryNote); + } + + [Fact] + public async void DeleteTimeEntryNoteByIdAsync_ByAccessToken_Returns_True() + { + _requester.Setup(moq => moq.CreateDeleteRequestAsync(It.IsAny(), It.IsAny(), + It.IsAny(), It.IsAny>())).ReturnsAsync(true); + + var actualTimeEntryNote = await _timeEntryEndpoint.DeleteTimeEntryNoteByIdAsync(AdministrationId, TimeEntryId, NoteId, AccessToken); + Assert.True(actualTimeEntryNote); + } +} \ No newline at end of file diff --git a/tests/Moneybird.Net.Tests/Endpoints/TimeEntryTestBase.cs b/tests/Moneybird.Net.Tests/Endpoints/TimeEntryTestBase.cs new file mode 100644 index 0000000..0f4ed7e --- /dev/null +++ b/tests/Moneybird.Net.Tests/Endpoints/TimeEntryTestBase.cs @@ -0,0 +1,7 @@ +namespace Moneybird.Net.Tests.Endpoints; + +public class TimeEntryTestBase : CommonTestBase +{ + protected static string TimeEntryId = "447521404512760211"; + protected static string NoteId = "405411500095702179"; +} \ No newline at end of file diff --git a/tests/Moneybird.Net.Tests/MoneybirdClientTests.cs b/tests/Moneybird.Net.Tests/MoneybirdClientTests.cs index 3931475..fee9ac0 100644 --- a/tests/Moneybird.Net.Tests/MoneybirdClientTests.cs +++ b/tests/Moneybird.Net.Tests/MoneybirdClientTests.cs @@ -27,6 +27,7 @@ public void GetInstance_ByConfig_Returns_Correct_Instance() Assert.NotNull(moneybirdClient.Project); Assert.NotNull(moneybirdClient.SalesInvoice); Assert.NotNull(moneybirdClient.TaxRate); + Assert.NotNull(moneybirdClient.TimeEntry); Assert.NotNull(moneybirdClient.User); Assert.NotNull(moneybirdClient.Verification); Assert.NotNull(moneybirdClient.Webhook); diff --git a/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/getTimeEntries.json b/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/getTimeEntries.json new file mode 100644 index 0000000..c7cbf4b --- /dev/null +++ b/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/getTimeEntries.json @@ -0,0 +1,126 @@ +[ + { + "id": "447521404512760211", + "administration_id": "357760731887252340", + "contact_id": "306602835138381837", + "project_id": "376181771183119693", + "user_id": "224938791219844626", + "started_at": "2023-11-24T18:00:00.000Z", + "ended_at": "2023-11-24T18:15:00.000Z", + "description": "Test description", + "paused_duration": 0, + "billable": true, + "created_at": "2023-11-24T18:28:36.544Z", + "updated_at": "2023-11-24T18:33:07.974Z", + "contact": { + "id": "306602835138381837", + "firstname": "", + "lastname": "", + "company_name": "Moneybird" + }, + "detail": null, + "user": { + "id": "224938791219844626", + "name": "John Doe", + "created_at": "2019-08-05T12:19:56.000Z", + "updated_at": "2023-11-05T21:34:42.867Z" + }, + "project": { + "id": "376181771183119693", + "name": "Apex", + "state": "active" + }, + "events": [ + { + "administration_id": "357760731887252340", + "user_id": "224938791219844626", + "action": "todo_created", + "link_entity_id": null, + "link_entity_type": null, + "data": {}, + "created_at": "2023-11-24T18:29:10.795Z", + "updated_at": "2023-11-24T18:29:10.795Z" + }, + { + "administration_id": "357760731887252340", + "user_id": "224938791219844626", + "action": "note_created", + "link_entity_id": null, + "link_entity_type": null, + "data": {}, + "created_at": "2023-11-24T18:29:04.137Z", + "updated_at": "2023-11-24T18:29:04.137Z" + }, + { + "administration_id": "357760731887252340", + "user_id": "224938791219844626", + "action": "time_entry_created", + "link_entity_id": null, + "link_entity_type": null, + "data": {}, + "created_at": "2023-11-24T18:28:36.552Z", + "updated_at": "2023-11-24T18:28:36.552Z" + }, + { + "administration_id": "357760731887252340", + "user_id": "224938791219844626", + "action": "todo_created", + "link_entity_id": null, + "link_entity_type": null, + "data": {}, + "created_at": "2023-11-24T18:29:16.951Z", + "updated_at": "2023-11-24T18:29:16.951Z" + } + ], + "notes": [ + { + "id": "405411500095702179", + "administration_id": "357760731887252340", + "entity_id": "405411457741621022", + "entity_type": "TimeEntry", + "user_id": "224938791219844626", + "assignee_id": "224938791219844626", + "todo": true, + "note": "Test task John Doe", + "completed_at": "2023-11-24T18:33:07.969Z", + "completed_by_id": "224938791219844626", + "todo_type": null, + "data": {}, + "created_at": "2023-11-24T18:29:16.935Z", + "updated_at": "2023-11-24T18:33:07.970Z" + }, + { + "id": "405411493648008274", + "administration_id": "357760731887252340", + "entity_id": "405411457741621022", + "entity_type": "TimeEntry", + "user_id": "224938791219844626", + "assignee_id": null, + "todo": true, + "note": "Test task", + "completed_at": null, + "completed_by_id": null, + "todo_type": null, + "data": {}, + "created_at": "2023-11-24T18:29:10.786Z", + "updated_at": "2023-11-24T18:29:10.786Z" + }, + { + "id": "405411486665541616", + "administration_id": "357760731887252340", + "entity_id": "405411457741621022", + "entity_type": "TimeEntry", + "user_id": "224938791219844626", + "assignee_id": null, + "todo": false, + "note": "Test note", + "completed_at": null, + "completed_by_id": null, + "todo_type": null, + "data": {}, + "created_at": "2023-11-24T18:29:04.127Z", + "updated_at": "2023-11-24T18:29:04.127Z" + } + ] + } +] \ No newline at end of file diff --git a/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/newTimeEntryNote.json b/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/newTimeEntryNote.json new file mode 100644 index 0000000..02dbe2a --- /dev/null +++ b/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/newTimeEntryNote.json @@ -0,0 +1,17 @@ +{ + "id": "340087760940434912", + "administration_id": "281289699686381606", + "entity_id": "447521404512760211", + "entity_type": "TimeEntry", + "user_id": "16385529506268", + "assignee_id": "340087760888006110", + "todo": true, + "note": "Text of the note", + "completed_at": null, + "completed_by_id": null, + "todo_type": null, + "data": { + }, + "created_at": "2021-12-03T17:36:24.651Z", + "updated_at": "2021-12-03T17:36:24.651Z" +} \ No newline at end of file From 7c211074978c5b4decf05a6d06a76e569d3c7362 Mon Sep 17 00:00:00 2001 From: Vincent Vrijburg Date: Sun, 26 Nov 2023 16:06:21 +0100 Subject: [PATCH 05/19] Add unit tests for project and time entry endpoints --- .../Endpoints/ProjectEndpointTests.cs | 39 +++++- .../Endpoints/TimeEntryEndpointTests.cs | 62 ++++++++- .../Endpoints/TimeEntries/getTimeEntry.json | 124 ++++++++++++++++++ 3 files changed, 219 insertions(+), 6 deletions(-) create mode 100644 tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/getTimeEntry.json diff --git a/tests/Moneybird.Net.Tests/Endpoints/ProjectEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/ProjectEndpointTests.cs index 9909fe1..1c9ec51 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/ProjectEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ProjectEndpointTests.cs @@ -38,23 +38,54 @@ public async void GetProjectsAsync_ByAccessToken_Returns_Projects() _requester.Setup(moq => moq.CreateGetRequestAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny>())).ReturnsAsync(projectListJson); - var expectedProjectList = JsonSerializer.Deserialize>(projectListJson, _config.SerializerOptions); - Assert.NotNull(expectedProjectList); + var projects = JsonSerializer.Deserialize>(projectListJson, _config.SerializerOptions); + Assert.NotNull(projects); var actualProjects = await _projectEndpoint.GetAsync(AdministrationId, AccessToken); Assert.NotNull(actualProjects); var actualProjectList = actualProjects.ToList(); - Assert.Equal(expectedProjectList.Count, actualProjectList.Count); + Assert.Equal(projects.Count, actualProjectList.Count); foreach (var actualProject in actualProjectList) { - var expectedProject = expectedProjectList.FirstOrDefault(w => w.Id == actualProject.Id); + var expectedProject = projects.FirstOrDefault(w => w.Id == actualProject.Id); Assert.NotNull(expectedProject); actualProject.Should().BeEquivalentTo(expectedProject); } } + [Fact] + public async void GetProjectsAsync_UsingFilterOptions_ByAccessToken_Returns_Projects() + { + var projectListJson = await File.ReadAllTextAsync(GetProjectsResponsePath); + + _requester.Setup(moq => moq.CreateGetRequestAsync(It.IsAny(), It.IsAny(), + It.IsAny(), It.IsAny>())).ReturnsAsync(projectListJson); + + var projects = JsonSerializer.Deserialize>(projectListJson, _config.SerializerOptions); + Assert.NotNull(projects); + + var filterOptions = new ProjectFilterOptions + { + State = ProjectState.All + }; + + var actualProjects = await _projectEndpoint.GetAsync(AdministrationId, AccessToken, filterOptions); + Assert.NotNull(actualProjects); + + var actualProjectList = actualProjects.ToList(); + Assert.Equal(projects.Count, actualProjectList.Count); + + foreach (var actualProject in actualProjectList) + { + var project = projects.FirstOrDefault(w => w.Id == actualProject.Id); + Assert.NotNull(project); + + project.Should().BeEquivalentTo(actualProject); + } + } + [Fact] public async void GetProjectAsync_ByAccessToken_Returns_Single_Project() { diff --git a/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs index 8aa1a82..6dd7c45 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -8,6 +9,7 @@ using Moneybird.Net.Entities.TimeEntries; using Moneybird.Net.Http; using Moneybird.Net.Models.Notes; +using Moneybird.Net.Models.TimeEntries; using Moq; using Xunit; @@ -19,7 +21,8 @@ public class TimeEntryEndpointTests : TimeEntryTestBase private readonly MoneybirdConfig _config; private readonly TimeEntryEndpoint _timeEntryEndpoint; - private const string ResponsePath = "./Responses/Endpoints/TimeEntries/getTimeEntries.json"; + private const string GetTimeEntriesResponsePath = "./Responses/Endpoints/TimeEntries/getTimeEntries.json"; + private const string GetTimeEntryResponsePath = "./Responses/Endpoints/TimeEntries/getTimeEntry.json"; private const string NewTimeEntryNoteResponsePath = "./Responses/Endpoints/TimeEntries/newTimeEntryNote.json"; public TimeEntryEndpointTests() @@ -32,7 +35,7 @@ public TimeEntryEndpointTests() [Fact] public async void GetTimeEntriesAsync_ByAccessToken_Returns_TimeEntries() { - var timeEntriesList = await File.ReadAllTextAsync(ResponsePath); + var timeEntriesList = await File.ReadAllTextAsync(GetTimeEntriesResponsePath); _requester.Setup(moq => moq.CreateGetRequestAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny>())).ReturnsAsync(timeEntriesList); @@ -55,6 +58,61 @@ public async void GetTimeEntriesAsync_ByAccessToken_Returns_TimeEntries() } } + [Fact] + public async void GetTimeEntriesAsync_UsingFilterOptions_ByAccessToken_Returns_TimeEntries() + { + var timeEntryListJson = await File.ReadAllTextAsync(GetTimeEntriesResponsePath); + + _requester.Setup(moq => moq.CreateGetRequestAsync(It.IsAny(), It.IsAny(), + It.IsAny(), It.IsAny>())).ReturnsAsync(timeEntryListJson); + + var timeEntries = JsonSerializer.Deserialize>(timeEntryListJson, _config.SerializerOptions); + Assert.NotNull(timeEntries); + + var filterOptions = new TimeEntryFilterOptions + { + State = new [] { TimeEntryState.All }, + Period = "this_month", + ContactId = "381666401394414610", + IncludeNilContacts = true, + IncludeActive = false, + ProjectId = "386844401331200766", + UserId = "252969831744742910", + Day = DateTime.Parse("2023-11-10") + }; + + var actualTimeEntries = await _timeEntryEndpoint.GetAsync(AdministrationId, AccessToken, filterOptions); + Assert.NotNull(actualTimeEntries); + + var actualTimeEntryList = actualTimeEntries.ToList(); + Assert.Equal(timeEntries.Count, actualTimeEntryList.Count); + + foreach (var actualTimeEntry in actualTimeEntryList) + { + var timeEntry = timeEntries.FirstOrDefault(w => w.Id == actualTimeEntry.Id); + Assert.NotNull(timeEntry); + + timeEntry.Should().BeEquivalentTo(actualTimeEntry); + } + } + + [Fact] + public async void GetTimeEntryAsync_ByAccessToken_Returns_Single_TimeEntry() + { + var timeEntryJson = await File.ReadAllTextAsync(GetTimeEntryResponsePath); + + _requester.Setup(moq => moq.CreateGetRequestAsync(It.IsAny(), It.IsAny(), + It.IsAny(), It.IsAny>())).ReturnsAsync(timeEntryJson); + + var expectedTimeEntry = JsonSerializer.Deserialize(timeEntryJson, _config.SerializerOptions); + Assert.NotNull(expectedTimeEntry); + + var actualTimeEntry = await _timeEntryEndpoint.GetByIdAsync(AdministrationId, TimeEntryId, AccessToken); + Assert.NotNull(actualTimeEntry); + + actualTimeEntry.Should().BeEquivalentTo(expectedTimeEntry); + } + [Fact] public async void DeleteTimeEntryAsync_ByAccessToken_Returns_True() { diff --git a/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/getTimeEntry.json b/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/getTimeEntry.json new file mode 100644 index 0000000..de02974 --- /dev/null +++ b/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/getTimeEntry.json @@ -0,0 +1,124 @@ +{ + "id": "447521404512760211", + "administration_id": "357760731887252340", + "contact_id": "306602835138381837", + "project_id": "376181771183119693", + "user_id": "224938791219844626", + "started_at": "2023-11-24T18:00:00.000Z", + "ended_at": "2023-11-24T18:15:00.000Z", + "description": "Test description", + "paused_duration": 0, + "billable": true, + "created_at": "2023-11-24T18:28:36.544Z", + "updated_at": "2023-11-24T18:33:07.974Z", + "contact": { + "id": "306602835138381837", + "firstname": "", + "lastname": "", + "company_name": "Moneybird" + }, + "detail": null, + "user": { + "id": "224938791219844626", + "name": "John Doe", + "created_at": "2019-08-05T12:19:56.000Z", + "updated_at": "2023-11-05T21:34:42.867Z" + }, + "project": { + "id": "376181771183119693", + "name": "Apex", + "state": "active" + }, + "events": [ + { + "administration_id": "357760731887252340", + "user_id": "224938791219844626", + "action": "todo_created", + "link_entity_id": null, + "link_entity_type": null, + "data": {}, + "created_at": "2023-11-24T18:29:10.795Z", + "updated_at": "2023-11-24T18:29:10.795Z" + }, + { + "administration_id": "357760731887252340", + "user_id": "224938791219844626", + "action": "note_created", + "link_entity_id": null, + "link_entity_type": null, + "data": {}, + "created_at": "2023-11-24T18:29:04.137Z", + "updated_at": "2023-11-24T18:29:04.137Z" + }, + { + "administration_id": "357760731887252340", + "user_id": "224938791219844626", + "action": "time_entry_created", + "link_entity_id": null, + "link_entity_type": null, + "data": {}, + "created_at": "2023-11-24T18:28:36.552Z", + "updated_at": "2023-11-24T18:28:36.552Z" + }, + { + "administration_id": "357760731887252340", + "user_id": "224938791219844626", + "action": "todo_created", + "link_entity_id": null, + "link_entity_type": null, + "data": {}, + "created_at": "2023-11-24T18:29:16.951Z", + "updated_at": "2023-11-24T18:29:16.951Z" + } + ], + "notes": [ + { + "id": "405411500095702179", + "administration_id": "357760731887252340", + "entity_id": "405411457741621022", + "entity_type": "TimeEntry", + "user_id": "224938791219844626", + "assignee_id": "224938791219844626", + "todo": true, + "note": "Test task John Doe", + "completed_at": "2023-11-24T18:33:07.969Z", + "completed_by_id": "224938791219844626", + "todo_type": null, + "data": {}, + "created_at": "2023-11-24T18:29:16.935Z", + "updated_at": "2023-11-24T18:33:07.970Z" + }, + { + "id": "405411493648008274", + "administration_id": "357760731887252340", + "entity_id": "405411457741621022", + "entity_type": "TimeEntry", + "user_id": "224938791219844626", + "assignee_id": null, + "todo": true, + "note": "Test task", + "completed_at": null, + "completed_by_id": null, + "todo_type": null, + "data": {}, + "created_at": "2023-11-24T18:29:10.786Z", + "updated_at": "2023-11-24T18:29:10.786Z" + }, + { + "id": "405411486665541616", + "administration_id": "357760731887252340", + "entity_id": "405411457741621022", + "entity_type": "TimeEntry", + "user_id": "224938791219844626", + "assignee_id": null, + "todo": false, + "note": "Test note", + "completed_at": null, + "completed_by_id": null, + "todo_type": null, + "data": {}, + "created_at": "2023-11-24T18:29:04.127Z", + "updated_at": "2023-11-24T18:29:04.127Z" + } + ] +} \ No newline at end of file From ee7f4e74c1270143cf8fdb912cda40ef81fd3624 Mon Sep 17 00:00:00 2001 From: Vincent Vrijburg Date: Mon, 27 Nov 2023 21:32:41 +0100 Subject: [PATCH 06/19] Add unit tests for create and update time entries --- .../Models/TimeEntries/TimeEntryCreate.cs | 13 ++-- .../Models/TimeEntries/TimeEntryUpdate.cs | 9 +-- .../ExternalSalesInvoiceEndpointTests.cs | 6 +- .../Endpoints/TimeEntryEndpointTests.cs | 70 +++++++++++++++++++ .../Endpoints/TimeEntries/patchTimeEntry.json | 58 +++++++++++++++ .../Endpoints/TimeEntries/postTimeEntry.json | 47 +++++++++++++ 6 files changed, 190 insertions(+), 13 deletions(-) create mode 100644 tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/patchTimeEntry.json create mode 100644 tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/postTimeEntry.json diff --git a/src/Moneybird.Net/Models/TimeEntries/TimeEntryCreate.cs b/src/Moneybird.Net/Models/TimeEntries/TimeEntryCreate.cs index d424065..0deba57 100644 --- a/src/Moneybird.Net/Models/TimeEntries/TimeEntryCreate.cs +++ b/src/Moneybird.Net/Models/TimeEntries/TimeEntryCreate.cs @@ -1,3 +1,4 @@ +using System; using System.Text.Json.Serialization; namespace Moneybird.Net.Models.TimeEntries @@ -5,25 +6,25 @@ namespace Moneybird.Net.Models.TimeEntries public class TimeEntryCreate { [JsonPropertyName("user_id")] - public long UserId { get; set; } + public string UserId { get; set; } [JsonPropertyName("started_at")] - public string StartedAt { get; set; } + public DateTime StartedAt { get; set; } [JsonPropertyName("ended_at")] - public string EndedAt { get; set; } + public DateTime EndedAt { get; set; } [JsonPropertyName("description")] public string Description { get; set; } [JsonPropertyName("contact_id")] - public long ContactId { get; set; } + public string ContactId { get; set; } [JsonPropertyName("project_id")] - public long ProjectId { get; set; } + public string ProjectId { get; set; } [JsonPropertyName("detail_id")] - public long DetailId { get; set; } + public string DetailId { get; set; } [JsonPropertyName("billable")] public bool Billable { get; set; } diff --git a/src/Moneybird.Net/Models/TimeEntries/TimeEntryUpdate.cs b/src/Moneybird.Net/Models/TimeEntries/TimeEntryUpdate.cs index 1ff4761..f80ace6 100644 --- a/src/Moneybird.Net/Models/TimeEntries/TimeEntryUpdate.cs +++ b/src/Moneybird.Net/Models/TimeEntries/TimeEntryUpdate.cs @@ -1,3 +1,4 @@ +using System; using System.Text.Json.Serialization; namespace Moneybird.Net.Models.TimeEntries @@ -5,19 +6,19 @@ namespace Moneybird.Net.Models.TimeEntries public class TimeEntryUpdate { [JsonPropertyName("started_at")] - public string StartedAt { get; set; } + public DateTime StartedAt { get; set; } [JsonPropertyName("ended_at")] - public string EndedAt { get; set; } + public DateTime EndedAt { get; set; } [JsonPropertyName("paused_duration")] public int PausedDuration { get; set; } [JsonPropertyName("contact_id")] - public long ContactId { get; set; } + public string ContactId { get; set; } [JsonPropertyName("project_id")] - public long ProjectId { get; set; } + public string ProjectId { get; set; } [JsonPropertyName("description")] public string Description { get; set; } diff --git a/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoiceEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoiceEndpointTests.cs index 0b4ffea..780ddbd 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoiceEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoiceEndpointTests.cs @@ -136,9 +136,9 @@ public async void CreateExternalSalesInvoiceAsync_ByAccessToken_Returns_NewExter Date = DateTime.UtcNow, Source = "webshop", DueDate = DateTime.UtcNow.AddDays(14), - SourceUrl = "https://www.example.com/checkout/1234", + SourceUrl = "https://www.example.com/checkout/1234" }, - UserAgent = "Moneybird .NET Client", + UserAgent = "Moneybird .NET Client" }; var createResponse = await File.ReadAllTextAsync(PostExternalSalesInvoiceResponsePath); @@ -189,7 +189,7 @@ public async void UpdateExternalSalesInvoiceAsync_ByAccessToken_Returns_UpdatedE } } }, - UserAgent = "Moneybird .NET Client", + UserAgent = "Moneybird .NET Client" }; var serializedExternalSalesInvoiceUpdateOptions = JsonSerializer.Serialize(externalSalesInvoiceUpdateOptions, _config.SerializerOptions); diff --git a/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs index 6dd7c45..80a5448 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs @@ -23,6 +23,8 @@ public class TimeEntryEndpointTests : TimeEntryTestBase private const string GetTimeEntriesResponsePath = "./Responses/Endpoints/TimeEntries/getTimeEntries.json"; private const string GetTimeEntryResponsePath = "./Responses/Endpoints/TimeEntries/getTimeEntry.json"; + private const string PostTimeEntryResponsePath = "./Responses/Endpoints/TimeEntries/postTimeEntry.json"; + private const string PatchTimeEntryResponsePath = "./Responses/Endpoints/TimeEntries/patchTimeEntry.json"; private const string NewTimeEntryNoteResponsePath = "./Responses/Endpoints/TimeEntries/newTimeEntryNote.json"; public TimeEntryEndpointTests() @@ -113,6 +115,74 @@ public async void GetTimeEntryAsync_ByAccessToken_Returns_Single_TimeEntry() actualTimeEntry.Should().BeEquivalentTo(expectedTimeEntry); } + [Fact] + public async void CreateTimeEntryAsync_ByAccessToken_Returns_NewTimeEntry() + { + var timeEntryJson = await File.ReadAllTextAsync(PostTimeEntryResponsePath); + var timeEntryCreateOptions = new TimeEntryCreateOptions + { + TimeEntry = new TimeEntryCreate + { + StartedAt = DateTime.Parse("2023-08-10 09:25:00"), + EndedAt = DateTime.Parse("2023-08-10 10:25:00"), + Description = "Test time entry", + ContactId = "395774014807606787", + ProjectId = "395774014821238277", + UserId = "1691659319295", + Billable = false, + DetailId = null, + PausedDuration = 0 + } + }; + + var serializedTimeEntryCreateOptions = JsonSerializer.Serialize(timeEntryCreateOptions, _config.SerializerOptions); + + _requester.Setup(moq => moq.CreatePostRequestAsync(It.IsAny(), It.IsAny(), + It.IsAny(), It.Is(s => s.Equals(serializedTimeEntryCreateOptions)), It.IsAny>())) + .ReturnsAsync(timeEntryJson); + + var expectedTimeEntry = JsonSerializer.Deserialize(timeEntryJson, _config.SerializerOptions); + Assert.NotNull(expectedTimeEntry); + + var actualTimeEntry = await _timeEntryEndpoint.CreateAsync(AdministrationId, timeEntryCreateOptions, AccessToken); + Assert.NotNull(actualTimeEntry); + + actualTimeEntry.Should().BeEquivalentTo(expectedTimeEntry); + } + + [Fact] + public async void UpdateTimeEntryAsync_ByAccessToken_Returns_UpdatedTimeEntry() + { + var timeEntryJson = await File.ReadAllTextAsync(PatchTimeEntryResponsePath); + var timeEntryUpdateOptions = new TimeEntryUpdateOptions + { + TimeEntry = new TimeEntryUpdate + { + StartedAt = DateTime.Parse("2023-08-10 09:25:00"), + EndedAt = DateTime.Parse("2023-08-10 10:25:00"), + Description = "Updated description", + ContactId = "395774015039342091", + ProjectId = "395774015051925005", + Billable = false, + PausedDuration = 0 + } + }; + + var serializedTimeEntryOptions = JsonSerializer.Serialize(timeEntryUpdateOptions, _config.SerializerOptions); + + _requester.Setup(moq => moq.CreatePatchRequestAsync(It.IsAny(), It.IsAny(), + It.IsAny(), It.Is(s => s.Equals(serializedTimeEntryOptions)), It.IsAny>())) + .ReturnsAsync(timeEntryJson); + + var expectedTimeEntry = JsonSerializer.Deserialize(timeEntryJson, _config.SerializerOptions); + Assert.NotNull(expectedTimeEntry); + + var actualTimeEntry = await _timeEntryEndpoint.UpdateByIdAsync(AdministrationId, TimeEntryId, timeEntryUpdateOptions, AccessToken); + Assert.NotNull(actualTimeEntry); + + actualTimeEntry.Should().BeEquivalentTo(expectedTimeEntry); + } + [Fact] public async void DeleteTimeEntryAsync_ByAccessToken_Returns_True() { diff --git a/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/patchTimeEntry.json b/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/patchTimeEntry.json new file mode 100644 index 0000000..05bc79c --- /dev/null +++ b/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/patchTimeEntry.json @@ -0,0 +1,58 @@ +{ + "id": "395774015067653647", + "administration_id": "281289699686381606", + "contact_id": "395774015039342091", + "project_id": "395774015051925005", + "user_id": "1691659319295", + "started_at": "2023-08-10T09:25:00.000Z", + "ended_at": "2023-08-10T10:25:00.000Z", + "description": "Updated description", + "paused_duration": 0, + "billable": true, + "created_at": "2023-08-10T09:25:34.991Z", + "updated_at": "2023-08-10T09:25:35.037Z", + "contact": { + "id": "395774015039342091", + "firstname": "", + "lastname": "", + "company_name": "Foobar Holding B.V." + }, + "detail": null, + "user": { + "id": "1691659319295", + "name": "Moneybird", + "created_at": "2023-08-10T09:21:59.146Z", + "updated_at": "2023-08-10T09:21:59.350Z" + }, + "project": { + "id": "395774015051925005", + "name": "My project name", + "state": "active" + }, + "events": [ + { + "administration_id": "281289699686381606", + "user_id": "1691659319295", + "action": "time_entry_created", + "link_entity_id": null, + "link_entity_type": null, + "data": { + }, + "created_at": "2023-08-10T09:25:34.993Z", + "updated_at": "2023-08-10T09:25:34.993Z" + }, + { + "administration_id": "281289699686381606", + "user_id": "1691659319295", + "action": "time_entry_updated", + "link_entity_id": null, + "link_entity_type": null, + "data": { + }, + "created_at": "2023-08-10T09:25:35.041Z", + "updated_at": "2023-08-10T09:25:35.041Z" + } + ], + "notes": [ + ] +} \ No newline at end of file diff --git a/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/postTimeEntry.json b/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/postTimeEntry.json new file mode 100644 index 0000000..6d1b60b --- /dev/null +++ b/tests/Moneybird.Net.Tests/Responses/Endpoints/TimeEntries/postTimeEntry.json @@ -0,0 +1,47 @@ +{ + "id": "395774014869472775", + "administration_id": "281289699686381606", + "contact_id": "395774014807606787", + "project_id": "395774014821238277", + "user_id": "1691659319295", + "started_at": "2023-08-10T09:25:00.000Z", + "ended_at": "2023-08-10T10:25:00.000Z", + "description": "Test", + "paused_duration": 0, + "billable": false, + "created_at": "2023-08-10T09:25:34.802Z", + "updated_at": "2023-08-10T09:25:34.802Z", + "contact": { + "id": "395774014807606787", + "firstname": "", + "lastname": "", + "company_name": "Foobar Holding B.V." + }, + "detail": null, + "user": { + "id": "1691659319295", + "name": "Moneybird", + "created_at": "2023-08-10T09:21:59.146Z", + "updated_at": "2023-08-10T09:21:59.350Z" + }, + "project": { + "id": "395774014821238277", + "name": "My project name", + "state": "active" + }, + "events": [ + { + "administration_id": "281289699686381606", + "user_id": "1691659319295", + "action": "time_entry_created", + "link_entity_id": null, + "link_entity_type": null, + "data": { + }, + "created_at": "2023-08-10T09:25:34.805Z", + "updated_at": "2023-08-10T09:25:34.805Z" + } + ], + "notes": [ + ] +} \ No newline at end of file From db7bc0ef901cc80e7c1cfc4e4561d8d06dc190c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Jan 2024 03:45:25 +0000 Subject: [PATCH 07/19] Bump the dependencies group in /src/Moneybird.Net with 1 update Bumps the dependencies group in /src/Moneybird.Net with 1 update: [System.Text.Json](https://github.com/dotnet/runtime). Updates `System.Text.Json` from 8.0.0 to 8.0.1 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.0...v8.0.1) --- updated-dependencies: - dependency-name: System.Text.Json dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- src/Moneybird.Net/Moneybird.Net.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Moneybird.Net/Moneybird.Net.csproj b/src/Moneybird.Net/Moneybird.Net.csproj index 0e9d8c9..a99ac59 100644 --- a/src/Moneybird.Net/Moneybird.Net.csproj +++ b/src/Moneybird.Net/Moneybird.Net.csproj @@ -18,7 +18,7 @@ - + From bac766aa27645579a79cc3c346fd9949f7e41eb3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 03:28:02 +0000 Subject: [PATCH 08/19] Bump the dependencies group in /tests/Moneybird.Net.Tests with 6 updates Bumps the dependencies group in /tests/Moneybird.Net.Tests with 6 updates: | Package | From | To | | --- | --- | --- | | [AutoFixture](https://github.com/AutoFixture/AutoFixture) | `4.18.0` | `4.18.1` | | [AutoFixture.Xunit2](https://github.com/AutoFixture/AutoFixture) | `4.18.0` | `4.18.1` | | [Moq](https://github.com/moq/moq) | `4.20.69` | `4.20.70` | | [xunit](https://github.com/xunit/xunit) | `2.6.2` | `2.6.6` | | [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) | `2.5.4` | `2.5.6` | | [System.Text.Json](https://github.com/dotnet/runtime) | `8.0.0` | `8.0.1` | Updates `AutoFixture` from 4.18.0 to 4.18.1 - [Release notes](https://github.com/AutoFixture/AutoFixture/releases) - [Commits](https://github.com/AutoFixture/AutoFixture/compare/v4.18.0...v4.18.1) Updates `AutoFixture.Xunit2` from 4.18.0 to 4.18.1 - [Release notes](https://github.com/AutoFixture/AutoFixture/releases) - [Commits](https://github.com/AutoFixture/AutoFixture/compare/v4.18.0...v4.18.1) Updates `Moq` from 4.20.69 to 4.20.70 - [Release notes](https://github.com/moq/moq/releases) - [Changelog](https://github.com/devlooped/moq/blob/main/CHANGELOG.md) - [Commits](https://github.com/moq/moq/compare/v4.20.69...v4.20.70) Updates `xunit` from 2.6.2 to 2.6.6 - [Commits](https://github.com/xunit/xunit/compare/2.6.2...2.6.6) Updates `xunit.runner.visualstudio` from 2.5.4 to 2.5.6 - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.5.4...2.5.6) Updates `System.Text.Json` from 8.0.0 to 8.0.1 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.0...v8.0.1) --- updated-dependencies: - dependency-name: AutoFixture dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: AutoFixture.Xunit2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: Moq dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: System.Text.Json dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- src/Moneybird.Net/Moneybird.Net.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Moneybird.Net/Moneybird.Net.csproj b/src/Moneybird.Net/Moneybird.Net.csproj index 0e9d8c9..a99ac59 100644 --- a/src/Moneybird.Net/Moneybird.Net.csproj +++ b/src/Moneybird.Net/Moneybird.Net.csproj @@ -18,7 +18,7 @@ - + From 09ce35ef892d0ded2f521986ceee47fb227ebe76 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Jan 2024 03:28:08 +0000 Subject: [PATCH 09/19] Bump the dependencies group in /tests/Moneybird.Net.Tests with 5 updates Bumps the dependencies group in /tests/Moneybird.Net.Tests with 5 updates: | Package | From | To | | --- | --- | --- | | [AutoFixture](https://github.com/AutoFixture/AutoFixture) | `4.18.0` | `4.18.1` | | [AutoFixture.Xunit2](https://github.com/AutoFixture/AutoFixture) | `4.18.0` | `4.18.1` | | [Moq](https://github.com/moq/moq) | `4.20.69` | `4.20.70` | | [xunit](https://github.com/xunit/xunit) | `2.6.2` | `2.6.6` | | [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) | `2.5.4` | `2.5.6` | Updates `AutoFixture` from 4.18.0 to 4.18.1 - [Release notes](https://github.com/AutoFixture/AutoFixture/releases) - [Commits](https://github.com/AutoFixture/AutoFixture/compare/v4.18.0...v4.18.1) Updates `AutoFixture.Xunit2` from 4.18.0 to 4.18.1 - [Release notes](https://github.com/AutoFixture/AutoFixture/releases) - [Commits](https://github.com/AutoFixture/AutoFixture/compare/v4.18.0...v4.18.1) Updates `Moq` from 4.20.69 to 4.20.70 - [Release notes](https://github.com/moq/moq/releases) - [Changelog](https://github.com/devlooped/moq/blob/main/CHANGELOG.md) - [Commits](https://github.com/moq/moq/compare/v4.20.69...v4.20.70) Updates `xunit` from 2.6.2 to 2.6.6 - [Commits](https://github.com/xunit/xunit/compare/2.6.2...2.6.6) Updates `xunit.runner.visualstudio` from 2.5.4 to 2.5.6 - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.5.4...2.5.6) --- updated-dependencies: - dependency-name: AutoFixture dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: AutoFixture.Xunit2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: Moq dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj b/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj index b7b9dc6..a92ce16 100644 --- a/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj +++ b/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj @@ -12,7 +12,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all From 8a31fb886e8456ef4fa40e9a47f178d45f792340 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Feb 2024 03:43:12 +0000 Subject: [PATCH 10/19] Bump the dependencies group in /src/Moneybird.Net with 1 update Bumps the dependencies group in /src/Moneybird.Net with 1 update: [System.Text.Json](https://github.com/dotnet/runtime). Updates `System.Text.Json` from 8.0.1 to 8.0.2 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.1...v8.0.2) --- updated-dependencies: - dependency-name: System.Text.Json dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- src/Moneybird.Net/Moneybird.Net.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Moneybird.Net/Moneybird.Net.csproj b/src/Moneybird.Net/Moneybird.Net.csproj index a99ac59..3e3a3ba 100644 --- a/src/Moneybird.Net/Moneybird.Net.csproj +++ b/src/Moneybird.Net/Moneybird.Net.csproj @@ -18,7 +18,7 @@ - + From 9b911aafe6402975a053e575c9f43ce43c5e96d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 09:03:34 +0000 Subject: [PATCH 11/19] Bump the dependencies group in /tests/Moneybird.Net.Tests with 7 updates Bumps the dependencies group in /tests/Moneybird.Net.Tests with 7 updates: | Package | From | To | | --- | --- | --- | | [AutoFixture](https://github.com/AutoFixture/AutoFixture) | `4.18.0` | `4.18.1` | | [AutoFixture.Xunit2](https://github.com/AutoFixture/AutoFixture) | `4.18.0` | `4.18.1` | | [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) | `17.8.0` | `17.9.0` | | [Moq](https://github.com/moq/moq) | `4.20.69` | `4.20.70` | | [xunit](https://github.com/xunit/xunit) | `2.6.2` | `2.7.0` | | [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) | `2.5.6` | `2.5.7` | | [coverlet.collector](https://github.com/coverlet-coverage/coverlet) | `6.0.0` | `6.0.1` | Updates `AutoFixture` from 4.18.0 to 4.18.1 - [Release notes](https://github.com/AutoFixture/AutoFixture/releases) - [Commits](https://github.com/AutoFixture/AutoFixture/compare/v4.18.0...v4.18.1) Updates `AutoFixture.Xunit2` from 4.18.0 to 4.18.1 - [Release notes](https://github.com/AutoFixture/AutoFixture/releases) - [Commits](https://github.com/AutoFixture/AutoFixture/compare/v4.18.0...v4.18.1) Updates `Microsoft.NET.Test.Sdk` from 17.8.0 to 17.9.0 - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.8.0...v17.9.0) Updates `Moq` from 4.20.69 to 4.20.70 - [Release notes](https://github.com/moq/moq/releases) - [Changelog](https://github.com/devlooped/moq/blob/main/CHANGELOG.md) - [Commits](https://github.com/moq/moq/compare/v4.20.69...v4.20.70) Updates `xunit` from 2.6.2 to 2.7.0 - [Commits](https://github.com/xunit/xunit/compare/2.6.2...2.7.0) Updates `xunit.runner.visualstudio` from 2.5.6 to 2.5.7 - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.5.6...2.5.7) Updates `coverlet.collector` from 6.0.0 to 6.0.1 - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.0...v6.0.1) --- updated-dependencies: - dependency-name: AutoFixture dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: AutoFixture.Xunit2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: Moq dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: coverlet.collector dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj b/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj index a92ce16..39a26f6 100644 --- a/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj +++ b/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj @@ -16,7 +16,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all From ab9ce62ed3f2d386cc989f7f57370a5e2aaf7835 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Mar 2024 03:36:48 +0000 Subject: [PATCH 12/19] Bump the dependencies group in /src/Moneybird.Net with 1 update Bumps the dependencies group in /src/Moneybird.Net with 1 update: [System.Text.Json](https://github.com/dotnet/runtime). Updates `System.Text.Json` from 8.0.2 to 8.0.3 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.2...v8.0.3) --- updated-dependencies: - dependency-name: System.Text.Json dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- src/Moneybird.Net/Moneybird.Net.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Moneybird.Net/Moneybird.Net.csproj b/src/Moneybird.Net/Moneybird.Net.csproj index 3e3a3ba..cc0bc11 100644 --- a/src/Moneybird.Net/Moneybird.Net.csproj +++ b/src/Moneybird.Net/Moneybird.Net.csproj @@ -18,7 +18,7 @@ - + From 2d816791575dfa0626103237abe372285745d984 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 03:12:46 +0000 Subject: [PATCH 13/19] Bump the dependencies group in /tests/Moneybird.Net.Tests with 7 updates Bumps the dependencies group in /tests/Moneybird.Net.Tests with 7 updates: | Package | From | To | | --- | --- | --- | | [AutoFixture](https://github.com/AutoFixture/AutoFixture) | `4.18.0` | `4.18.1` | | [AutoFixture.Xunit2](https://github.com/AutoFixture/AutoFixture) | `4.18.0` | `4.18.1` | | [coverlet.collector](https://github.com/coverlet-coverage/coverlet) | `6.0.1` | `6.0.2` | | [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) | `17.8.0` | `17.9.0` | | [Moq](https://github.com/moq/moq) | `4.20.69` | `4.20.70` | | [xunit](https://github.com/xunit/xunit) | `2.6.2` | `2.8.0` | | [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) | `2.5.6` | `2.8.0` | Updates `AutoFixture` from 4.18.0 to 4.18.1 - [Release notes](https://github.com/AutoFixture/AutoFixture/releases) - [Commits](https://github.com/AutoFixture/AutoFixture/compare/v4.18.0...v4.18.1) Updates `AutoFixture.Xunit2` from 4.18.0 to 4.18.1 - [Release notes](https://github.com/AutoFixture/AutoFixture/releases) - [Commits](https://github.com/AutoFixture/AutoFixture/compare/v4.18.0...v4.18.1) Updates `AutoFixture` from 4.18.0 to 4.18.1 - [Release notes](https://github.com/AutoFixture/AutoFixture/releases) - [Commits](https://github.com/AutoFixture/AutoFixture/compare/v4.18.0...v4.18.1) Updates `coverlet.collector` from 6.0.1 to 6.0.2 - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.1...v6.0.2) Updates `Microsoft.NET.Test.Sdk` from 17.8.0 to 17.9.0 - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.8.0...v17.9.0) Updates `Moq` from 4.20.69 to 4.20.70 - [Release notes](https://github.com/moq/moq/releases) - [Changelog](https://github.com/devlooped/moq/blob/main/CHANGELOG.md) - [Commits](https://github.com/moq/moq/compare/v4.20.69...v4.20.70) Updates `xunit` from 2.6.2 to 2.8.0 - [Commits](https://github.com/xunit/xunit/compare/2.6.2...2.8.0) Updates `xunit.runner.visualstudio` from 2.5.6 to 2.8.0 - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.5.6...2.8.0) --- updated-dependencies: - dependency-name: AutoFixture dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: AutoFixture.Xunit2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: AutoFixture dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: coverlet.collector dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: Moq dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- .../Moneybird.Net.Tests/Moneybird.Net.Tests.csproj | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj b/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj index 39a26f6..6c928ae 100644 --- a/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj +++ b/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj @@ -6,17 +6,17 @@ - - + + - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all From 48f31401373adaf21e1cb58b4bd43a38071d705a Mon Sep 17 00:00:00 2001 From: Vincent Vrijburg Date: Mon, 20 May 2024 10:31:47 +0200 Subject: [PATCH 14/19] Trigger rebuild --- src/Moneybird.Net/Moneybird.Net.csproj | 2 -- tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/Moneybird.Net/Moneybird.Net.csproj b/src/Moneybird.Net/Moneybird.Net.csproj index cc0bc11..7290580 100644 --- a/src/Moneybird.Net/Moneybird.Net.csproj +++ b/src/Moneybird.Net/Moneybird.Net.csproj @@ -1,5 +1,4 @@ - netstandard2.0 9 @@ -26,5 +25,4 @@ <_Parameter1>$(MSBuildProjectName).Tests - diff --git a/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj b/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj index 6c928ae..9539ee2 100644 --- a/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj +++ b/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj @@ -1,5 +1,4 @@ - net6.0 false @@ -31,5 +30,4 @@ PreserveNewest - From a484f7c5e3941d35eed9ddcdf722fb3898c72dc8 Mon Sep 17 00:00:00 2001 From: Vincent Vrijburg Date: Mon, 20 May 2024 11:05:59 +0200 Subject: [PATCH 15/19] Refactor parameter --- .../Endpoints/Abstractions/ITimeEntryEndpoint.cs | 2 +- src/Moneybird.Net/Endpoints/TimeEntryEndpoint.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Moneybird.Net/Endpoints/Abstractions/ITimeEntryEndpoint.cs b/src/Moneybird.Net/Endpoints/Abstractions/ITimeEntryEndpoint.cs index 96b5e50..f305f75 100644 --- a/src/Moneybird.Net/Endpoints/Abstractions/ITimeEntryEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/Abstractions/ITimeEntryEndpoint.cs @@ -16,6 +16,6 @@ public interface ITimeEntryEndpoint : IDeleteEndpoint { Task CreateTimeEntryNoteAsync(string administrationId, string timeEntryId, NoteCreateOptions options, string accessToken); - Task DeleteTimeEntryNoteByIdAsync(string administrationId, string contactId, string noteId, string accessToken); + Task DeleteTimeEntryNoteByIdAsync(string administrationId, string timeEntryId, string noteId, string accessToken); } } \ No newline at end of file diff --git a/src/Moneybird.Net/Endpoints/TimeEntryEndpoint.cs b/src/Moneybird.Net/Endpoints/TimeEntryEndpoint.cs index 3d996fa..7ac8dbd 100644 --- a/src/Moneybird.Net/Endpoints/TimeEntryEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/TimeEntryEndpoint.cs @@ -108,9 +108,9 @@ public async Task CreateTimeEntryNoteAsync(string administrationId, string return JsonSerializer.Deserialize(responseJson, _config.SerializerOptions); } - public async Task DeleteTimeEntryNoteByIdAsync(string administrationId, string contactId, string noteId, string accessToken) + public async Task DeleteTimeEntryNoteByIdAsync(string administrationId, string timeEntryId, string noteId, string accessToken) { - var relativeUrl = string.Format(TimeEntriesIdNotesIdUri, administrationId, contactId, noteId); + var relativeUrl = string.Format(TimeEntriesIdNotesIdUri, administrationId, timeEntryId, noteId); var response = await _requester .CreateDeleteRequestAsync(_config.ApiUri, relativeUrl, accessToken) .ConfigureAwait(false); From 62b312616e75f768ef083fcbf311f8cead62850b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 31 May 2024 03:21:45 +0000 Subject: [PATCH 16/19] Bump the dependencies group across 1 directory with 3 updates Bumps the dependencies group with 3 updates in the /tests/Moneybird.Net.Tests directory: [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest), [xunit](https://github.com/xunit/xunit) and [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit). Updates `Microsoft.NET.Test.Sdk` from 17.9.0 to 17.10.0 - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.9.0...v17.10.0) Updates `xunit` from 2.8.0 to 2.8.1 - [Commits](https://github.com/xunit/xunit/compare/2.8.0...2.8.1) Updates `xunit.runner.visualstudio` from 2.8.0 to 2.8.1 - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.8.0...2.8.1) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ... Signed-off-by: dependabot[bot] --- tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj b/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj index 9539ee2..695f7f5 100644 --- a/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj +++ b/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj @@ -8,10 +8,10 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all From 28649e81dcb48db973fcb1c6e274e1e82ede7b1a Mon Sep 17 00:00:00 2001 From: Vincent Vrijburg Date: Sat, 6 Jul 2024 18:57:22 +0200 Subject: [PATCH 17/19] Trigger rebuild --- tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj b/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj index 695f7f5..b313085 100644 --- a/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj +++ b/tests/Moneybird.Net.Tests/Moneybird.Net.Tests.csproj @@ -30,4 +30,5 @@ PreserveNewest + From cc9f08837ea952e7cb9049d2e3222a6e6a2480d0 Mon Sep 17 00:00:00 2001 From: Vincent Vrijburg Date: Sat, 6 Jul 2024 20:09:48 +0200 Subject: [PATCH 18/19] Fix contact endpoint tests after merge --- .../Endpoints/ContactEndpointTests.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs index ab81889..81877f2 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs @@ -3,14 +3,15 @@ using System.Linq; using System.Text.Json; using FluentAssertions; +using Moneybird.Net.Endpoints; using Moneybird.Net.Endpoints.Abstractions; -using Moneybird.Net.Endpoints.Contacts; -using Moneybird.Net.Endpoints.Contacts.Models; using Moneybird.Net.Entities.Contacts; using Moneybird.Net.Entities.CustomFields; +using Moneybird.Net.Entities.Notes; using Moneybird.Net.Http; using Moneybird.Net.Misc; -using Moneybird.Net.Tests.Endpoints.Contacts; +using Moneybird.Net.Models.Contacts; +using Moneybird.Net.Models.Notes; using Moq; using Xunit; @@ -365,9 +366,9 @@ public async void DeleteContactByIdAsync_ByAccessToken_Returns_True() public async void CreateContactNoteAsync_ByAccessToken_Returns_NewContactNote() { var contactNoteJson = await File.ReadAllTextAsync(NewContactNoteResponsePath); - var contactNoteCreateOptions = new ContactNoteCreateOptions + var contactNoteCreateOptions = new NoteCreateOptions { - Note = new ContactNoteCreateItem + Note = new NoteCreateItem { Note = "Text of the note", Todo = true, @@ -381,7 +382,7 @@ public async void CreateContactNoteAsync_ByAccessToken_Returns_NewContactNote() It.IsAny(), It.Is(s => s.Equals(serializedContactNoteCreateOptions)), It.IsAny>())) .ReturnsAsync(contactNoteJson); - var contactNote = JsonSerializer.Deserialize(contactNoteJson, _config.SerializerOptions); + var contactNote = JsonSerializer.Deserialize(contactNoteJson, _config.SerializerOptions); Assert.NotNull(contactNote); var actualContactNote = await _contactEndpoint.CreateContactNoteAsync(AdministrationId, ContactId, contactNoteCreateOptions, AccessToken); From 471e9ee142a3c06b5c0f2218cae285fbcb986d67 Mon Sep 17 00:00:00 2001 From: Vincent Vrijburg Date: Sat, 6 Jul 2024 20:13:10 +0200 Subject: [PATCH 19/19] Fix build --- src/Moneybird.Net/Entities/Contacts/Contact.cs | 3 ++- .../Endpoints/SalesInvoiceEndpointTests.cs | 12 +++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Moneybird.Net/Entities/Contacts/Contact.cs b/src/Moneybird.Net/Entities/Contacts/Contact.cs index 23752ce..2980270 100644 --- a/src/Moneybird.Net/Entities/Contacts/Contact.cs +++ b/src/Moneybird.Net/Entities/Contacts/Contact.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; using Moneybird.Net.Entities.CustomFields; +using Moneybird.Net.Entities.Notes; using Moneybird.Net.Misc; namespace Moneybird.Net.Entities.Contacts @@ -138,7 +139,7 @@ public class Contact : IMoneybirdEntity public string SalesInvoicesUrl { get; set; } [JsonPropertyName("notes")] - public List Notes { get; set; } + public List Notes { get; set; } [JsonPropertyName("custom_fields")] public List CustomFields { get; set; } diff --git a/tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceEndpointTests.cs index b03bbbd..7b3890f 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceEndpointTests.cs @@ -5,12 +5,10 @@ using System.Text.Json; using FluentAssertions; using Moneybird.Net.Endpoints; -using Moneybird.Net.Endpoints.SalesInvoices; -using Moneybird.Net.Endpoints.SalesInvoices.Models; using Moneybird.Net.Entities.CustomFields; using Moneybird.Net.Entities.SalesInvoices; using Moneybird.Net.Http; -using Moneybird.Net.Tests.Endpoints.SalesInvoices; +using Moneybird.Net.Models.SalesInvoices; using Moq; using Xunit; @@ -72,12 +70,12 @@ public async void GetSalesInvoicesAsync_UsingFilterOptions_ByAccessToken_Returns var filterOptions = new SalesInvoiceFilterOptions { - ContactId = 10, + ContactId = "369764595159532558", State = SalesInvoiceState.Open, Period = "ThisYear", Reference = "30052", RecurringSalesInvoiceId = null, - WorkflowId = 9, + WorkflowId = "369764439669343349", CreatedAfter = DateTime.UtcNow, UpdatedAfter = DateTime.UtcNow }; @@ -230,7 +228,7 @@ public async void UpdateSalesInvoiceAsync_ByAccessToken_Returns_UpdatedSalesInvo }, CustomFieldsAttributes = new [] { - new CustomFieldAttribute + new CustomFieldAttribute() { Id = "1", Value = "Custom field value" @@ -278,4 +276,4 @@ public async void AddSalesInvoiceAttachmentAsync_ByAccessToken_Returns() var file = new MemoryStream(); await _salesInvoiceEndpoint.AddAttachmentAsync(AdministrationId, SalesInvoiceId, file, AccessToken, "testfile.pdf"); } -} +} \ No newline at end of file