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 38c02c7..87d4230 100644 --- a/src/Moneybird.Net/Endpoints/Abstractions/IContactEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/Abstractions/IContactEndpoint.cs @@ -1,8 +1,10 @@ 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.Entities.Notes; +using Moneybird.Net.Models.Contacts; +using Moneybird.Net.Models.Notes; namespace Moneybird.Net.Endpoints.Abstractions { @@ -18,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, 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..f305f75 --- /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 timeEntryId, 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 96% rename from src/Moneybird.Net/Endpoints/Contacts/ContactEndpoint.cs rename to src/Moneybird.Net/Endpoints/ContactEndpoint.cs index 3f027e3..b1d0cfc 100644 --- a/src/Moneybird.Net/Endpoints/Contacts/ContactEndpoint.cs +++ b/src/Moneybird.Net/Endpoints/ContactEndpoint.cs @@ -2,12 +2,14 @@ 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.Entities.Notes; 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 +151,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); @@ -157,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/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..7ac8dbd --- /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 timeEntryId, string noteId, string accessToken) + { + var relativeUrl = string.Format(TimeEntriesIdNotesIdUri, administrationId, timeEntryId, 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/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/Notes/Note.cs similarity index 76% rename from src/Moneybird.Net/Entities/Contacts/ContactNote.cs rename to src/Moneybird.Net/Entities/Notes/Note.cs index 3684bd2..12b35cb 100644 --- a/src/Moneybird.Net/Entities/Contacts/ContactNote.cs +++ b/src/Moneybird.Net/Entities/Notes/Note.cs @@ -1,51 +1,50 @@ using System; using System.Text.Json.Serialization; -namespace Moneybird.Net.Entities.Contacts +namespace Moneybird.Net.Entities.Notes { - public class ContactNote + 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 Note { get; set; } - + 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 string TodoType { get; set; } - - // TODO: Check documentation to understand what this data field is meant for. + public object TodoType { get; set; } + [JsonIgnore] [JsonPropertyName("data")] public object Data { get; set; } - + [JsonPropertyName("created_at")] public DateTime CreatedAt { get; set; } - + [JsonPropertyName("updated_at")] public DateTime UpdatedAt { get; set; } } 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..c9e3ad2 --- /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 string 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..0deba57 --- /dev/null +++ b/src/Moneybird.Net/Models/TimeEntries/TimeEntryCreate.cs @@ -0,0 +1,35 @@ +using System; +using System.Text.Json.Serialization; + +namespace Moneybird.Net.Models.TimeEntries +{ + public class TimeEntryCreate + { + [JsonPropertyName("user_id")] + public string 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("contact_id")] + public string ContactId { get; set; } + + [JsonPropertyName("project_id")] + public string ProjectId { get; set; } + + [JsonPropertyName("detail_id")] + public string 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..f80ace6 --- /dev/null +++ b/src/Moneybird.Net/Models/TimeEntries/TimeEntryUpdate.cs @@ -0,0 +1,29 @@ +using System; +using System.Text.Json.Serialization; + +namespace Moneybird.Net.Models.TimeEntries +{ + public class TimeEntryUpdate + { + [JsonPropertyName("started_at")] + public DateTime StartedAt { get; set; } + + [JsonPropertyName("ended_at")] + public DateTime EndedAt { get; set; } + + [JsonPropertyName("paused_duration")] + public int PausedDuration { get; set; } + + [JsonPropertyName("contact_id")] + public string ContactId { get; set; } + + [JsonPropertyName("project_id")] + public string 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..280bd2f 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 @@ -44,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; } @@ -88,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/Administrations/AdministrationEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/AdministrationEndpointTests.cs similarity index 95% rename from tests/Moneybird.Net.Tests/Endpoints/Administrations/AdministrationEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/AdministrationEndpointTests.cs index b924957..8836d67 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Administrations/AdministrationEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/AdministrationEndpointTests.cs @@ -3,14 +3,14 @@ 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; 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 98% rename from tests/Moneybird.Net.Tests/Endpoints/Contacts/ContactEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs index 2c91c9e..b47215f 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Contacts/ContactEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs @@ -3,16 +3,18 @@ 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.Notes; using Moneybird.Net.Http; using Moneybird.Net.Misc; +using Moneybird.Net.Models.Contacts; +using Moneybird.Net.Models.Notes; using Moq; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.Contacts +namespace Moneybird.Net.Tests.Endpoints { public class ContactEndpointTests : ContactTestBase { @@ -355,9 +357,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, @@ -371,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/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 95% rename from tests/Moneybird.Net.Tests/Endpoints/CustomFields/CustomFieldEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/CustomFieldEndpointTests.cs index 87230ff..0e0176c 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/CustomFields/CustomFieldEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/CustomFieldEndpointTests.cs @@ -3,14 +3,14 @@ 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; 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 95% rename from tests/Moneybird.Net.Tests/Endpoints/DocumentStyles/DocumentStyleEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/DocumentStyleEndpointTests.cs index 5eb40c2..63f0689 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/DocumentStyles/DocumentStyleEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/DocumentStyleEndpointTests.cs @@ -3,14 +3,14 @@ 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; 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 96% rename from tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoices/ExternalSalesInvoiceEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoiceEndpointTests.cs index d81450a..780ddbd 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoices/ExternalSalesInvoiceEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ExternalSalesInvoiceEndpointTests.cs @@ -4,15 +4,14 @@ 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; -namespace Moneybird.Net.Tests.Endpoints.ExternalSalesInvoices; +namespace Moneybird.Net.Tests.Endpoints; public class ExternalSalesInvoiceEndpointTests : ExternalSalesInvoicesTestBase { @@ -70,7 +69,7 @@ public async void GetExternalSalesInvoicesAsync_UsingFilterOptions_ByAccessToken var filterOptions = new ExternalSalesInvoiceFilterOptions { - ContactId = 10, + ContactId = "369764545284015762", State = ExternalSalesInvoiceState.Open, Period = "ThisYear" }; @@ -137,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); @@ -190,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/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 95% rename from tests/Moneybird.Net.Tests/Endpoints/FinancialAccounts/FinancialAccountEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/FinancialAccountEndpointTests.cs index 6ee1b85..73262c4 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/FinancialAccounts/FinancialAccountEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/FinancialAccountEndpointTests.cs @@ -3,13 +3,13 @@ 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; 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 97% rename from tests/Moneybird.Net.Tests/Endpoints/FinancialStatements/FinancialStatementEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/FinancialStatementEndpointTests.cs index 7a1dad2..feb2756 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/FinancialStatements/FinancialStatementEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/FinancialStatementEndpointTests.cs @@ -3,15 +3,15 @@ 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; -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 97% rename from tests/Moneybird.Net.Tests/Endpoints/LedgerAccounts/LedgerAccountEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/LedgerAccountEndpointTests.cs index 2a0e968..13a8b2d 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/LedgerAccounts/LedgerAccountEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/LedgerAccountEndpointTests.cs @@ -3,15 +3,15 @@ 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; -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 94% rename from tests/Moneybird.Net.Tests/Endpoints/Payments/PaymentEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/PaymentEndpointTests.cs index d4fb409..6a7550d 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Payments/PaymentEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/PaymentEndpointTests.cs @@ -3,13 +3,13 @@ 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; 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 98% rename from tests/Moneybird.Net.Tests/Endpoints/Products/ProductEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/ProductEndpointTests.cs index 772bd40..c772c2b 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Products/ProductEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ProductEndpointTests.cs @@ -3,15 +3,15 @@ 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; -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 76% rename from tests/Moneybird.Net.Tests/Endpoints/Projects/ProjectEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/ProjectEndpointTests.cs index 6ebff68..1c9ec51 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Projects/ProjectEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ProjectEndpointTests.cs @@ -3,14 +3,14 @@ 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; -namespace Moneybird.Net.Tests.Endpoints.Projects; +namespace Moneybird.Net.Tests.Endpoints; public class ProjectEndpointTests : ProjectTestBase { @@ -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/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 97% rename from tests/Moneybird.Net.Tests/Endpoints/SalesInvoices/SalesInvoiceEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceEndpointTests.cs index c6615d9..6ecf0b1 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/SalesInvoices/SalesInvoiceEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceEndpointTests.cs @@ -4,14 +4,14 @@ 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; -namespace Moneybird.Net.Tests.Endpoints.SalesInvoices; +namespace Moneybird.Net.Tests.Endpoints; public class SalesInvoiceEndpointTests : SalesInvoiceTestBase { @@ -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/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 95% rename from tests/Moneybird.Net.Tests/Endpoints/TaxRates/TaxRateEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/TaxRateEndpointTests.cs index f511b59..d3c2bac 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/TaxRates/TaxRateEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/TaxRateEndpointTests.cs @@ -3,14 +3,14 @@ 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; -namespace Moneybird.Net.Tests.Endpoints.TaxRates; +namespace Moneybird.Net.Tests.Endpoints; public class TaxRateEndpointTests : CommonTestBase { diff --git a/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs new file mode 100644 index 0000000..80a5448 --- /dev/null +++ b/tests/Moneybird.Net.Tests/Endpoints/TimeEntryEndpointTests.cs @@ -0,0 +1,234 @@ +using System; +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 Moneybird.Net.Models.TimeEntries; +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 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() + { + _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(GetTimeEntriesResponsePath); + + _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 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 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() + { + _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/Endpoints/Users/UserEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/UserEndpointTests.cs similarity index 95% rename from tests/Moneybird.Net.Tests/Endpoints/Users/UserEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/UserEndpointTests.cs index 39d4542..7c45268 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Users/UserEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/UserEndpointTests.cs @@ -3,13 +3,13 @@ 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; 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 98% rename from tests/Moneybird.Net.Tests/Endpoints/Verifications/VerificationEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/VerificationEndpointTests.cs index 66e7238..83550bc 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Verifications/VerificationEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/VerificationEndpointTests.cs @@ -3,13 +3,13 @@ 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; 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 95% rename from tests/Moneybird.Net.Tests/Endpoints/Webhooks/WebhookEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/WebhookEndpointTests.cs index aec77fd..d4d7ed6 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Webhooks/WebhookEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/WebhookEndpointTests.cs @@ -1,18 +1,16 @@ -using System; using System.Collections.Generic; -using System.Globalization; using System.IO; 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; -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 95% rename from tests/Moneybird.Net.Tests/Endpoints/Workflows/WorkflowEndpointTests.cs rename to tests/Moneybird.Net.Tests/Endpoints/WorkflowEndpointTests.cs index 0c832db..9e8c879 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/Workflows/WorkflowEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/WorkflowEndpointTests.cs @@ -3,13 +3,13 @@ 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; using Xunit; -namespace Moneybird.Net.Tests.Endpoints.Workflows +namespace Moneybird.Net.Tests.Endpoints { public class WorkflowEndpointTests : CommonTestBase { 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..250150f --- /dev/null +++ b/tests/Moneybird.Net.Tests/Extensions/TimeEntriesExtensionsTests.cs @@ -0,0 +1,191 @@ +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_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() + { + 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); + } +} 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/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 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 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