diff --git a/.phpunit.cache/test-results b/.phpunit.cache/test-results index 42e148f..32330bc 100644 --- a/.phpunit.cache/test-results +++ b/.phpunit.cache/test-results @@ -1 +1 @@ -{"version":"pest_3.7.4","defects":{"P\\Tests\\Requests\\ManualEntries\\AddFileToAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\IbanPayments\\UpdateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Invoices\\CreateAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Contacts\\BuilkCreateContactsRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\QrPayments\\UpdateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Invoices\\EditAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":8,"P\\Tests\\Requests\\Files\\ShowFileUsageRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\ManualEntries\\CreateManualEntryRequestTest::__pest_evaluable_it_can_perform_the_request":8},"times":{"P\\Tests\\Requests\\Files\\GetAFilePreviewRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\BusinessYears\\FetchAListOfBusinessYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Reports\\JournalRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Payments\\CancelAPaymentTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\SearchContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\CalendarYears\\CreateCalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Salutations\\SearchSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\IbanPayments\\GetIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\DeleteAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.022,"P\\Tests\\Requests\\CalendarYears\\SearchCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Currencies\\EditACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsGroups\\EditAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\ContactsGroups\\CreateContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Salutations\\FetchASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\CreateAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Units\\FetchAListOfUnitsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Payments\\FetchAListOfPaymentsTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Currencies\\CreateCurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Notes\\FetchAListOfNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsSectors\\SearchContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Contacts\\EditAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsGroups\\SearchContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\QrPayments\\CreateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\CreateContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\EditAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BusinessYears\\FetchABusinessYearRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsSectors\\FetchAListOfContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\AddFileToAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\DeleteFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\IbanPayments\\UpdateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Currencies\\FetchExchangeRatesForCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\DocumentSettings\\FetchAListOfDocumentSettingsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAListOfAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Notes\\CreateANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\CalendarYears\\FetchACalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\CreateAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ContactsRelations\\DeleteAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\PaymentTypes\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\FetchAListOfManualEntriesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\BuilkCreateContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AccountGroups\\FetchAListOfAccountGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Core\\ArchTest::__pest_evaluable_it_will_not_use_any_debug_function":0.204,"P\\Tests\\Requests\\ContactsRelations\\EditAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Currencies\\DeleteACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\QrPayments\\UpdateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsRelations\\FetchAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsGroups\\FetchAListOfContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\SubPositions\\CreateASubPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Taxes\\FetchAListOfTaxesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BankAccounts\\FetchASingleBankAccountRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\DeleteAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\BankAccounts\\FetchAListOfBankAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\EditAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\Contacts\\RestoreAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\ShowFileUsageRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Requests\\Invoices\\DefaultPositions\\CreateADefaultPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CompanyProfiles\\FetchAListOfCompanyProfilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\SearchTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Contacts\\FetchAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\SearchFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\CreateAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Notes\\FetchANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\FetchAListOfInvoicesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Titles\\FetchAListOfTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\CreateManualEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\EditASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Users\\FetchAListOfUsersRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Accounts\\SearchAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\ShowPdfRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\FetchAListOfFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Salutations\\FetchAListOfSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Currencies\\FetchAllPossibleCurrencyCodesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\DeleteAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\FetchAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Payments\\DeleteAPaymentTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\EditAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Taxes\\FetchATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\CancelAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Projects\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\FetchATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\GetASingleFileRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsGroups\\FetchAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAListOfContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Contacts\\CreateContactRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsRelations\\SearchContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\CalendarYears\\FetchAListOfCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Notes\\DeleteANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\QrPayments\\GetQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\IbanPayments\\CreateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\SearchAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsGroups\\DeleteAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\DownloadFIleRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Accounts\\FetchAListOfAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\SearchContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\FetchFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\FetchFilesOfAccountingEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Taxes\\DeleteATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Notes\\SearchNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Notes\\EditANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsRelations\\FetchAListOfContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Currencies\\FetchAListOfCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Salutations\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\BusinessActivities\\FetchAListOfBusinessActivitesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Languages\\FetchAListOfLanguagesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Titles\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Contacts\\FetchAListOfContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Salutations\\DeleteASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\CompanyProfiles\\FetchACompanyProfileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\DeleteAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ManualEntries\\GetNextReferenceNumberRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Users\\FetchAuthenticatedUserRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsRelations\\CreateContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0}} \ No newline at end of file +{"version":"pest_3.8.2","defects":{"P\\Tests\\Requests\\IbanPayments\\UpdateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\QrPayments\\UpdateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Contacts\\BuilkCreateContactsRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\ManualEntries\\AddFileToAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":1,"P\\Tests\\Requests\\Files\\ShowFileUsageRequestTest::__pest_evaluable_it_can_perform_the_request":1},"times":{"P\\Tests\\Requests\\Units\\FetchAListOfUnitsRequestTest::__pest_evaluable_it_can_perform_the_request":0.042,"P\\Tests\\Requests\\ContactsRelations\\EditAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.016,"P\\Tests\\Requests\\Payments\\FetchAListOfPaymentsTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\DeleteAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\SubPositions\\CreateASubPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.006,"P\\Tests\\Requests\\ManualEntries\\CreateManualEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0.018,"P\\Tests\\Requests\\IbanPayments\\CreateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Accounts\\SearchAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Users\\FetchAListOfUsersRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\Notes\\SearchNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsRelations\\SearchContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\SubPositions\\DeleteASubPositionRequestTest::__pest_evaluable_it_can_delete_a_sub_position":0.002,"P\\Tests\\Requests\\SubtotalPositions\\EditASubtotalPositionRequestTest::__pest_evaluable_it_can_edit_a_subtotal_position":0.001,"P\\Tests\\Requests\\Currencies\\EditACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\DeleteASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\DiscountPositions\\CreateADiscountPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsRelations\\CreateContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\QrPayments\\GetQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsGroups\\FetchAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\CreateCurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\TextPositions\\FetchATextPositionRequestTest::__pest_evaluable_it_can_fetch_a_text_position":0.001,"P\\Tests\\Requests\\BankAccounts\\FetchAListOfBankAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.005,"P\\Tests\\Requests\\Invoices\\ShowPdfRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\ContactsGroups\\FetchAListOfContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\SearchContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Taxes\\FetchAListOfTaxesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\SearchSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Taxes\\FetchATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\SearchContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchAListOfCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CalendarYears\\FetchAListOfCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\CreateAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.008,"P\\Tests\\Requests\\ContactsRelations\\DeleteAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\CreateAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchExchangeRatesForCurrenciesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\SubtotalPositions\\CreateASubtotalPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\FetchAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\DiscountPositions\\FetchAListOfDiscountPositionsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\GetASingleFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\DefaultPositions\\FetchAListOfDefaultPositionsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ItemPositions\\FetchAnItemPositionRequestTest::__pest_evaluable_it_can_fetch_an_item_position":0.001,"P\\Tests\\Requests\\Contacts\\FetchAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\SearchAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\FetchACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\SubPositions\\FetchAListOfSubPositionsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\DiscountPositions\\DeleteADiscountPositionRequestTest::__pest_evaluable_it_can_delete_a_discount_position":0.001,"P\\Tests\\Requests\\Payments\\DeleteAPaymentTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\TextPositions\\EditATextPositionRequestTest::__pest_evaluable_it_can_edit_a_text_position":0.001,"P\\Tests\\Requests\\Contacts\\FetchAListOfContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\SubtotalPositions\\FetchAListOfSubtotalPositionsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Taxes\\DeleteATaxRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\DefaultPositions\\DeleteADefaultPositionRequestTest::__pest_evaluable_it_can_delete_a_default_position":0.001,"P\\Tests\\Requests\\ItemPositions\\EditAnItemPositionRequestTest::__pest_evaluable_it_can_edit_an_item_position":0.001,"P\\Tests\\Requests\\Titles\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\DiscountPositions\\FetchADiscountPositionRequestTest::__pest_evaluable_it_can_fetch_a_discount_position":0.001,"P\\Tests\\Requests\\Invoices\\DeleteAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\SearchTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\DefaultPositions\\CreateADefaultPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Payments\\CancelAPaymentTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\IbanPayments\\UpdateIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.004,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAListOfContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\DownloadFIleRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CompanyProfiles\\FetchACompanyProfileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\GetAFilePreviewRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\EditANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CalendarYears\\CreateCalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\TextPositions\\DeleteATextPositionRequestTest::__pest_evaluable_it_can_delete_a_text_position":0.001,"P\\Tests\\Requests\\Notes\\FetchANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\SubtotalPositions\\FetchASubtotalPositionRequestTest::__pest_evaluable_it_can_fetch_a_subtotal_position":0.001,"P\\Tests\\Requests\\Currencies\\FetchAllPossibleCurrencyCodesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Reports\\JournalRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\SubPositions\\EditASubPositionRequestTest::__pest_evaluable_it_can_edit_a_sub_position":0.001,"P\\Tests\\Requests\\PaymentTypes\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ContactsRelations\\FetchAContactRelationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsSectors\\SearchContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\EditAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\RestoreAContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\CreateANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Languages\\FetchAListOfLanguagesRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\IbanPayments\\GetIbanPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\QrPayments\\CreateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsGroups\\CreateContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\QrPayments\\UpdateQrPaymentRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\EditAnAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsSectors\\FetchAListOfContactSectorsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\DeleteAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\DefaultPositions\\CreateADefaultPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\ManualEntries\\GetNextReferenceNumberRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CompanyProfiles\\FetchAListOfCompanyProfilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\DeleteFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsGroups\\SearchContactGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CalendarYears\\SearchCalendarYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\DefaultPositions\\FetchADefaultPositionRequestTest::__pest_evaluable_it_can_fetch_a_default_position":0.001,"P\\Tests\\Requests\\Contacts\\BuilkCreateContactsRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\ItemPositions\\FetchAListOfItemPositionsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\EditASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\FetchFileOfAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\DeleteANoteRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\CalendarYears\\FetchACalendarYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Users\\FetchAuthenticatedUserRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Invoices\\CancelAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\FetchAListOfSalutationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Currencies\\DeleteACurrencyRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\FetchFilesOfAccountingEntryRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\FetchAListOfInvoicesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AdditionalAddresses\\FetchAListOfAdditionalAddressesRequestTest::__pest_evaluable_it_can_perform_the_request":0.002,"P\\Tests\\Requests\\SubPositions\\FetchASubPositionRequestTest::__pest_evaluable_it_can_fetch_a_sub_position":0.001,"P\\Tests\\Requests\\ContactsGroups\\DeleteAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\EditAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Notes\\FetchAListOfNotesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ManualEntries\\FetchAListOfManualEntriesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\DeleteAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BusinessYears\\FetchABusinessYearRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\TextPositions\\CreateATextPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsRelations\\FetchAListOfContactRelationsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Salutations\\CreateASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\EditAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactsGroups\\EditAContactGroupRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Projects\\FetchAListOfPaymentTypesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\DefaultPositions\\EditADefaultPositionRequestTest::__pest_evaluable_it_can_edit_a_default_position":0.001,"P\\Tests\\Requests\\Invoices\\SubPositions\\CreateASubPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\PagebreakPositions\\CreateAPagebreakPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\PagebreakPositions\\FetchAListOfPagebreakPositionsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\SearchFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\SubtotalPositions\\DeleteASubtotalPositionRequestTest::__pest_evaluable_it_can_delete_a_subtotal_position":0.001,"P\\Tests\\Requests\\DocumentSettings\\FetchAListOfDocumentSettingsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Accounts\\FetchAListOfAccountsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\PagebreakPositions\\DeleteAPagebreakPositionRequestTest::__pest_evaluable_it_can_delete_a_pagebreak_position":0.001,"P\\Tests\\Requests\\DiscountPositions\\EditADiscountPositionRequestTest::__pest_evaluable_it_can_edit_a_discount_position":0.001,"P\\Tests\\Requests\\BankAccounts\\FetchASingleBankAccountRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Invoices\\EditAnInvoiceRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\PagebreakPositions\\FetchAPagebreakPositionRequestTest::__pest_evaluable_it_can_fetch_a_pagebreak_position":0.001,"P\\Tests\\Requests\\ManualEntries\\AddFileToAccountingEntryLineRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\AdditionalAddresses\\DeleteAnAdditonalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\FetchAListOfTitlesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\ShowFileUsageRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\Files\\FetchAListOfFilesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\CreateContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BusinessActivities\\FetchAListOfBusinessActivitesRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\AccountGroups\\FetchAListOfAccountGroupsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Titles\\FetchATitleRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\PagebreakPositions\\EditAPagebreakPositionRequestTest::__pest_evaluable_it_can_edit_a_pagebreak_position":0.001,"P\\Tests\\Requests\\ItemPositions\\DeleteAnItemPositionRequestTest::__pest_evaluable_it_can_delete_an_item_position":0.001,"P\\Tests\\Requests\\ContactAdditionalAddresses\\FetchAContactAdditionalAddressRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\ItemPositions\\CreateAnItemPositionRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\BusinessYears\\FetchAListOfBusinessYearsRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Contacts\\CreateContactRequestTest::__pest_evaluable_it_can_perform_the_request":0.001,"P\\Tests\\Requests\\Files\\CreateAFileRequestTest::__pest_evaluable_it_can_perform_the_request":0.003,"P\\Tests\\Core\\ArchTest::__pest_evaluable_it_will_not_use_any_debug_function":0.276,"P\\Tests\\Requests\\Salutations\\FetchASalutationRequestTest::__pest_evaluable_it_can_perform_the_request":0,"P\\Tests\\Requests\\TextPositions\\FetchAListOfTextPositionsRequestTest::__pest_evaluable_it_can_perform_the_request":0}} \ No newline at end of file diff --git a/src/Dto/DefaultPositions/AddDefaultPositionDTO.php b/src/Dto/DefaultPositions/AddDefaultPositionDTO.php new file mode 100644 index 0000000..7c85d4d --- /dev/null +++ b/src/Dto/DefaultPositions/AddDefaultPositionDTO.php @@ -0,0 +1,43 @@ +failed()) { + throw new Exception('Failed to create DTO from Response'); + } + $data = $response->json(); + + return self::fromArray($data); + } + + public static function fromArray(array $data): self + { + if (! $data) { + throw new Exception('Unable to create DTO. Data missing from response.'); + } + + return new self( + id: Arr::get($data, 'id'), + amount: Arr::get($data, 'amount'), + unit_id: Arr::get($data, 'unit_id'), + unit_name: Arr::get($data, 'unit_name'), + account_id: Arr::get($data, 'account_id'), + tax_id: Arr::get($data, 'tax_id'), + tax_value: Arr::get($data, 'tax_value'), + text: Arr::get($data, 'text'), + unit_price: Arr::get($data, 'unit_price'), + discount_in_percent: Arr::get($data, 'discount_in_percent'), + position_total: Arr::get($data, 'position_total'), + parent_id: Arr::get($data, 'parent_id'), + type: Arr::get($data, 'type', 'KbPositionCustom'), + pos: Arr::get($data, 'pos'), + internal_pos: Arr::get($data, 'internal_pos'), + is_optional: Arr::get($data, 'is_optional'), + ); + } +} diff --git a/src/Dto/DiscountPositions/AddDiscountPositionDTO.php b/src/Dto/DiscountPositions/AddDiscountPositionDTO.php new file mode 100644 index 0000000..6766c51 --- /dev/null +++ b/src/Dto/DiscountPositions/AddDiscountPositionDTO.php @@ -0,0 +1,35 @@ +failed()) { + throw new Exception('Failed to create DTO from Response'); + } + $data = $response->json(); + + return self::fromArray($data); + } + + public static function fromArray(array $data): self + { + if (! $data) { + throw new Exception('Unable to create DTO. Data missing from response.'); + } + + return new self( + id: Arr::get($data, 'id'), + text: Arr::get($data, 'text'), + is_percentual: Arr::get($data, 'is_percentual'), + value: Arr::get($data, 'value'), + discount_total: Arr::get($data, 'discount_total'), + type: Arr::get($data, 'type', 'KbPositionDiscount'), + ); + } +} diff --git a/src/Dto/Invoices/CreateInvoiceDTO.php b/src/Dto/Invoices/CreateInvoiceDTO.php new file mode 100644 index 0000000..8f09e13 --- /dev/null +++ b/src/Dto/Invoices/CreateInvoiceDTO.php @@ -0,0 +1,74 @@ +failed()) { + throw new Exception('Failed to create DTO from Response'); + } + $data = $response->json(); + + return self::fromArray($data); + } + + public static function fromArray(array $data): self + { + if (! $data) { + throw new Exception('Unable to create DTO. Data missing from response.'); + } + + return new self( + id: Arr::get($data, 'id'), + amount: Arr::get($data, 'amount'), + unit_id: Arr::get($data, 'unit_id'), + unit_name: Arr::get($data, 'unit_name'), + account_id: Arr::get($data, 'account_id'), + tax_id: Arr::get($data, 'tax_id'), + tax_value: Arr::get($data, 'tax_value'), + text: Arr::get($data, 'text'), + unit_price: Arr::get($data, 'unit_price'), + discount_in_percent: Arr::get($data, 'discount_in_percent'), + position_total: Arr::get($data, 'position_total'), + parent_id: Arr::get($data, 'parent_id'), + article_id: Arr::get($data, 'article_id'), + type: Arr::get($data, 'type', 'KbPositionArticle'), + pos: Arr::get($data, 'pos'), + internal_pos: Arr::get($data, 'internal_pos'), + is_optional: Arr::get($data, 'is_optional'), + ); + } +} diff --git a/src/Dto/PagebreakPositions/AddPagebreakPositionDTO.php b/src/Dto/PagebreakPositions/AddPagebreakPositionDTO.php new file mode 100644 index 0000000..db1acae --- /dev/null +++ b/src/Dto/PagebreakPositions/AddPagebreakPositionDTO.php @@ -0,0 +1,32 @@ +failed()) { + throw new Exception('Failed to create DTO from Response'); + } + $data = $response->json(); + + return self::fromArray($data); + } + + public static function fromArray(array $data): self + { + if (! $data) { + throw new Exception('Unable to create DTO. Data missing from response.'); + } + + return new self( + id: Arr::get($data, 'id'), + internal_pos: Arr::get($data, 'internal_pos'), + is_optional: Arr::get($data, 'is_optional'), + type: Arr::get($data, 'type', 'KbPositionPagebreak'), + parent_id: Arr::get($data, 'parent_id'), + ); + } +} diff --git a/src/Dto/SubPositions/CreateEditSubPositionDTO.php b/src/Dto/SubPositions/CreateEditSubPositionDTO.php new file mode 100644 index 0000000..39439bf --- /dev/null +++ b/src/Dto/SubPositions/CreateEditSubPositionDTO.php @@ -0,0 +1,31 @@ +failed()) { + throw new Exception('Failed to create DTO from Response'); + } + $data = $response->json(); + + return self::fromArray($data); + } + + public static function fromArray(array $data): self + { + if (! $data) { + throw new Exception('Unable to create DTO. Data missing from response.'); + } + + return new self( + id: Arr::get($data, 'id'), + text: Arr::get($data, 'text'), + pos: Arr::get($data, 'pos'), + internal_pos: Arr::get($data, 'internal_pos'), + show_pos_nr: Arr::get($data, 'show_pos_nr'), + is_optional: Arr::get($data, 'is_optional'), + total_sum: Arr::get($data, 'total_sum'), + show_pos_prices: Arr::get($data, 'show_pos_prices'), + type: Arr::get($data, 'type', 'KbPositionSubposition'), + parent_id: Arr::get($data, 'parent_id'), + ); + } +} diff --git a/src/Dto/SubtotalPositions/AddSubtotalPositionDTO.php b/src/Dto/SubtotalPositions/AddSubtotalPositionDTO.php new file mode 100644 index 0000000..fd7ce53 --- /dev/null +++ b/src/Dto/SubtotalPositions/AddSubtotalPositionDTO.php @@ -0,0 +1,31 @@ +failed()) { + throw new Exception('Failed to create DTO from Response'); + } + $data = $response->json(); + + return self::fromArray($data); + } + + public static function fromArray(array $data): self + { + if (! $data) { + throw new Exception('Unable to create DTO. Data missing from response.'); + } + + return new self( + id: Arr::get($data, 'id'), + text: Arr::get($data, 'text'), + value: Arr::get($data, 'value'), + internal_pos: Arr::get($data, 'internal_pos'), + is_optional: Arr::get($data, 'is_optional'), + type: Arr::get($data, 'type', 'KbPositionSubtotal'), + parent_id: Arr::get($data, 'parent_id'), + ); + } +} diff --git a/src/Dto/TextPositions/AddTextPositionDTO.php b/src/Dto/TextPositions/AddTextPositionDTO.php new file mode 100644 index 0000000..9de60bb --- /dev/null +++ b/src/Dto/TextPositions/AddTextPositionDTO.php @@ -0,0 +1,33 @@ +failed()) { + throw new Exception('Failed to create DTO from Response'); + } + $data = $response->json(); + + return self::fromArray($data); + } + + public static function fromArray(array $data): self + { + if (! $data) { + throw new Exception('Unable to create DTO. Data missing from response.'); + } + + return new self( + id: Arr::get($data, 'id'), + text: Arr::get($data, 'text'), + show_pos_nr: Arr::get($data, 'show_pos_nr'), + pos: Arr::get($data, 'pos'), + internal_pos: Arr::get($data, 'internal_pos'), + is_optional: Arr::get($data, 'is_optional'), + type: Arr::get($data, 'type', 'KbPositionText'), + parent_id: Arr::get($data, 'parent_id'), + ); + } +} diff --git a/src/Requests/DefaultPositions/CreateADefaultPositionRequest.php b/src/Requests/DefaultPositions/CreateADefaultPositionRequest.php new file mode 100644 index 0000000..31198ce --- /dev/null +++ b/src/Requests/DefaultPositions/CreateADefaultPositionRequest.php @@ -0,0 +1,50 @@ +kbDocumentType}/{$this->documentId}/kb_position_custom"; + } + + public function defaultBody(): array + { + $body = $this->position; + + if (! $body instanceof CreateEditDefaultPositionDTO) { + $body = CreateEditDefaultPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): DefaultPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return DefaultPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/DefaultPositions/DeleteADefaultPositionRequest.php b/src/Requests/DefaultPositions/DeleteADefaultPositionRequest.php new file mode 100644 index 0000000..7bdcd80 --- /dev/null +++ b/src/Requests/DefaultPositions/DeleteADefaultPositionRequest.php @@ -0,0 +1,33 @@ +kbDocumentType}/{$this->documentId}/kb_position_custom/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): mixed + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return $response->json(); + } +} diff --git a/src/Requests/DefaultPositions/EditADefaultPositionRequest.php b/src/Requests/DefaultPositions/EditADefaultPositionRequest.php new file mode 100644 index 0000000..fdc1a08 --- /dev/null +++ b/src/Requests/DefaultPositions/EditADefaultPositionRequest.php @@ -0,0 +1,51 @@ +kbDocumentType}/{$this->documentId}/kb_position_custom/{$this->positionId}"; + } + + public function defaultBody(): array + { + $body = $this->position; + + if (! $body instanceof CreateEditDefaultPositionDTO) { + $body = CreateEditDefaultPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): DefaultPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return DefaultPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/DefaultPositions/FetchADefaultPositionRequest.php b/src/Requests/DefaultPositions/FetchADefaultPositionRequest.php new file mode 100644 index 0000000..73d635e --- /dev/null +++ b/src/Requests/DefaultPositions/FetchADefaultPositionRequest.php @@ -0,0 +1,34 @@ +kbDocumentType}/{$this->documentId}/kb_position_custom/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): DefaultPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return DefaultPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/DefaultPositions/FetchAListOfDefaultPositionsRequest.php b/src/Requests/DefaultPositions/FetchAListOfDefaultPositionsRequest.php new file mode 100644 index 0000000..7cc113b --- /dev/null +++ b/src/Requests/DefaultPositions/FetchAListOfDefaultPositionsRequest.php @@ -0,0 +1,52 @@ +kbDocumentType}/{$this->documentId}/kb_position_custom"; + } + + public function defaultQuery(): array + { + return [ + 'limit' => $this->limit, + 'offset' => $this->offset, + ]; + } + + public function createDtoFromResponse(Response $response): Collection + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + $res = $response->json(); + + $positions = collect(); + + foreach ($res as $position) { + $positions->push(DefaultPositionDTO::fromArray($position)); + } + + return $positions; + } +} diff --git a/src/Requests/DiscountPositions/CreateADiscountPositionRequest.php b/src/Requests/DiscountPositions/CreateADiscountPositionRequest.php new file mode 100644 index 0000000..23be81a --- /dev/null +++ b/src/Requests/DiscountPositions/CreateADiscountPositionRequest.php @@ -0,0 +1,49 @@ +kbDocumentType}/{$this->documentId}/kb_position_discount"; + } + + protected function defaultBody(): array + { + $body = $this->position; + if (! $body instanceof CreateEditDiscountPositionDTO) { + $body = CreateEditDiscountPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): DiscountPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return DiscountPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/DiscountPositions/DeleteADiscountPositionRequest.php b/src/Requests/DiscountPositions/DeleteADiscountPositionRequest.php new file mode 100644 index 0000000..fd79fce --- /dev/null +++ b/src/Requests/DiscountPositions/DeleteADiscountPositionRequest.php @@ -0,0 +1,33 @@ +kbDocumentType}/{$this->documentId}/kb_position_discount/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): mixed + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return $response->json(); + } +} diff --git a/src/Requests/DiscountPositions/EditADiscountPositionRequest.php b/src/Requests/DiscountPositions/EditADiscountPositionRequest.php new file mode 100644 index 0000000..a4565a8 --- /dev/null +++ b/src/Requests/DiscountPositions/EditADiscountPositionRequest.php @@ -0,0 +1,50 @@ +kbDocumentType}/{$this->documentId}/kb_position_discount/{$this->positionId}"; + } + + protected function defaultBody(): array + { + $body = $this->position; + if (! $body instanceof CreateEditDiscountPositionDTO) { + $body = CreateEditDiscountPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): DiscountPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return DiscountPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/DiscountPositions/FetchADiscountPositionRequest.php b/src/Requests/DiscountPositions/FetchADiscountPositionRequest.php new file mode 100644 index 0000000..df56838 --- /dev/null +++ b/src/Requests/DiscountPositions/FetchADiscountPositionRequest.php @@ -0,0 +1,34 @@ +kbDocumentType}/{$this->documentId}/kb_position_discount/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): DiscountPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return DiscountPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/DiscountPositions/FetchAListOfDiscountPositionsRequest.php b/src/Requests/DiscountPositions/FetchAListOfDiscountPositionsRequest.php new file mode 100644 index 0000000..4421897 --- /dev/null +++ b/src/Requests/DiscountPositions/FetchAListOfDiscountPositionsRequest.php @@ -0,0 +1,49 @@ +kbDocumentType}/{$this->documentId}/kb_position_discount"; + } + + public function defaultQuery(): array + { + return [ + 'limit' => $this->limit, + 'offset' => $this->offset, + ]; + } + + public function createDtoFromResponse(Response $response): Collection + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + $res = $response->json(); + $positions = collect(); + foreach ($res as $position) { + $positions->push(DiscountPositionDTO::fromArray($position)); + } + + return $positions; + } +} diff --git a/src/Requests/Invoices/CreateAnInvoiceRequestNew.php b/src/Requests/Invoices/CreateAnInvoiceRequestNew.php new file mode 100644 index 0000000..00b27d3 --- /dev/null +++ b/src/Requests/Invoices/CreateAnInvoiceRequestNew.php @@ -0,0 +1,56 @@ +invoice; + if (! $body instanceof CreateInvoiceDTO) { + $body = CreateInvoiceDTO::fromArray($body); + } + + // Filter out all null values so Bexio does not see e.g. document_nr if null + return array_filter($body->toArray(), fn ($v) => $v !== null); + } + + public function createDtoFromResponse(Response $response): InvoiceDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + $res = $response->json(); + + return InvoiceDTO::fromArray($res); + } +} diff --git a/src/Requests/Invoices/EditAnInvoiceRequestNew.php b/src/Requests/Invoices/EditAnInvoiceRequestNew.php new file mode 100644 index 0000000..5fdced2 --- /dev/null +++ b/src/Requests/Invoices/EditAnInvoiceRequestNew.php @@ -0,0 +1,50 @@ +invoice_id}"; + } + + public function defaultBody(): array + { + $body = $this->invoice; + if (! $body instanceof EditInvoiceDTO) { + $body = EditInvoiceDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): InvoiceDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + $res = $response->json(); + + return InvoiceDTO::fromArray($res); + } +} diff --git a/src/Requests/Invoices/MarkAnInvoiceAsSentRequest.php b/src/Requests/Invoices/MarkAnInvoiceAsSentRequest.php new file mode 100644 index 0000000..7ee25bb --- /dev/null +++ b/src/Requests/Invoices/MarkAnInvoiceAsSentRequest.php @@ -0,0 +1,31 @@ +invoice_id}/mark_as_sent"; + } + + public function createDtoFromResponse(Response $response): mixed + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return $response->json(); + } +} diff --git a/src/Requests/Invoices/SendAnInvoiceRequest.php b/src/Requests/Invoices/SendAnInvoiceRequest.php new file mode 100644 index 0000000..9e040d3 --- /dev/null +++ b/src/Requests/Invoices/SendAnInvoiceRequest.php @@ -0,0 +1,51 @@ +invoice_id}/send"; + } + + protected function defaultBody(): array + { + $body = $this->invoice; + if (! $body instanceof SendInvoiceDTO) { + $body = SendInvoiceDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): mixed + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return $response->json(); + } +} diff --git a/src/Requests/ItemPositions/CreateAnItemPositionRequest.php b/src/Requests/ItemPositions/CreateAnItemPositionRequest.php new file mode 100644 index 0000000..d7b8baa --- /dev/null +++ b/src/Requests/ItemPositions/CreateAnItemPositionRequest.php @@ -0,0 +1,50 @@ +kbDocumentType}/{$this->documentId}/kb_position_article"; + } + + protected function defaultBody(): array + { + $body = $this->position; + + if (! $body instanceof CreateItemPositionDTO) { + $body = CreateItemPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): ItemPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return ItemPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/ItemPositions/DeleteAnItemPositionRequest.php b/src/Requests/ItemPositions/DeleteAnItemPositionRequest.php new file mode 100644 index 0000000..6838bb7 --- /dev/null +++ b/src/Requests/ItemPositions/DeleteAnItemPositionRequest.php @@ -0,0 +1,33 @@ +kbDocumentType}/{$this->documentId}/kb_position_article/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): mixed + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return $response->json(); + } +} diff --git a/src/Requests/ItemPositions/EditAnItemPositionRequest.php b/src/Requests/ItemPositions/EditAnItemPositionRequest.php new file mode 100644 index 0000000..e8fd604 --- /dev/null +++ b/src/Requests/ItemPositions/EditAnItemPositionRequest.php @@ -0,0 +1,51 @@ +kbDocumentType}/{$this->documentId}/kb_position_article/{$this->positionId}"; + } + + protected function defaultBody(): array + { + $body = $this->position; + + if (! $body instanceof EditItemPositionDTO) { + $body = EditItemPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): ItemPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return ItemPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/ItemPositions/FetchAListOfItemPositionsRequest.php b/src/Requests/ItemPositions/FetchAListOfItemPositionsRequest.php new file mode 100644 index 0000000..e7b77ac --- /dev/null +++ b/src/Requests/ItemPositions/FetchAListOfItemPositionsRequest.php @@ -0,0 +1,49 @@ +kbDocumentType}/{$this->documentId}/kb_position_article"; + } + + public function defaultQuery(): array + { + return [ + 'limit' => $this->limit, + 'offset' => $this->offset, + ]; + } + + public function createDtoFromResponse(Response $response): Collection + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + $res = $response->json(); + $positions = collect(); + foreach ($res as $position) { + $positions->push(ItemPositionDTO::fromArray($position)); + } + + return $positions; + } +} diff --git a/src/Requests/ItemPositions/FetchAnItemPositionRequest.php b/src/Requests/ItemPositions/FetchAnItemPositionRequest.php new file mode 100644 index 0000000..6cfa259 --- /dev/null +++ b/src/Requests/ItemPositions/FetchAnItemPositionRequest.php @@ -0,0 +1,34 @@ +kbDocumentType}/{$this->documentId}/kb_position_article/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): ItemPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return ItemPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/PagebreakPositions/CreateAPagebreakPositionRequest.php b/src/Requests/PagebreakPositions/CreateAPagebreakPositionRequest.php new file mode 100644 index 0000000..e7962ad --- /dev/null +++ b/src/Requests/PagebreakPositions/CreateAPagebreakPositionRequest.php @@ -0,0 +1,49 @@ +kbDocumentType}/{$this->documentId}/kb_position_pagebreak"; + } + + protected function defaultBody(): array + { + $body = $this->position; + if (! $body instanceof CreateEditPagebreakPositionDTO) { + $body = CreateEditPagebreakPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): PagebreakPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return PagebreakPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/PagebreakPositions/DeleteAPagebreakPositionRequest.php b/src/Requests/PagebreakPositions/DeleteAPagebreakPositionRequest.php new file mode 100644 index 0000000..b6a74f9 --- /dev/null +++ b/src/Requests/PagebreakPositions/DeleteAPagebreakPositionRequest.php @@ -0,0 +1,33 @@ +kbDocumentType}/{$this->documentId}/kb_position_pagebreak/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): mixed + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return $response->json(); + } +} diff --git a/src/Requests/PagebreakPositions/EditAPagebreakPositionRequest.php b/src/Requests/PagebreakPositions/EditAPagebreakPositionRequest.php new file mode 100644 index 0000000..4328a78 --- /dev/null +++ b/src/Requests/PagebreakPositions/EditAPagebreakPositionRequest.php @@ -0,0 +1,50 @@ +kbDocumentType}/{$this->documentId}/kb_position_pagebreak/{$this->positionId}"; + } + + protected function defaultBody(): array + { + $body = $this->position; + if (! $body instanceof CreateEditPagebreakPositionDTO) { + $body = CreateEditPagebreakPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): PagebreakPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return PagebreakPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/PagebreakPositions/FetchAListOfPagebreakPositionsRequest.php b/src/Requests/PagebreakPositions/FetchAListOfPagebreakPositionsRequest.php new file mode 100644 index 0000000..2e9b6e3 --- /dev/null +++ b/src/Requests/PagebreakPositions/FetchAListOfPagebreakPositionsRequest.php @@ -0,0 +1,49 @@ +kbDocumentType}/{$this->documentId}/kb_position_pagebreak"; + } + + public function defaultQuery(): array + { + return [ + 'limit' => $this->limit, + 'offset' => $this->offset, + ]; + } + + public function createDtoFromResponse(Response $response): Collection + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + $res = $response->json(); + $positions = collect(); + foreach ($res as $position) { + $positions->push(PagebreakPositionDTO::fromArray($position)); + } + + return $positions; + } +} diff --git a/src/Requests/PagebreakPositions/FetchAPagebreakPositionRequest.php b/src/Requests/PagebreakPositions/FetchAPagebreakPositionRequest.php new file mode 100644 index 0000000..baae86f --- /dev/null +++ b/src/Requests/PagebreakPositions/FetchAPagebreakPositionRequest.php @@ -0,0 +1,34 @@ +kbDocumentType}/{$this->documentId}/kb_position_pagebreak/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): PagebreakPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return PagebreakPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/SubPositions/CreateASubPositionRequest.php b/src/Requests/SubPositions/CreateASubPositionRequest.php new file mode 100644 index 0000000..a671b71 --- /dev/null +++ b/src/Requests/SubPositions/CreateASubPositionRequest.php @@ -0,0 +1,48 @@ +kbDocumentType}/{$this->documentId}/kb_position_subposition"; + } + + protected function defaultBody(): array + { + $body = $this->position; + if (! $body instanceof CreateEditSubPositionDTO) { + $body = CreateEditSubPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse($response): SubPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return SubPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/SubPositions/DeleteASubPositionRequest.php b/src/Requests/SubPositions/DeleteASubPositionRequest.php new file mode 100644 index 0000000..e7e0b8d --- /dev/null +++ b/src/Requests/SubPositions/DeleteASubPositionRequest.php @@ -0,0 +1,33 @@ +kbDocumentType}/{$this->documentId}/kb_position_subposition/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): mixed + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return $response->json(); + } +} diff --git a/src/Requests/SubPositions/EditASubPositionRequest.php b/src/Requests/SubPositions/EditASubPositionRequest.php new file mode 100644 index 0000000..ff827e2 --- /dev/null +++ b/src/Requests/SubPositions/EditASubPositionRequest.php @@ -0,0 +1,49 @@ +kbDocumentType}/{$this->documentId}/kb_position_subposition/{$this->positionId}"; + } + + protected function defaultBody(): array + { + $body = $this->position; + if (! $body instanceof CreateEditSubPositionDTO) { + $body = CreateEditSubPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse($response): SubPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return SubPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/SubPositions/FetchAListOfSubPositionsRequest.php b/src/Requests/SubPositions/FetchAListOfSubPositionsRequest.php new file mode 100644 index 0000000..23fe08d --- /dev/null +++ b/src/Requests/SubPositions/FetchAListOfSubPositionsRequest.php @@ -0,0 +1,49 @@ +kbDocumentType}/{$this->documentId}/kb_position_subposition"; + } + + public function defaultQuery(): array + { + return [ + 'limit' => $this->limit, + 'offset' => $this->offset, + ]; + } + + public function createDtoFromResponse(Response $response): Collection + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + $res = $response->json(); + $positions = collect(); + foreach ($res as $position) { + $positions->push(SubPositionDTO::fromArray($position)); + } + + return $positions; + } +} diff --git a/src/Requests/SubPositions/FetchASubPositionRequest.php b/src/Requests/SubPositions/FetchASubPositionRequest.php new file mode 100644 index 0000000..368d7a7 --- /dev/null +++ b/src/Requests/SubPositions/FetchASubPositionRequest.php @@ -0,0 +1,34 @@ +kbDocumentType}/{$this->documentId}/kb_position_subposition/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): SubPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return SubPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/SubtotalPositions/CreateASubtotalPositionRequest.php b/src/Requests/SubtotalPositions/CreateASubtotalPositionRequest.php new file mode 100644 index 0000000..70e65b4 --- /dev/null +++ b/src/Requests/SubtotalPositions/CreateASubtotalPositionRequest.php @@ -0,0 +1,49 @@ +kbDocumentType}/{$this->documentId}/kb_position_subtotal"; + } + + protected function defaultBody(): array + { + $body = $this->position; + if (! $body instanceof CreateEditSubtotalPositionDTO) { + $body = CreateEditSubtotalPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): SubtotalPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return SubtotalPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/SubtotalPositions/DeleteASubtotalPositionRequest.php b/src/Requests/SubtotalPositions/DeleteASubtotalPositionRequest.php new file mode 100644 index 0000000..3d3d82f --- /dev/null +++ b/src/Requests/SubtotalPositions/DeleteASubtotalPositionRequest.php @@ -0,0 +1,33 @@ +kbDocumentType}/{$this->documentId}/kb_position_subtotal/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): mixed + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return $response->json(); + } +} diff --git a/src/Requests/SubtotalPositions/EditASubtotalPositionRequest.php b/src/Requests/SubtotalPositions/EditASubtotalPositionRequest.php new file mode 100644 index 0000000..111ee0c --- /dev/null +++ b/src/Requests/SubtotalPositions/EditASubtotalPositionRequest.php @@ -0,0 +1,50 @@ +kbDocumentType}/{$this->documentId}/kb_position_subtotal/{$this->positionId}"; + } + + protected function defaultBody(): array + { + $body = $this->position; + if (! $body instanceof CreateEditSubtotalPositionDTO) { + $body = CreateEditSubtotalPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): SubtotalPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return SubtotalPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/SubtotalPositions/FetchAListOfSubtotalPositionsRequest.php b/src/Requests/SubtotalPositions/FetchAListOfSubtotalPositionsRequest.php new file mode 100644 index 0000000..a507714 --- /dev/null +++ b/src/Requests/SubtotalPositions/FetchAListOfSubtotalPositionsRequest.php @@ -0,0 +1,49 @@ +kbDocumentType}/{$this->documentId}/kb_position_subtotal"; + } + + public function defaultQuery(): array + { + return [ + 'limit' => $this->limit, + 'offset' => $this->offset, + ]; + } + + public function createDtoFromResponse(Response $response): Collection + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + $res = $response->json(); + $positions = collect(); + foreach ($res as $position) { + $positions->push(SubtotalPositionDTO::fromArray($position)); + } + + return $positions; + } +} diff --git a/src/Requests/SubtotalPositions/FetchASubtotalPositionRequest.php b/src/Requests/SubtotalPositions/FetchASubtotalPositionRequest.php new file mode 100644 index 0000000..6359262 --- /dev/null +++ b/src/Requests/SubtotalPositions/FetchASubtotalPositionRequest.php @@ -0,0 +1,34 @@ +kbDocumentType}/{$this->documentId}/kb_position_subtotal/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): SubtotalPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return SubtotalPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/TextPositions/CreateATextPositionRequest.php b/src/Requests/TextPositions/CreateATextPositionRequest.php new file mode 100644 index 0000000..9411b02 --- /dev/null +++ b/src/Requests/TextPositions/CreateATextPositionRequest.php @@ -0,0 +1,50 @@ +kbDocumentType}/{$this->documentId}/kb_position_text"; + } + + protected function defaultBody(): array + { + $body = $this->position; + + if (! $body instanceof CreateEditTextPositionDTO) { + $body = CreateEditTextPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): TextPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return TextPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/TextPositions/DeleteATextPositionRequest.php b/src/Requests/TextPositions/DeleteATextPositionRequest.php new file mode 100644 index 0000000..054b3c4 --- /dev/null +++ b/src/Requests/TextPositions/DeleteATextPositionRequest.php @@ -0,0 +1,33 @@ +kbDocumentType}/{$this->documentId}/kb_position_text/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): mixed + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return $response->json(); + } +} diff --git a/src/Requests/TextPositions/EditATextPositionRequest.php b/src/Requests/TextPositions/EditATextPositionRequest.php new file mode 100644 index 0000000..21e76ae --- /dev/null +++ b/src/Requests/TextPositions/EditATextPositionRequest.php @@ -0,0 +1,51 @@ +kbDocumentType}/{$this->documentId}/kb_position_text/{$this->positionId}"; + } + + protected function defaultBody(): array + { + $body = $this->position; + + if (! $body instanceof CreateEditTextPositionDTO) { + $body = CreateEditTextPositionDTO::fromArray($body); + } + + return $body->toArray(); + } + + public function createDtoFromResponse(Response $response): TextPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return TextPositionDTO::fromArray($response->json()); + } +} diff --git a/src/Requests/TextPositions/FetchAListOfTextPositionsRequest.php b/src/Requests/TextPositions/FetchAListOfTextPositionsRequest.php new file mode 100644 index 0000000..7415228 --- /dev/null +++ b/src/Requests/TextPositions/FetchAListOfTextPositionsRequest.php @@ -0,0 +1,49 @@ +kbDocumentType}/{$this->documentId}/kb_position_text"; + } + + public function defaultQuery(): array + { + return [ + 'limit' => $this->limit, + 'offset' => $this->offset, + ]; + } + + public function createDtoFromResponse(Response $response): Collection + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + $res = $response->json(); + $positions = collect(); + foreach ($res as $position) { + $positions->push(TextPositionDTO::fromArray($position)); + } + + return $positions; + } +} diff --git a/src/Requests/TextPositions/FetchATextPositionRequest.php b/src/Requests/TextPositions/FetchATextPositionRequest.php new file mode 100644 index 0000000..3d822a2 --- /dev/null +++ b/src/Requests/TextPositions/FetchATextPositionRequest.php @@ -0,0 +1,34 @@ +kbDocumentType}/{$this->documentId}/kb_position_text/{$this->positionId}"; + } + + public function createDtoFromResponse(Response $response): TextPositionDTO + { + if (! $response->successful()) { + throw new Exception('Request was not successful. Unable to create DTO.'); + } + + return TextPositionDTO::fromArray($response->json()); + } +} diff --git a/tests/Fixtures/Saloon/DefaultPositions/create-a-default-position.json b/tests/Fixtures/Saloon/DefaultPositions/create-a-default-position.json new file mode 100644 index 0000000..5bd98a8 --- /dev/null +++ b/tests/Fixtures/Saloon/DefaultPositions/create-a-default-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 201, + "headers": { + "Date": "Sat, 14 Jun 2025 14:17:59 GMT", + "Content-Type": "application\/json", + "Content-Length": "281", + "Connection": "keep-alive", + "ratelimit-remaining": "999", + "ratelimit-reset": "1", + "x-ratelimit-limit-minute": "1000", + "x-ratelimit-remaining-minute": "999", + "ratelimit-limit": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fa744f7f2beb49-CPH" + }, + "data": "{\"id\":10,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"unit_id\":1,\"account_id\":145,\"unit_name\":\"Stk\",\"tax_id\":29,\"tax_value\":\"8.10\",\"text\":\"Test position\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"4\",\"internal_pos\":4,\"parent_id\":null,\"is_optional\":false}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/DefaultPositions/delete-a-default-position.json b/tests/Fixtures/Saloon/DefaultPositions/delete-a-default-position.json new file mode 100644 index 0000000..fa3a6f6 --- /dev/null +++ b/tests/Fixtures/Saloon/DefaultPositions/delete-a-default-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 16:05:18 GMT", + "Content-Type": "application\/json", + "Content-Length": "16", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "998", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "998", + "ratelimit-reset": "43", + "ratelimit-limit": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb1181b9b72625-CPH" + }, + "data": "{\"success\":true}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/DefaultPositions/edit-a-default-position.json b/tests/Fixtures/Saloon/DefaultPositions/edit-a-default-position.json new file mode 100644 index 0000000..18ad377 --- /dev/null +++ b/tests/Fixtures/Saloon/DefaultPositions/edit-a-default-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 16:05:16 GMT", + "Content-Type": "application\/json", + "Content-Length": "281", + "Connection": "keep-alive", + "ratelimit-limit": "1000", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "999", + "x-ratelimit-remaining-minute": "999", + "ratelimit-reset": "44", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb117a7b368f62-CPH" + }, + "data": "{\"id\":10,\"type\":\"KbPositionCustom\",\"amount\":\"1\",\"unit_id\":1,\"account_id\":145,\"unit_name\":\"Stk\",\"tax_id\":29,\"tax_value\":\"8.10\",\"text\":\"Test position\",\"unit_price\":\"150\",\"discount_in_percent\":\"0\",\"position_total\":\"150\",\"pos\":\"4\",\"internal_pos\":4,\"parent_id\":null,\"is_optional\":false}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/DefaultPositions/fetch-a-default-position.json b/tests/Fixtures/Saloon/DefaultPositions/fetch-a-default-position.json new file mode 100644 index 0000000..c7048fb --- /dev/null +++ b/tests/Fixtures/Saloon/DefaultPositions/fetch-a-default-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 15:11:07 GMT", + "Content-Type": "application\/json", + "Content-Length": "306", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "998", + "ratelimit-limit": "1000", + "ratelimit-remaining": "998", + "ratelimit-reset": "54", + "x-ratelimit-limit-minute": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fac223bf7592f4-CPH" + }, + "data": "{\"id\":9,\"type\":\"KbPositionCustom\",\"amount\":\"1.000000\",\"unit_id\":1,\"account_id\":145,\"unit_name\":\"Stk\",\"tax_id\":29,\"tax_value\":\"8.10\",\"text\":\"Test position\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"3\",\"internal_pos\":3,\"parent_id\":null,\"is_optional\":false}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/DefaultPositions/fetch-a-list-of-default-positions.json b/tests/Fixtures/Saloon/DefaultPositions/fetch-a-list-of-default-positions.json new file mode 100644 index 0000000..f8ccb24 --- /dev/null +++ b/tests/Fixtures/Saloon/DefaultPositions/fetch-a-list-of-default-positions.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 16:12:29 GMT", + "Content-Type": "application\/json", + "Content-Length": "616", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "999", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "999", + "ratelimit-reset": "32", + "ratelimit-limit": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb1c07deb9be4c-CPH" + }, + "data": "[{\"id\":9,\"type\":\"KbPositionCustom\",\"amount\":\"1.000000\",\"unit_id\":1,\"account_id\":145,\"unit_name\":\"Stk\",\"tax_id\":29,\"tax_value\":\"8.10\",\"text\":\"Test position\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"2\",\"internal_pos\":2,\"parent_id\":null,\"is_optional\":false},{\"id\":10,\"type\":\"KbPositionCustom\",\"amount\":\"1.000000\",\"unit_id\":1,\"account_id\":145,\"unit_name\":\"Stk\",\"tax_id\":29,\"tax_value\":\"8.10\",\"text\":\"Test position\",\"unit_price\":\"150.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"150.000000\",\"pos\":\"3\",\"internal_pos\":3,\"parent_id\":null,\"is_optional\":false}]", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/DiscountPositions/create-a-discount-position.json b/tests/Fixtures/Saloon/DiscountPositions/create-a-discount-position.json new file mode 100644 index 0000000..242efa7 --- /dev/null +++ b/tests/Fixtures/Saloon/DiscountPositions/create-a-discount-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 201, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:52 GMT", + "Content-Type": "application\/json", + "Content-Length": "128", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "988", + "ratelimit-limit": "1000", + "ratelimit-remaining": "988", + "ratelimit-reset": "8", + "x-ratelimit-limit-minute": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6ea3b90d92b2-CPH" + }, + "data": "{\"id\":4,\"type\":\"KbPositionDiscount\",\"text\":\"Test discount position\",\"is_percentual\":true,\"value\":\"10\",\"discount_total\":\"56.133\"}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/DiscountPositions/delete-a-discount-position.json b/tests/Fixtures/Saloon/DiscountPositions/delete-a-discount-position.json new file mode 100644 index 0000000..03112d3 --- /dev/null +++ b/tests/Fixtures/Saloon/DiscountPositions/delete-a-discount-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:09:04 GMT", + "Content-Type": "application\/json", + "Content-Length": "16", + "Connection": "keep-alive", + "ratelimit-limit": "1000", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "992", + "x-ratelimit-remaining-minute": "992", + "ratelimit-reset": "57", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6eeb0bb3a0c8-CPH" + }, + "data": "{\"success\":true}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/DiscountPositions/edit-a-discount-position.json b/tests/Fixtures/Saloon/DiscountPositions/edit-a-discount-position.json new file mode 100644 index 0000000..93a92be --- /dev/null +++ b/tests/Fixtures/Saloon/DiscountPositions/edit-a-discount-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:58 GMT", + "Content-Type": "application\/json", + "Content-Length": "125", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "981", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "981", + "ratelimit-reset": "2", + "ratelimit-limit": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6ec9de85ebcd-CPH" + }, + "data": "{\"id\":1,\"type\":\"KbPositionDiscount\",\"text\":\"Test discount position\",\"is_percentual\":true,\"value\":\"50\",\"discount_total\":\"385\"}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/DiscountPositions/fetch-a-discount-position.json b/tests/Fixtures/Saloon/DiscountPositions/fetch-a-discount-position.json new file mode 100644 index 0000000..5e9d2a6 --- /dev/null +++ b/tests/Fixtures/Saloon/DiscountPositions/fetch-a-discount-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:09:01 GMT", + "Content-Type": "application\/json", + "Content-Length": "139", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "998", + "ratelimit-limit": "1000", + "ratelimit-remaining": "998", + "ratelimit-reset": "59", + "x-ratelimit-limit-minute": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6ed97f16abda-CPH" + }, + "data": "{\"id\":1,\"type\":\"KbPositionDiscount\",\"text\":\"Test discount position\",\"is_percentual\":true,\"value\":\"50.000000\",\"discount_total\":\"335.000000\"}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/DiscountPositions/fetch-a-list-of-discount-positions.json b/tests/Fixtures/Saloon/DiscountPositions/fetch-a-list-of-discount-positions.json new file mode 100644 index 0000000..25ad5ac --- /dev/null +++ b/tests/Fixtures/Saloon/DiscountPositions/fetch-a-list-of-discount-positions.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:55 GMT", + "Content-Type": "application\/json", + "Content-Length": "279", + "Connection": "keep-alive", + "ratelimit-limit": "1000", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "985", + "x-ratelimit-remaining-minute": "985", + "ratelimit-reset": "5", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6eb71c59ebcd-CPH" + }, + "data": "[{\"id\":1,\"type\":\"KbPositionDiscount\",\"text\":\"Test discount position\",\"is_percentual\":true,\"value\":\"10.000000\",\"discount_total\":\"77.000000\"},{\"id\":2,\"type\":\"KbPositionDiscount\",\"text\":\"Test discount position\",\"is_percentual\":true,\"value\":\"10.000000\",\"discount_total\":\"69.300000\"}]", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/ItemPositions/create-an-item-position.json b/tests/Fixtures/Saloon/ItemPositions/create-an-item-position.json new file mode 100644 index 0000000..e016e5a --- /dev/null +++ b/tests/Fixtures/Saloon/ItemPositions/create-an-item-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 201, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:46 GMT", + "Content-Type": "application\/json", + "Content-Length": "303", + "Connection": "keep-alive", + "ratelimit-limit": "1000", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "996", + "x-ratelimit-remaining-minute": "996", + "ratelimit-reset": "14", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6e7c3e58ebc8-CPH" + }, + "data": "{\"id\":5,\"type\":\"KbPositionArticle\",\"amount\":\"1\",\"unit_id\":1,\"account_id\":145,\"unit_name\":\"Stk\",\"tax_id\":29,\"tax_value\":\"8.10\",\"text\":\"Test item position\",\"unit_price\":\"110\",\"discount_in_percent\":\"0\",\"position_total\":\"110\",\"pos\":\"14\",\"internal_pos\":20,\"parent_id\":null,\"is_optional\":false,\"article_id\":1}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/ItemPositions/delete-an-item-position.json b/tests/Fixtures/Saloon/ItemPositions/delete-an-item-position.json new file mode 100644 index 0000000..020e2b9 --- /dev/null +++ b/tests/Fixtures/Saloon/ItemPositions/delete-an-item-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:59 GMT", + "Content-Type": "application\/json", + "Content-Length": "16", + "Connection": "keep-alive", + "x-ratelimit-limit-minute": "1000", + "ratelimit-reset": "1", + "x-ratelimit-remaining-minute": "979", + "ratelimit-limit": "1000", + "ratelimit-remaining": "979", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6ecfba38930a-CPH" + }, + "data": "{\"success\":true}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/ItemPositions/edit-an-item-position.json b/tests/Fixtures/Saloon/ItemPositions/edit-an-item-position.json new file mode 100644 index 0000000..8e12571 --- /dev/null +++ b/tests/Fixtures/Saloon/ItemPositions/edit-an-item-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:22:15 GMT", + "Content-Type": "application\/json", + "Content-Length": "308", + "Connection": "keep-alive", + "x-ratelimit-limit-minute": "1000", + "ratelimit-reset": "45", + "x-ratelimit-remaining-minute": "999", + "ratelimit-limit": "1000", + "ratelimit-remaining": "999", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb823b2d47f3b6-CPH" + }, + "data": "{\"id\":1,\"type\":\"KbPositionArticle\",\"amount\":\"1\",\"unit_id\":1,\"account_id\":145,\"unit_name\":\"Stk\",\"tax_id\":29,\"tax_value\":\"8.10\",\"text\":\"Test edited item position\",\"unit_price\":\"100\",\"discount_in_percent\":\"0\",\"position_total\":\"100\",\"pos\":\"4\",\"internal_pos\":4,\"parent_id\":null,\"is_optional\":false,\"article_id\":1}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/ItemPositions/fetch-a-list-of-item-positions.json b/tests/Fixtures/Saloon/ItemPositions/fetch-a-list-of-item-positions.json new file mode 100644 index 0000000..28e15cb --- /dev/null +++ b/tests/Fixtures/Saloon/ItemPositions/fetch-a-list-of-item-positions.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:49 GMT", + "Content-Type": "application\/json", + "Content-Length": "657", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "991", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "991", + "ratelimit-reset": "11", + "ratelimit-limit": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6e901bdbebc9-CPH" + }, + "data": "[{\"id\":1,\"type\":\"KbPositionArticle\",\"amount\":\"1.000000\",\"unit_id\":1,\"account_id\":145,\"unit_name\":\"Stk\",\"tax_id\":29,\"tax_value\":\"8.10\",\"text\":\"Test item position\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"4\",\"internal_pos\":4,\"parent_id\":null,\"is_optional\":false,\"article_id\":1},{\"id\":2,\"type\":\"KbPositionArticle\",\"amount\":\"1.000000\",\"unit_id\":1,\"account_id\":145,\"unit_name\":\"Stk\",\"tax_id\":29,\"tax_value\":\"8.10\",\"text\":\"Test item position\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"5\",\"internal_pos\":5,\"parent_id\":null,\"is_optional\":false,\"article_id\":1}]", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/ItemPositions/fetch-an-item-position.json b/tests/Fixtures/Saloon/ItemPositions/fetch-an-item-position.json new file mode 100644 index 0000000..4890bef --- /dev/null +++ b/tests/Fixtures/Saloon/ItemPositions/fetch-an-item-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:22:16 GMT", + "Content-Type": "application\/json", + "Content-Length": "334", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "998", + "ratelimit-limit": "1000", + "ratelimit-remaining": "998", + "ratelimit-reset": "44", + "x-ratelimit-limit-minute": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb824189f8930c-CPH" + }, + "data": "{\"id\":1,\"type\":\"KbPositionArticle\",\"amount\":\"1.000000\",\"unit_id\":1,\"account_id\":145,\"unit_name\":\"Stk\",\"tax_id\":29,\"tax_value\":\"8.10\",\"text\":\"Test edited item position\",\"unit_price\":\"100.000000\",\"discount_in_percent\":\"0.0000\",\"position_total\":\"100.000000\",\"pos\":\"4\",\"internal_pos\":4,\"parent_id\":null,\"is_optional\":false,\"article_id\":1}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/PagebreakPositions/create-a-pagebreak-position.json b/tests/Fixtures/Saloon/PagebreakPositions/create-a-pagebreak-position.json new file mode 100644 index 0000000..bdca8dd --- /dev/null +++ b/tests/Fixtures/Saloon/PagebreakPositions/create-a-pagebreak-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 201, + "headers": { + "Date": "Sat, 14 Jun 2025 17:09:03 GMT", + "Content-Type": "application\/json", + "Content-Length": "92", + "Connection": "keep-alive", + "ratelimit-remaining": "994", + "ratelimit-reset": "57", + "x-ratelimit-limit-minute": "1000", + "x-ratelimit-remaining-minute": "994", + "ratelimit-limit": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6ee65cb6eb4a-CPH" + }, + "data": "{\"id\":4,\"type\":\"KbPositionPagebreak\",\"internal_pos\":20,\"parent_id\":null,\"is_optional\":false}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/PagebreakPositions/delete-a-pagebreak-position.json b/tests/Fixtures/Saloon/PagebreakPositions/delete-a-pagebreak-position.json new file mode 100644 index 0000000..115707e --- /dev/null +++ b/tests/Fixtures/Saloon/PagebreakPositions/delete-a-pagebreak-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:47 GMT", + "Content-Type": "application\/json", + "Content-Length": "16", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "994", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "994", + "ratelimit-reset": "13", + "ratelimit-limit": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6e82bce8eb52-CPH" + }, + "data": "{\"success\":true}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/PagebreakPositions/edit-a-pagebreak-position.json b/tests/Fixtures/Saloon/PagebreakPositions/edit-a-pagebreak-position.json new file mode 100644 index 0000000..a8e9cfc --- /dev/null +++ b/tests/Fixtures/Saloon/PagebreakPositions/edit-a-pagebreak-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:09:03 GMT", + "Content-Type": "application\/json", + "Content-Length": "91", + "Connection": "keep-alive", + "x-ratelimit-limit-minute": "1000", + "ratelimit-reset": "57", + "x-ratelimit-remaining-minute": "993", + "ratelimit-limit": "1000", + "ratelimit-remaining": "993", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6ee91cd62533-CPH" + }, + "data": "{\"id\":1,\"type\":\"KbPositionPagebreak\",\"internal_pos\":8,\"parent_id\":null,\"is_optional\":false}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/PagebreakPositions/fetch-a-list-of-pagebreak-positions.json b/tests/Fixtures/Saloon/PagebreakPositions/fetch-a-list-of-pagebreak-positions.json new file mode 100644 index 0000000..1d13c1f --- /dev/null +++ b/tests/Fixtures/Saloon/PagebreakPositions/fetch-a-list-of-pagebreak-positions.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:09:04 GMT", + "Content-Type": "application\/json", + "Content-Length": "186", + "Connection": "keep-alive", + "ratelimit-limit": "1000", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "991", + "x-ratelimit-remaining-minute": "991", + "ratelimit-reset": "56", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6eee0f252c6c-CPH" + }, + "data": "[{\"id\":1,\"type\":\"KbPositionPagebreak\",\"internal_pos\":8,\"parent_id\":null,\"is_optional\":false},{\"id\":3,\"type\":\"KbPositionPagebreak\",\"internal_pos\":10,\"parent_id\":null,\"is_optional\":false}]", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/PagebreakPositions/fetch-a-pagebreak-position.json b/tests/Fixtures/Saloon/PagebreakPositions/fetch-a-pagebreak-position.json new file mode 100644 index 0000000..9abfe7b --- /dev/null +++ b/tests/Fixtures/Saloon/PagebreakPositions/fetch-a-pagebreak-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:26:59 GMT", + "Content-Type": "application\/json", + "Content-Length": "91", + "Connection": "keep-alive", + "x-ratelimit-limit-minute": "1000", + "ratelimit-reset": "1", + "x-ratelimit-remaining-minute": "998", + "ratelimit-limit": "1000", + "ratelimit-remaining": "998", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb892d6dcfebc9-CPH" + }, + "data": "{\"id\":1,\"type\":\"KbPositionPagebreak\",\"internal_pos\":7,\"parent_id\":null,\"is_optional\":false}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/SubPositions/create-a-sub-position.json b/tests/Fixtures/Saloon/SubPositions/create-a-sub-position.json new file mode 100644 index 0000000..cc6a087 --- /dev/null +++ b/tests/Fixtures/Saloon/SubPositions/create-a-sub-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 201, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:57 GMT", + "Content-Type": "application\/json", + "Content-Length": "190", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "982", + "ratelimit-limit": "1000", + "ratelimit-remaining": "982", + "ratelimit-reset": "3", + "x-ratelimit-limit-minute": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6ec2d83592a9-CPH" + }, + "data": "{\"id\":4,\"type\":\"KbPositionSubposition\",\"text\":\"Test sub position\",\"pos\":\"14\",\"internal_pos\":19,\"show_pos_nr\":true,\"parent_id\":null,\"is_optional\":false,\"total_sum\":\"0\",\"show_pos_prices\":true}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/SubPositions/delete-a-sub-position.json b/tests/Fixtures/Saloon/SubPositions/delete-a-sub-position.json new file mode 100644 index 0000000..ca21bcb --- /dev/null +++ b/tests/Fixtures/Saloon/SubPositions/delete-a-sub-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:57 GMT", + "Content-Type": "application\/json", + "Content-Length": "16", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "983", + "ratelimit-limit": "1000", + "ratelimit-remaining": "983", + "ratelimit-reset": "4", + "x-ratelimit-limit-minute": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6ebf3bf2929a-CPH" + }, + "data": "{\"success\":true}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/SubPositions/edit-a-sub-position.json b/tests/Fixtures/Saloon/SubPositions/edit-a-sub-position.json new file mode 100644 index 0000000..644c674 --- /dev/null +++ b/tests/Fixtures/Saloon/SubPositions/edit-a-sub-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:09:02 GMT", + "Content-Type": "application\/json", + "Content-Length": "202", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "995", + "ratelimit-limit": "1000", + "ratelimit-remaining": "995", + "ratelimit-reset": "58", + "x-ratelimit-limit-minute": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6ee10e03ebc6-CPH" + }, + "data": "{\"id\":1,\"type\":\"KbPositionSubposition\",\"text\":\"Test edited sub position\",\"pos\":\"7\",\"internal_pos\":7,\"show_pos_nr\":true,\"parent_id\":null,\"is_optional\":false,\"total_sum\":\"0.000000\",\"show_pos_prices\":true}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/SubPositions/fetch-a-list-of-sub-positions.json b/tests/Fixtures/Saloon/SubPositions/fetch-a-list-of-sub-positions.json new file mode 100644 index 0000000..dbcffe7 --- /dev/null +++ b/tests/Fixtures/Saloon/SubPositions/fetch-a-list-of-sub-positions.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:50 GMT", + "Content-Type": "application\/json", + "Content-Length": "394", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "990", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "990", + "ratelimit-reset": "10", + "ratelimit-limit": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6e969e2d8f59-CPH" + }, + "data": "[{\"id\":1,\"type\":\"KbPositionSubposition\",\"text\":\"Test sub position\",\"pos\":\"8\",\"internal_pos\":8,\"show_pos_nr\":true,\"parent_id\":null,\"is_optional\":false,\"total_sum\":\"0.000000\",\"show_pos_prices\":true},{\"id\":2,\"type\":\"KbPositionSubposition\",\"text\":\"Test sub position\",\"pos\":\"9\",\"internal_pos\":10,\"show_pos_nr\":true,\"parent_id\":null,\"is_optional\":false,\"total_sum\":\"0.000000\",\"show_pos_prices\":true}]", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/SubPositions/fetch-a-sub-position.json b/tests/Fixtures/Saloon/SubPositions/fetch-a-sub-position.json new file mode 100644 index 0000000..80a22c9 --- /dev/null +++ b/tests/Fixtures/Saloon/SubPositions/fetch-a-sub-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:09:02 GMT", + "Content-Type": "application\/json", + "Content-Length": "195", + "Connection": "keep-alive", + "x-ratelimit-limit-minute": "1000", + "ratelimit-reset": "58", + "x-ratelimit-remaining-minute": "996", + "ratelimit-limit": "1000", + "ratelimit-remaining": "996", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6edf2e8b92f7-CPH" + }, + "data": "{\"id\":1,\"type\":\"KbPositionSubposition\",\"text\":\"Test sub position\",\"pos\":\"7\",\"internal_pos\":7,\"show_pos_nr\":true,\"parent_id\":null,\"is_optional\":false,\"total_sum\":\"0.000000\",\"show_pos_prices\":true}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/SubtotalPositions/create-a-subtotal-position.json b/tests/Fixtures/Saloon/SubtotalPositions/create-a-subtotal-position.json new file mode 100644 index 0000000..7410a96 --- /dev/null +++ b/tests/Fixtures/Saloon/SubtotalPositions/create-a-subtotal-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 201, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:59 GMT", + "Content-Type": "application\/json", + "Content-Length": "137", + "Connection": "keep-alive", + "ratelimit-remaining": "980", + "ratelimit-reset": "1", + "x-ratelimit-limit-minute": "1000", + "x-ratelimit-remaining-minute": "980", + "ratelimit-limit": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6eccefef92a9-CPH" + }, + "data": "{\"id\":4,\"type\":\"KbPositionSubtotal\",\"text\":\"Test subtotal position\",\"value\":\"770\",\"internal_pos\":20,\"parent_id\":null,\"is_optional\":false}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/SubtotalPositions/delete-a-subtotal-position.json b/tests/Fixtures/Saloon/SubtotalPositions/delete-a-subtotal-position.json new file mode 100644 index 0000000..7085bd6 --- /dev/null +++ b/tests/Fixtures/Saloon/SubtotalPositions/delete-a-subtotal-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:09:00 GMT", + "Content-Type": "application\/json", + "Content-Length": "16", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "999", + "x-ratelimit-limit-minute": "1000", + "ratelimit-remaining": "999", + "ratelimit-reset": "60", + "ratelimit-limit": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6ed53ca9eb55-CPH" + }, + "data": "{\"success\":true}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/SubtotalPositions/edit-a-subtotal-position.json b/tests/Fixtures/Saloon/SubtotalPositions/edit-a-subtotal-position.json new file mode 100644 index 0000000..9e9a6c4 --- /dev/null +++ b/tests/Fixtures/Saloon/SubtotalPositions/edit-a-subtotal-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:09:04 GMT", + "Content-Type": "application\/json", + "Content-Length": "151", + "Connection": "keep-alive", + "x-ratelimit-limit-minute": "1000", + "ratelimit-reset": "56", + "x-ratelimit-remaining-minute": "990", + "ratelimit-limit": "1000", + "ratelimit-remaining": "990", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6ef04eca8f60-CPH" + }, + "data": "{\"id\":1,\"type\":\"KbPositionSubtotal\",\"text\":\"Test edited subtotal position\",\"value\":\"560.000000\",\"internal_pos\":11,\"parent_id\":null,\"is_optional\":false}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/SubtotalPositions/fetch-a-list-of-subtotal-positions.json b/tests/Fixtures/Saloon/SubtotalPositions/fetch-a-list-of-subtotal-positions.json new file mode 100644 index 0000000..64a435b --- /dev/null +++ b/tests/Fixtures/Saloon/SubtotalPositions/fetch-a-list-of-subtotal-positions.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:56 GMT", + "Content-Type": "application\/json", + "Content-Length": "291", + "Connection": "keep-alive", + "ratelimit-remaining": "984", + "ratelimit-reset": "4", + "x-ratelimit-limit-minute": "1000", + "x-ratelimit-remaining-minute": "984", + "ratelimit-limit": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6eb989548f5d-CPH" + }, + "data": "[{\"id\":1,\"type\":\"KbPositionSubtotal\",\"text\":\"Test subtotal position\",\"value\":\"660.000000\",\"internal_pos\":13,\"parent_id\":null,\"is_optional\":false},{\"id\":2,\"type\":\"KbPositionSubtotal\",\"text\":\"Test subtotal position\",\"value\":\"660.000000\",\"internal_pos\":14,\"parent_id\":null,\"is_optional\":false}]", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/SubtotalPositions/fetch-a-subtotal-position.json b/tests/Fixtures/Saloon/SubtotalPositions/fetch-a-subtotal-position.json new file mode 100644 index 0000000..c6d1457 --- /dev/null +++ b/tests/Fixtures/Saloon/SubtotalPositions/fetch-a-subtotal-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:50 GMT", + "Content-Type": "application\/json", + "Content-Length": "144", + "Connection": "keep-alive", + "x-ratelimit-limit-minute": "1000", + "ratelimit-reset": "10", + "x-ratelimit-remaining-minute": "989", + "ratelimit-limit": "1000", + "ratelimit-remaining": "989", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6e98ea6b92c2-CPH" + }, + "data": "{\"id\":1,\"type\":\"KbPositionSubtotal\",\"text\":\"Test subtotal position\",\"value\":\"660.000000\",\"internal_pos\":13,\"parent_id\":null,\"is_optional\":false}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/TextPositions/create-a-text-position.json b/tests/Fixtures/Saloon/TextPositions/create-a-text-position.json new file mode 100644 index 0000000..d86322e --- /dev/null +++ b/tests/Fixtures/Saloon/TextPositions/create-a-text-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 201, + "headers": { + "Date": "Sat, 14 Jun 2025 17:09:01 GMT", + "Content-Type": "application\/json", + "Content-Length": "146", + "Connection": "keep-alive", + "x-ratelimit-limit-minute": "1000", + "ratelimit-reset": "59", + "x-ratelimit-remaining-minute": "997", + "ratelimit-limit": "1000", + "ratelimit-remaining": "997", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6edb7e1aabc6-CPH" + }, + "data": "{\"id\":11,\"type\":\"KbPositionText\",\"text\":\"Test text position\",\"show_pos_nr\":true,\"pos\":\"14\",\"internal_pos\":19,\"parent_id\":null,\"is_optional\":false}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/TextPositions/delete-a-text-position.json b/tests/Fixtures/Saloon/TextPositions/delete-a-text-position.json new file mode 100644 index 0000000..ced4f65 --- /dev/null +++ b/tests/Fixtures/Saloon/TextPositions/delete-a-text-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:24:53 GMT", + "Content-Type": "application\/json", + "Content-Length": "16", + "Connection": "keep-alive", + "ratelimit-remaining": "997", + "ratelimit-reset": "7", + "x-ratelimit-limit-minute": "1000", + "x-ratelimit-remaining-minute": "997", + "ratelimit-limit": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb861a0bce930c-CPH" + }, + "data": "{\"success\":true}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/TextPositions/edit-a-text-position.json b/tests/Fixtures/Saloon/TextPositions/edit-a-text-position.json new file mode 100644 index 0000000..2bdc58c --- /dev/null +++ b/tests/Fixtures/Saloon/TextPositions/edit-a-text-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:48 GMT", + "Content-Type": "application\/json", + "Content-Length": "150", + "Connection": "keep-alive", + "x-ratelimit-remaining-minute": "993", + "ratelimit-limit": "1000", + "ratelimit-remaining": "993", + "ratelimit-reset": "12", + "x-ratelimit-limit-minute": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6e8779ebbe3f-CPH" + }, + "data": "{\"id\":1,\"type\":\"KbPositionText\",\"text\":\"Test edited text position\",\"show_pos_nr\":true,\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/TextPositions/fetch-a-list-of-text-positions.json b/tests/Fixtures/Saloon/TextPositions/fetch-a-list-of-text-positions.json new file mode 100644 index 0000000..755e07c --- /dev/null +++ b/tests/Fixtures/Saloon/TextPositions/fetch-a-list-of-text-positions.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:09:00 GMT", + "Content-Type": "application\/json", + "Content-Length": "297", + "Connection": "keep-alive", + "ratelimit-remaining": "978", + "ratelimit-reset": "1", + "x-ratelimit-limit-minute": "1000", + "x-ratelimit-remaining-minute": "978", + "ratelimit-limit": "1000", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6ed25c7f3570-CPH" + }, + "data": "[{\"id\":1,\"type\":\"KbPositionText\",\"text\":\"Test edited text position\",\"show_pos_nr\":true,\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false},{\"id\":8,\"type\":\"KbPositionText\",\"text\":\"Test text position\",\"show_pos_nr\":true,\"pos\":\"9\",\"internal_pos\":14,\"parent_id\":null,\"is_optional\":false}]", + "context": [] +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/TextPositions/fetch-a-text-position.json b/tests/Fixtures/Saloon/TextPositions/fetch-a-text-position.json new file mode 100644 index 0000000..a8333f0 --- /dev/null +++ b/tests/Fixtures/Saloon/TextPositions/fetch-a-text-position.json @@ -0,0 +1,25 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 14 Jun 2025 17:08:48 GMT", + "Content-Type": "application\/json", + "Content-Length": "150", + "Connection": "keep-alive", + "x-ratelimit-limit-minute": "1000", + "ratelimit-reset": "12", + "x-ratelimit-remaining-minute": "992", + "ratelimit-limit": "1000", + "ratelimit-remaining": "992", + "Cache-Control": "no-store", + "pragma": "no-cache", + "vary": "Origin", + "access-control-allow-origin": "https:\/\/office.bexio.com", + "via": "1.1 google", + "alt-svc": "h3=\":443\"; ma=86400", + "cf-cache-status": "DYNAMIC", + "Server": "cloudflare", + "CF-RAY": "94fb6e89c98ceb49-CPH" + }, + "data": "{\"id\":1,\"type\":\"KbPositionText\",\"text\":\"Test edited text position\",\"show_pos_nr\":true,\"pos\":\"1\",\"internal_pos\":1,\"parent_id\":null,\"is_optional\":false}", + "context": [] +} \ No newline at end of file diff --git a/tests/Requests/DefaultPositions/CreateADefaultPositionRequestTest.php b/tests/Requests/DefaultPositions/CreateADefaultPositionRequestTest.php new file mode 100644 index 0000000..3c7b102 --- /dev/null +++ b/tests/Requests/DefaultPositions/CreateADefaultPositionRequestTest.php @@ -0,0 +1,36 @@ + MockResponse::fixture('DefaultPositions/create-a-default-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new CreateADefaultPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + position: new CreateEditDefaultPositionDTO( + amount: 1, + unit_id: 1, + account_id: 145, + tax_id: 29, + text: 'Test position', + unit_price: 100, + discount_in_percent: '0', + ) + ); + + $response = $connector->send($request); + + $mockClient->assertSent(CreateADefaultPositionRequest::class); + expect($response->dto())->toBeInstanceOf(DefaultPositionDTO::class); +}); diff --git a/tests/Requests/DefaultPositions/DeleteADefaultPositionRequestTest.php b/tests/Requests/DefaultPositions/DeleteADefaultPositionRequestTest.php new file mode 100644 index 0000000..f89208f --- /dev/null +++ b/tests/Requests/DefaultPositions/DeleteADefaultPositionRequestTest.php @@ -0,0 +1,26 @@ + MockResponse::fixture('DefaultPositions/delete-a-default-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new DeleteADefaultPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 2, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(DeleteADefaultPositionRequest::class); + expect($response->dto())->not()->toBeNull(); +}); diff --git a/tests/Requests/DefaultPositions/EditADefaultPositionRequestTest.php b/tests/Requests/DefaultPositions/EditADefaultPositionRequestTest.php new file mode 100644 index 0000000..886b1b5 --- /dev/null +++ b/tests/Requests/DefaultPositions/EditADefaultPositionRequestTest.php @@ -0,0 +1,37 @@ + MockResponse::fixture('DefaultPositions/edit-a-default-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new EditADefaultPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 10, + position: new CreateEditDefaultPositionDTO( + amount: 1, + unit_id: 1, + account_id: 145, + tax_id: 29, + text: 'Test position', + unit_price: 150, + discount_in_percent: '0', + ), + ); + + $response = $connector->send($request); + + $mockClient->assertSent(EditADefaultPositionRequest::class); + expect($response->dto())->toBeInstanceOf(DefaultPositionDTO::class); +}); diff --git a/tests/Requests/DefaultPositions/FetchADefaultPositionRequestTest.php b/tests/Requests/DefaultPositions/FetchADefaultPositionRequestTest.php new file mode 100644 index 0000000..80f9097 --- /dev/null +++ b/tests/Requests/DefaultPositions/FetchADefaultPositionRequestTest.php @@ -0,0 +1,27 @@ + MockResponse::fixture('DefaultPositions/fetch-a-default-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new FetchADefaultPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 9, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(FetchADefaultPositionRequest::class); + expect($response->dto())->toBeInstanceOf(DefaultPositionDTO::class); +}); diff --git a/tests/Requests/DefaultPositions/FetchAListOfDefaultPositionsRequestTest.php b/tests/Requests/DefaultPositions/FetchAListOfDefaultPositionsRequestTest.php new file mode 100644 index 0000000..6fcfd11 --- /dev/null +++ b/tests/Requests/DefaultPositions/FetchAListOfDefaultPositionsRequestTest.php @@ -0,0 +1,27 @@ + MockResponse::fixture('DefaultPositions/fetch-a-list-of-default-positions'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $response = $connector->send(new FetchAListOfDefaultPositionsRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + limit: 2, + )); + + $mockClient->assertSent(FetchAListOfDefaultPositionsRequest::class); + + expect($response->dto())->toBeInstanceOf(Collection::class) + ->and($response->dto()->count())->toBe(2); +}); diff --git a/tests/Requests/DiscountPositions/CreateADiscountPositionRequestTest.php b/tests/Requests/DiscountPositions/CreateADiscountPositionRequestTest.php new file mode 100644 index 0000000..7c9df29 --- /dev/null +++ b/tests/Requests/DiscountPositions/CreateADiscountPositionRequestTest.php @@ -0,0 +1,32 @@ + MockResponse::fixture('DiscountPositions/create-a-discount-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new CreateADiscountPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + position: new CreateEditDiscountPositionDTO( + text: 'Test discount position', + is_percentual: true, + value: '10', + ) + ); + + $response = $connector->send($request); + + $mockClient->assertSent(CreateADiscountPositionRequest::class); + expect($response->dto())->toBeInstanceOf(DiscountPositionDTO::class); +}); diff --git a/tests/Requests/DiscountPositions/DeleteADiscountPositionRequestTest.php b/tests/Requests/DiscountPositions/DeleteADiscountPositionRequestTest.php new file mode 100644 index 0000000..356a7bb --- /dev/null +++ b/tests/Requests/DiscountPositions/DeleteADiscountPositionRequestTest.php @@ -0,0 +1,26 @@ + MockResponse::fixture('DiscountPositions/delete-a-discount-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new DeleteADiscountPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 3, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(DeleteADiscountPositionRequest::class); + expect($response->dto())->not()->toBeNull(); +}); diff --git a/tests/Requests/DiscountPositions/EditADiscountPositionRequestTest.php b/tests/Requests/DiscountPositions/EditADiscountPositionRequestTest.php new file mode 100644 index 0000000..6c1be53 --- /dev/null +++ b/tests/Requests/DiscountPositions/EditADiscountPositionRequestTest.php @@ -0,0 +1,33 @@ + MockResponse::fixture('DiscountPositions/edit-a-discount-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new EditADiscountPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 1, + position: new CreateEditDiscountPositionDTO( + text: 'Test discount position', + is_percentual: true, + value: '50', + ), + ); + + $response = $connector->send($request); + + $mockClient->assertSent(EditADiscountPositionRequest::class); + expect($response->dto())->toBeInstanceOf(DiscountPositionDTO::class); +}); diff --git a/tests/Requests/DiscountPositions/FetchADiscountPositionRequestTest.php b/tests/Requests/DiscountPositions/FetchADiscountPositionRequestTest.php new file mode 100644 index 0000000..262f63d --- /dev/null +++ b/tests/Requests/DiscountPositions/FetchADiscountPositionRequestTest.php @@ -0,0 +1,27 @@ + MockResponse::fixture('DiscountPositions/fetch-a-discount-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new FetchADiscountPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 1, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(FetchADiscountPositionRequest::class); + expect($response->dto())->toBeInstanceOf(DiscountPositionDTO::class); +}); diff --git a/tests/Requests/DiscountPositions/FetchAListOfDiscountPositionsRequestTest.php b/tests/Requests/DiscountPositions/FetchAListOfDiscountPositionsRequestTest.php new file mode 100644 index 0000000..e21d471 --- /dev/null +++ b/tests/Requests/DiscountPositions/FetchAListOfDiscountPositionsRequestTest.php @@ -0,0 +1,26 @@ + MockResponse::fixture('DiscountPositions/fetch-a-list-of-discount-positions'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $response = $connector->send(new FetchAListOfDiscountPositionsRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + limit: 2, + )); + + $mockClient->assertSent(FetchAListOfDiscountPositionsRequest::class); + expect($response->dto())->toBeInstanceOf(Collection::class) + ->and($response->dto()->count())->toBe(2); +}); diff --git a/tests/Requests/ItemPositions/CreateAnItemPositionRequestTest.php b/tests/Requests/ItemPositions/CreateAnItemPositionRequestTest.php new file mode 100644 index 0000000..3805d9b --- /dev/null +++ b/tests/Requests/ItemPositions/CreateAnItemPositionRequestTest.php @@ -0,0 +1,37 @@ + MockResponse::fixture('ItemPositions/create-an-item-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new CreateAnItemPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + position: new CreateItemPositionDTO( + amount: 1, + unit_id: 1, + account_id: 145, + tax_id: 29, + text: 'Test item position', + unit_price: 110, + discount_in_percent: '0', + article_id: 1, + ) + ); + + $response = $connector->send($request); + + $mockClient->assertSent(CreateAnItemPositionRequest::class); + expect($response->dto())->toBeInstanceOf(ItemPositionDTO::class); +}); diff --git a/tests/Requests/ItemPositions/DeleteAnItemPositionRequestTest.php b/tests/Requests/ItemPositions/DeleteAnItemPositionRequestTest.php new file mode 100644 index 0000000..e178b7e --- /dev/null +++ b/tests/Requests/ItemPositions/DeleteAnItemPositionRequestTest.php @@ -0,0 +1,26 @@ + MockResponse::fixture('ItemPositions/delete-an-item-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new DeleteAnItemPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 3, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(DeleteAnItemPositionRequest::class); + expect($response->dto())->not()->toBeNull(); +}); diff --git a/tests/Requests/ItemPositions/EditAnItemPositionRequestTest.php b/tests/Requests/ItemPositions/EditAnItemPositionRequestTest.php new file mode 100644 index 0000000..d46496c --- /dev/null +++ b/tests/Requests/ItemPositions/EditAnItemPositionRequestTest.php @@ -0,0 +1,37 @@ + MockResponse::fixture('ItemPositions/edit-an-item-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new EditAnItemPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 1, + position: new EditItemPositionDTO( + amount: 1, + unit_id: 1, + account_id: 145, + tax_id: 29, + text: 'Test edited item position', + unit_price: 100, + discount_in_percent: '0', + ), + ); + + $response = $connector->send($request); + + $mockClient->assertSent(EditAnItemPositionRequest::class); + expect($response->dto())->toBeInstanceOf(ItemPositionDTO::class); +}); diff --git a/tests/Requests/ItemPositions/FetchAListOfItemPositionsRequestTest.php b/tests/Requests/ItemPositions/FetchAListOfItemPositionsRequestTest.php new file mode 100644 index 0000000..fa95e48 --- /dev/null +++ b/tests/Requests/ItemPositions/FetchAListOfItemPositionsRequestTest.php @@ -0,0 +1,26 @@ + MockResponse::fixture('ItemPositions/fetch-a-list-of-item-positions'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $response = $connector->send(new FetchAListOfItemPositionsRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + limit: 2, + )); + + $mockClient->assertSent(FetchAListOfItemPositionsRequest::class); + expect($response->dto())->toBeInstanceOf(Collection::class) + ->and($response->dto()->count())->toBe(2); +}); diff --git a/tests/Requests/ItemPositions/FetchAnItemPositionRequestTest.php b/tests/Requests/ItemPositions/FetchAnItemPositionRequestTest.php new file mode 100644 index 0000000..dcde473 --- /dev/null +++ b/tests/Requests/ItemPositions/FetchAnItemPositionRequestTest.php @@ -0,0 +1,27 @@ + MockResponse::fixture('ItemPositions/fetch-an-item-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new FetchAnItemPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 1, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(FetchAnItemPositionRequest::class); + expect($response->dto())->toBeInstanceOf(ItemPositionDTO::class); +}); diff --git a/tests/Requests/PagebreakPositions/CreateAPagebreakPositionRequestTest.php b/tests/Requests/PagebreakPositions/CreateAPagebreakPositionRequestTest.php new file mode 100644 index 0000000..36839d3 --- /dev/null +++ b/tests/Requests/PagebreakPositions/CreateAPagebreakPositionRequestTest.php @@ -0,0 +1,30 @@ + MockResponse::fixture('PagebreakPositions/create-a-pagebreak-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new CreateAPagebreakPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + position: new CreateEditPagebreakPositionDTO( + pagebreak: true, + ) + ); + + $response = $connector->send($request); + + $mockClient->assertSent(CreateAPagebreakPositionRequest::class); + expect($response->dto())->toBeInstanceOf(PagebreakPositionDTO::class); +}); diff --git a/tests/Requests/PagebreakPositions/DeleteAPagebreakPositionRequestTest.php b/tests/Requests/PagebreakPositions/DeleteAPagebreakPositionRequestTest.php new file mode 100644 index 0000000..d62085d --- /dev/null +++ b/tests/Requests/PagebreakPositions/DeleteAPagebreakPositionRequestTest.php @@ -0,0 +1,26 @@ + MockResponse::fixture('PagebreakPositions/delete-a-pagebreak-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new DeleteAPagebreakPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 2, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(DeleteAPagebreakPositionRequest::class); + expect($response->dto())->not()->toBeNull(); +}); diff --git a/tests/Requests/PagebreakPositions/EditAPagebreakPositionRequestTest.php b/tests/Requests/PagebreakPositions/EditAPagebreakPositionRequestTest.php new file mode 100644 index 0000000..8401ece --- /dev/null +++ b/tests/Requests/PagebreakPositions/EditAPagebreakPositionRequestTest.php @@ -0,0 +1,31 @@ + MockResponse::fixture('PagebreakPositions/edit-a-pagebreak-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new EditAPagebreakPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 1, + position: new CreateEditPagebreakPositionDTO( + pagebreak: false, + ), + ); + + $response = $connector->send($request); + + $mockClient->assertSent(EditAPagebreakPositionRequest::class); + expect($response->dto())->toBeInstanceOf(PagebreakPositionDTO::class); +}); diff --git a/tests/Requests/PagebreakPositions/FetchAListOfPagebreakPositionsRequestTest.php b/tests/Requests/PagebreakPositions/FetchAListOfPagebreakPositionsRequestTest.php new file mode 100644 index 0000000..5b1e0e9 --- /dev/null +++ b/tests/Requests/PagebreakPositions/FetchAListOfPagebreakPositionsRequestTest.php @@ -0,0 +1,26 @@ + MockResponse::fixture('PagebreakPositions/fetch-a-list-of-pagebreak-positions'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $response = $connector->send(new FetchAListOfPagebreakPositionsRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + limit: 2, + )); + + $mockClient->assertSent(FetchAListOfPagebreakPositionsRequest::class); + expect($response->dto())->toBeInstanceOf(Collection::class) + ->and($response->dto()->count())->toBe(2); +}); diff --git a/tests/Requests/PagebreakPositions/FetchAPagebreakPositionRequestTest.php b/tests/Requests/PagebreakPositions/FetchAPagebreakPositionRequestTest.php new file mode 100644 index 0000000..12c8230 --- /dev/null +++ b/tests/Requests/PagebreakPositions/FetchAPagebreakPositionRequestTest.php @@ -0,0 +1,27 @@ + MockResponse::fixture('PagebreakPositions/fetch-a-pagebreak-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new FetchAPagebreakPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 1, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(FetchAPagebreakPositionRequest::class); + expect($response->dto())->toBeInstanceOf(PagebreakPositionDTO::class); +}); diff --git a/tests/Requests/SubPositions/CreateASubPositionRequestTest.php b/tests/Requests/SubPositions/CreateASubPositionRequestTest.php new file mode 100644 index 0000000..ab65b0f --- /dev/null +++ b/tests/Requests/SubPositions/CreateASubPositionRequestTest.php @@ -0,0 +1,31 @@ + MockResponse::fixture('SubPositions/create-a-sub-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new CreateASubPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + position: new CreateEditSubPositionDTO( + text: 'Test sub position', + show_pos_nr: true, + ) + ); + + $response = $connector->send($request); + + $mockClient->assertSent(CreateASubPositionRequest::class); + expect($response->dto())->toBeInstanceOf(SubPositionDTO::class); +}); diff --git a/tests/Requests/SubPositions/DeleteASubPositionRequestTest.php b/tests/Requests/SubPositions/DeleteASubPositionRequestTest.php new file mode 100644 index 0000000..4f2ba5f --- /dev/null +++ b/tests/Requests/SubPositions/DeleteASubPositionRequestTest.php @@ -0,0 +1,26 @@ + MockResponse::fixture('SubPositions/delete-a-sub-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new DeleteASubPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 2, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(DeleteASubPositionRequest::class); + expect($response->dto())->not()->toBeNull(); +}); diff --git a/tests/Requests/SubPositions/EditASubPositionRequestTest.php b/tests/Requests/SubPositions/EditASubPositionRequestTest.php new file mode 100644 index 0000000..2c747d5 --- /dev/null +++ b/tests/Requests/SubPositions/EditASubPositionRequestTest.php @@ -0,0 +1,32 @@ + MockResponse::fixture('SubPositions/edit-a-sub-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new EditASubPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 1, + position: new CreateEditSubPositionDTO( + text: 'Test edited sub position', + show_pos_nr: true, + ), + ); + + $response = $connector->send($request); + + $mockClient->assertSent(EditASubPositionRequest::class); + expect($response->dto())->toBeInstanceOf(SubPositionDTO::class); +}); diff --git a/tests/Requests/SubPositions/FetchAListOfSubPositionsRequestTest.php b/tests/Requests/SubPositions/FetchAListOfSubPositionsRequestTest.php new file mode 100644 index 0000000..70b9035 --- /dev/null +++ b/tests/Requests/SubPositions/FetchAListOfSubPositionsRequestTest.php @@ -0,0 +1,26 @@ + MockResponse::fixture('SubPositions/fetch-a-list-of-sub-positions'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $response = $connector->send(new FetchAListOfSubPositionsRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + limit: 2, + )); + + $mockClient->assertSent(FetchAListOfSubPositionsRequest::class); + expect($response->dto())->toBeInstanceOf(Collection::class) + ->and($response->dto()->count())->toBe(2); +}); diff --git a/tests/Requests/SubPositions/FetchASubPositionRequestTest.php b/tests/Requests/SubPositions/FetchASubPositionRequestTest.php new file mode 100644 index 0000000..52abe21 --- /dev/null +++ b/tests/Requests/SubPositions/FetchASubPositionRequestTest.php @@ -0,0 +1,27 @@ + MockResponse::fixture('SubPositions/fetch-a-sub-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new FetchASubPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 1, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(FetchASubPositionRequest::class); + expect($response->dto())->toBeInstanceOf(SubPositionDTO::class); +}); diff --git a/tests/Requests/SubtotalPositions/CreateASubtotalPositionRequestTest.php b/tests/Requests/SubtotalPositions/CreateASubtotalPositionRequestTest.php new file mode 100644 index 0000000..c4afb40 --- /dev/null +++ b/tests/Requests/SubtotalPositions/CreateASubtotalPositionRequestTest.php @@ -0,0 +1,30 @@ + MockResponse::fixture('SubtotalPositions/create-a-subtotal-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new CreateASubtotalPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + position: new CreateEditSubtotalPositionDTO( + text: 'Test subtotal position', + ) + ); + + $response = $connector->send($request); + + $mockClient->assertSent(CreateASubtotalPositionRequest::class); + expect($response->dto())->toBeInstanceOf(SubtotalPositionDTO::class); +}); diff --git a/tests/Requests/SubtotalPositions/DeleteASubtotalPositionRequestTest.php b/tests/Requests/SubtotalPositions/DeleteASubtotalPositionRequestTest.php new file mode 100644 index 0000000..281af18 --- /dev/null +++ b/tests/Requests/SubtotalPositions/DeleteASubtotalPositionRequestTest.php @@ -0,0 +1,26 @@ + MockResponse::fixture('SubtotalPositions/delete-a-subtotal-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new DeleteASubtotalPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 2, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(DeleteASubtotalPositionRequest::class); + expect($response->dto())->not()->toBeNull(); +}); diff --git a/tests/Requests/SubtotalPositions/EditASubtotalPositionRequestTest.php b/tests/Requests/SubtotalPositions/EditASubtotalPositionRequestTest.php new file mode 100644 index 0000000..8952e22 --- /dev/null +++ b/tests/Requests/SubtotalPositions/EditASubtotalPositionRequestTest.php @@ -0,0 +1,31 @@ + MockResponse::fixture('SubtotalPositions/edit-a-subtotal-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new EditASubtotalPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 1, + position: new CreateEditSubtotalPositionDTO( + text: 'Test edited subtotal position', + ), + ); + + $response = $connector->send($request); + + $mockClient->assertSent(EditASubtotalPositionRequest::class); + expect($response->dto())->toBeInstanceOf(SubtotalPositionDTO::class); +}); diff --git a/tests/Requests/SubtotalPositions/FetchAListOfSubtotalPositionsRequestTest.php b/tests/Requests/SubtotalPositions/FetchAListOfSubtotalPositionsRequestTest.php new file mode 100644 index 0000000..04da904 --- /dev/null +++ b/tests/Requests/SubtotalPositions/FetchAListOfSubtotalPositionsRequestTest.php @@ -0,0 +1,26 @@ + MockResponse::fixture('SubtotalPositions/fetch-a-list-of-subtotal-positions'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $response = $connector->send(new FetchAListOfSubtotalPositionsRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + limit: 2, + )); + + $mockClient->assertSent(FetchAListOfSubtotalPositionsRequest::class); + expect($response->dto())->toBeInstanceOf(Collection::class) + ->and($response->dto()->count())->toBe(2); +}); diff --git a/tests/Requests/SubtotalPositions/FetchASubtotalPositionRequestTest.php b/tests/Requests/SubtotalPositions/FetchASubtotalPositionRequestTest.php new file mode 100644 index 0000000..3eff09a --- /dev/null +++ b/tests/Requests/SubtotalPositions/FetchASubtotalPositionRequestTest.php @@ -0,0 +1,27 @@ + MockResponse::fixture('SubtotalPositions/fetch-a-subtotal-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new FetchASubtotalPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 1, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(FetchASubtotalPositionRequest::class); + expect($response->dto())->toBeInstanceOf(SubtotalPositionDTO::class); +}); diff --git a/tests/Requests/TextPositions/CreateATextPositionRequestTest.php b/tests/Requests/TextPositions/CreateATextPositionRequestTest.php new file mode 100644 index 0000000..2cc0b0f --- /dev/null +++ b/tests/Requests/TextPositions/CreateATextPositionRequestTest.php @@ -0,0 +1,31 @@ + MockResponse::fixture('TextPositions/create-a-text-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new CreateATextPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + position: new CreateEditTextPositionDTO( + text: 'Test text position', + show_pos_nr: true, + ) + ); + + $response = $connector->send($request); + + $mockClient->assertSent(CreateATextPositionRequest::class); + expect($response->dto())->toBeInstanceOf(TextPositionDTO::class); +}); diff --git a/tests/Requests/TextPositions/DeleteATextPositionRequestTest.php b/tests/Requests/TextPositions/DeleteATextPositionRequestTest.php new file mode 100644 index 0000000..4b178fb --- /dev/null +++ b/tests/Requests/TextPositions/DeleteATextPositionRequestTest.php @@ -0,0 +1,26 @@ + MockResponse::fixture('TextPositions/delete-a-text-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new DeleteATextPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 1, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(DeleteATextPositionRequest::class); + expect($response->dto())->not()->toBeNull(); +}); diff --git a/tests/Requests/TextPositions/EditATextPositionRequestTest.php b/tests/Requests/TextPositions/EditATextPositionRequestTest.php new file mode 100644 index 0000000..a7ee576 --- /dev/null +++ b/tests/Requests/TextPositions/EditATextPositionRequestTest.php @@ -0,0 +1,32 @@ + MockResponse::fixture('TextPositions/edit-a-text-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new EditATextPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 1, + position: new CreateEditTextPositionDTO( + text: 'Test edited text position', + show_pos_nr: true, + ), + ); + + $response = $connector->send($request); + + $mockClient->assertSent(EditATextPositionRequest::class); + expect($response->dto())->toBeInstanceOf(TextPositionDTO::class); +}); diff --git a/tests/Requests/TextPositions/FetchAListOfTextPositionsRequestTest.php b/tests/Requests/TextPositions/FetchAListOfTextPositionsRequestTest.php new file mode 100644 index 0000000..0afc686 --- /dev/null +++ b/tests/Requests/TextPositions/FetchAListOfTextPositionsRequestTest.php @@ -0,0 +1,26 @@ + MockResponse::fixture('TextPositions/fetch-a-list-of-text-positions'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $response = $connector->send(new FetchAListOfTextPositionsRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + limit: 2, + )); + + $mockClient->assertSent(FetchAListOfTextPositionsRequest::class); + expect($response->dto())->toBeInstanceOf(Collection::class) + ->and($response->dto()->count())->toBe(2); +}); diff --git a/tests/Requests/TextPositions/FetchATextPositionRequestTest.php b/tests/Requests/TextPositions/FetchATextPositionRequestTest.php new file mode 100644 index 0000000..2697d79 --- /dev/null +++ b/tests/Requests/TextPositions/FetchATextPositionRequestTest.php @@ -0,0 +1,27 @@ + MockResponse::fixture('TextPositions/fetch-a-text-position'), + ]); + + $connector = new BexioConnector; + $connector->withMockClient($mockClient); + + $request = new FetchATextPositionRequest( + kbDocumentType: 'kb_invoice', + documentId: 2, + positionId: 1, + ); + + $response = $connector->send($request); + + $mockClient->assertSent(FetchATextPositionRequest::class); + expect($response->dto())->toBeInstanceOf(TextPositionDTO::class); +});