Feature laravel13#214
Closed
StanBarrows wants to merge 36 commits into
Closed
Conversation
added 30 commits
October 17, 2025 15:57
…ature-a-few-fixes
added 6 commits
April 3, 2026 15:11
Contributor
There was a problem hiding this comment.
Pull request overview
This PR upgrades the package for the Laravel 13 ecosystem while expanding API coverage and making DTO/response parsing more resilient to mixed JSON shapes (list vs map), and introduces CI-friendly Saloon fixture tests alongside a separated live integration suite.
Changes:
- Upgrade dependencies/tooling for Laravel 13 + newer Saloon/Pest/PHPUnit and refresh CI workflows and test suites.
- Add configurable
platform_pathand normalize URL/path building across connector, OAuth discovery, and encrypted WebClient URLs. - Improve response/DTO parsing robustness (introduce
JsonArrays) and add new DocuWare request implementations plus extensive integration + fixture tests.
Reviewed changes
Copilot reviewed 127 out of 174 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| tests/TestCase.php | Configure Saloon fixture path during testbench environment setup. |
| tests/Support/FixtureDocuWareConnector.php | Test-only connector that bypasses OAuth via static bearer token. |
| tests/Pest.php | Reorganize hooks for Integration tests; add processing refresh helpers. |
| tests/Manual/RecordGetOrganizationFixtureTest.php | Manual, skipped test to record Saloon fixtures from a real tenant. |
| tests/Integration/Requests/Workflow/GetDocumentWorkflowHistoryTest.php | Live integration test for workflow history (currently skipped). |
| tests/Integration/Requests/Workflow/GetDocumentWorkflowHistoryStepsTest.php | Live integration test for workflow history steps (currently skipped). |
| tests/Integration/Requests/SelectList/GetSelectListRequest.php | Live integration test for select-list listing. |
| tests/Integration/Requests/Search/GetSearchRequestTest.php | Live integration tests for search builder behavior and constraints. |
| tests/Integration/Requests/Organization/GetOrganizationsRequestTest.php | Live integration test for listing organizations. |
| tests/Integration/Requests/General/UserManagement/GetUsers/GetUsersTest.php | Live integration test for listing users. |
| tests/Integration/Requests/General/UserManagement/GetUsers/GetUsersOfARoleTest.php | Live integration test for users-by-role. |
| tests/Integration/Requests/General/UserManagement/GetUsers/GetUsersOfAGroupTest.php | Live integration test for users-by-group. |
| tests/Integration/Requests/General/UserManagement/GetUsers/GetUserByIdTest.php | Live integration test for fetching user by ID. |
| tests/Integration/Requests/General/UserManagement/GetModifyRoles/GetRolesTest.php | Live integration test for listing roles. |
| tests/Integration/Requests/General/UserManagement/GetModifyRoles/GetAllRolesForASpecificUserTest.php | Live integration test for roles for a specific user. |
| tests/Integration/Requests/General/UserManagement/GetModifyRoles/AddRemoveUserToARoleTest.php | Live integration test for add/remove role membership. |
| tests/Integration/Requests/General/UserManagement/GetModifyGroups/GetGroupsTest.php | Live integration test for listing groups. |
| tests/Integration/Requests/General/UserManagement/GetModifyGroups/GetAllGroupsForASpecificUserTest.php | Live integration test for groups for a specific user. |
| tests/Integration/Requests/General/UserManagement/GetModifyGroups/AddRemoveUserToAGroupTest.php | Live integration test for add/remove group membership. |
| tests/Integration/Requests/General/UserManagement/CreateUpdateUsers/CreateUpdateUserTest.php | Live integration tests for creating/updating users. |
| tests/Integration/Requests/FileCabinets/Upload/ReplaceAPDFDocumentSectionTest.php | Live integration test for replacing a PDF section. |
| tests/Integration/Requests/FileCabinets/Upload/AppendFilesToADataRecordTest.php | Live integration tests for appending files to a record (one skipped). |
| tests/Integration/Requests/FileCabinets/Upload/AppendASinglePDFToADocumentTest.php | Live integration test for appending a single PDF. |
| tests/Integration/Requests/FileCabinets/Search/GetDocumentsFromAFileCabinetTest.php | Live integration test for listing documents in a cabinet. |
| tests/Integration/Requests/FileCabinets/Search/GetASpecificDocumentFromAFileCabinetTest.php | Live integration test for fetching a specific document. |
| tests/Integration/Requests/FileCabinets/General/GetFileCabinetInformationTest.php | Live integration test for cabinet info endpoint. |
| tests/Integration/Requests/FileCabinets/Dialogs/GetDialogsOfASpecificTypeTest.php | Live integration test for dialogs-by-type. |
| tests/Integration/Requests/FileCabinets/Dialogs/GetASpecificDialogTest.php | Live integration test for fetching a specific dialog. |
| tests/Integration/Requests/FileCabinets/Dialogs/GetAllDialogs.php | Live integration test for listing all dialogs. |
| tests/Integration/Requests/Fields/GetFieldsRequestTest.php | Live integration test for listing cabinet fields. |
| tests/Integration/Requests/Documents/Thumbnail/GetDocumentDownloadThumbnailRequestTest.php | Live integration test for downloading thumbnails. |
| tests/Integration/Requests/Documents/Sections/GetTextshotTest.php | Live integration test for Textshot OCR-like content. |
| tests/Integration/Requests/Documents/Sections/GetASpecificSectionTest.php | Live integration test for fetching a section. |
| tests/Integration/Requests/Documents/Sections/GetAllSectionsFromADocumentTest.php | Live integration test for listing sections. |
| tests/Integration/Requests/Documents/Sections/DeleteSectionTest.php | Live integration test for deleting a section. |
| tests/Integration/Requests/Documents/PutDocumentFieldsRequestTest.php | Live integration tests for updating index values. |
| tests/Integration/Requests/Documents/PostDocumentRequestTest.php | Live integration tests for creating data records with/without files. |
| tests/Integration/Requests/Documents/GetDocumentPreviewRequestTest.php | Live integration test for preview image endpoint. |
| tests/Integration/Requests/Documents/GetDocumentCountRequestTest.php | Live integration test for document counts. |
| tests/Integration/Requests/Documents/Download/DownloadThumbnailTest.php | Live integration test for thumbnail download DTO. |
| tests/Integration/Requests/Documents/Download/DownloadSectionTest.php | Live integration test for downloading section content. |
| tests/Integration/Requests/Documents/Download/DownloadDocumentTest.php | Live integration test for downloading document content. |
| tests/Integration/Requests/Documents/DocumentsTrashBin/RestoreDocumentsFromTrashBinTest.php | Live integration test for trash restore. |
| tests/Integration/Requests/Documents/DocumentsTrashBin/GetDocumentsFromTrashBinTest.php | Live integration tests for trash search variations. |
| tests/Integration/Requests/Documents/DocumentsTrashBin/DeleteDocumentsFromTrashBinTest.php | Live integration test for trash delete. |
| tests/Integration/Requests/Documents/ClipUnclipStapleUnstaple/UnstapleTest.php | Live integration test for unstaple operation. |
| tests/Integration/Requests/Documents/ClipUnclipStapleUnstaple/UnclipTest.php | Live integration test for unclip operation. |
| tests/Integration/Requests/Documents/ClipUnclipStapleUnstaple/StapleTest.php | Live integration test for staple operation. |
| tests/Integration/Requests/Documents/ClipUnclipStapleUnstaple/ClipTest.php | Live integration test for clip operation. |
| tests/Integration/Requests/Documents/ApplicationProperties/ApplicationPropertiesTest.php | Live integration test for application properties CRUD. |
| tests/Integration/DocuWareTest.php | Update encrypted URL assertions to respect configurable platform path. |
| tests/Integration/DocuWareAuthenticationTest.php | Add authentication/OAuth discovery and credential tests. |
| tests/Fixtures/saloon/get-organization.json | Recorded Saloon fixture for organization listing. |
| tests/Feature/SaloonFixtures/GetOrganizationFixtureTest.php | CI-friendly feature test that maps DTOs from Saloon fixture files. |
| src/Support/ParseValue.php | Harden field/table parsing against unexpected JSON shapes. |
| src/Support/JsonArrays.php | New helper to normalize JSON arrays/maps to predictable structures. |
| src/Support/Auth.php | Tighten cached cookie typing/guarding to avoid non-array cache values. |
| src/Responses/Workflow/GetDocumentWorkflowHistoryResponse.php | Normalize history list handling via JsonArrays. |
| src/Responses/Search/GetTrashSearchResponse.php | Add strict typing for pagination args. |
| src/Responses/Search/GetSearchResponse.php | Add strict typing for pagination args. |
| src/Responses/General/UserManagement/GetUsers/GetUsersResponse.php | Normalize user list handling via JsonArrays. |
| src/Responses/General/UserManagement/GetModifyRoles/GetRolesResponse.php | Normalize roles list handling via JsonArrays. |
| src/Responses/General/UserManagement/GetModifyGroups/GetGroupsResponse.php | Normalize groups list handling via JsonArrays. |
| src/Responses/General/Organization/GetOrganizationResponse.php | Normalize org list handling via JsonArrays. |
| src/Responses/General/Organization/GetAllFileCabinetsAndDocumentTraysResponse.php | Normalize cabinet/tray list handling via JsonArrays. |
| src/Responses/FileCabinets/Search/GetDocumentsFromAFileCabinetResponse.php | Add strict typing for page/per-page defaults. |
| src/Responses/FileCabinets/Dialogs/GetAllDialogsResponse.php | Normalize dialogs list handling via JsonArrays. |
| src/Responses/Fields/GetFieldsResponse.php | Normalize fields list handling via JsonArrays. |
| src/Responses/Documents/UpdateIndexValues/UpdateIndexValuesResponse.php | Normalize returned fields list handling via JsonArrays. |
| src/Responses/Documents/Sections/GetAllSectionsFromADocumentResponse.php | Normalize sections list handling via JsonArrays. |
| src/Responses/Documents/ApplicationProperties/GetApplicationPropertiesResponse.php | Normalize application properties list handling via JsonArrays. |
| src/Requests/Workflow/GetDocumentWorkflowHistory.php | Add explicit DTO return typing annotations. |
| src/Requests/Search/GetSearchRequest.php | Improve constructor/body typing annotations. |
| src/Requests/General/UserManagement/GetUsers/GetUsersOfARole.php | Tighten response typing to Collection<int, User>. |
| src/Requests/General/UserManagement/GetUsers/GetUsersOfAGroup.php | Tighten response typing to Collection<int, User>. |
| src/Requests/General/UserManagement/GetUsers/GetUsers.php | Tighten response typing to Collection<int, User>. |
| src/Requests/General/UserManagement/GetModifyRoles/RemoveUserFromARole.php | Add payload typing annotations. |
| src/Requests/General/UserManagement/GetModifyRoles/GetRoles.php | Tighten response typing to Collection<int, Role>. |
| src/Requests/General/UserManagement/GetModifyRoles/GetAllRolesForASpecificUser.php | Tighten response typing to Collection<int, Role>. |
| src/Requests/General/UserManagement/GetModifyRoles/AddUserToARole.php | Add payload typing annotations. |
| src/Requests/General/UserManagement/GetModifyGroups/RemoveUserFromAGroup.php | Add payload typing annotations. |
| src/Requests/General/UserManagement/GetModifyGroups/GetGroups.php | Tighten response typing to Collection<int, Group>. |
| src/Requests/General/UserManagement/GetModifyGroups/GetAllGroupsForASpecificUser.php | Tighten response typing to Collection<int, Group>. |
| src/Requests/General/UserManagement/GetModifyGroups/AddUserToAGroup.php | Add payload typing annotations. |
| src/Requests/General/UserManagement/CreateUpdateUsers/UpdateUser.php | Add body typing annotations. |
| src/Requests/General/UserManagement/CreateUpdateUsers/CreateUser.php | Add body typing annotations. |
| src/Requests/General/Organization/GetOrganization.php | Tighten response typing to Collection<int, Organization>. |
| src/Requests/General/Organization/GetLoginToken.php | Add body typing annotations. |
| src/Requests/General/Organization/GetAllFileCabinetsAndDocumentTrays.php | Tighten response typing to Collection<int, FileCabinet>. |
| src/Requests/FileCabinets/Upload/ReplaceAPDFDocumentSection.php | Clarify multipart body return type. |
| src/Requests/FileCabinets/Upload/CreateDataRecord.php | Add optional storeDialogId and multipart/body typing. |
| src/Requests/FileCabinets/Upload/AppendFilesToADataRecord.php | Add multipart/body typing for MultipartValue collections. |
| src/Requests/FileCabinets/Upload/AppendASinglePDFToADocument.php | Clarify multipart body return type. |
| src/Requests/FileCabinets/Search/GetDocumentsFromAFileCabinet.php | Add constructor typing annotations for fields list. |
| src/Requests/FileCabinets/CheckInCheckOut/UndoDocumentCheckout.php | New request to undo checkout via ProcessDocumentAction. |
| src/Requests/FileCabinets/CheckInCheckOut/CheckoutDocumentToFileSystem.php | New request to checkout a document to the filesystem. |
| src/Requests/FileCabinets/CheckInCheckOut/CheckInDocumentFromFileSystem.php | New multipart request to check-in a document from filesystem. |
| src/Requests/FileCabinets/Batch/BatchDocumentsUpdateFields.php | New request for batch update fields operation. |
| src/Requests/Fields/GetFieldsRequest.php | Tighten response typing to Collection<int, Field>. |
| src/Requests/Documents/UpdateIndexValues/UpdateIndexValues.php | Expand index DTO typing and clarify body/DTO return types. |
| src/Requests/Documents/Stamps/GetStamps.php | New request to list stamps for a cabinet. |
| src/Requests/Documents/Stamps/AddDocumentAnnotations.php | New request for adding stamp/annotation payloads. |
| src/Requests/Documents/Sections/GetAllSectionsFromADocument.php | Tighten response typing to Collection<int, Section>. |
| src/Requests/Documents/ModifyDocuments/TransferDocument.php | Fix Arr import and add typing annotations. |
| src/Requests/Documents/DocumentsTrashBin/RestoreDocuments.php | Add constructor/body typing annotations. |
| src/Requests/Documents/DocumentsTrashBin/GetDocuments.php | Add constructor/body typing annotations. |
| src/Requests/Documents/DocumentsTrashBin/DeleteDocuments.php | Add constructor/body typing annotations. |
| src/Requests/Documents/ClipUnclipStapleUnstaple/Unstaple.php | Add body typing annotations. |
| src/Requests/Documents/ClipUnclipStapleUnstaple/Unclip.php | Add body typing annotations. |
| src/Requests/Documents/ClipUnclipStapleUnstaple/Staple.php | Add constructor/body typing annotations. |
| src/Requests/Documents/ClipUnclipStapleUnstaple/Clip.php | Add constructor/body typing annotations. |
| src/Requests/Documents/ApplicationProperties/UpdateApplicationProperties.php | Add body typing + property list typing. |
| src/Requests/Documents/ApplicationProperties/DeleteApplicationProperties.php | Add body typing + property name typing. |
| src/Requests/Documents/ApplicationProperties/AddApplicationProperties.php | Add body typing + property list typing. |
| src/Requests/Authentication/OAuth/RequestTokenWithCredentialsTrustedUser.php | Add body typing annotations. |
| src/Requests/Authentication/OAuth/RequestTokenWithCredentials.php | Add body typing annotations. |
| src/Requests/Authentication/OAuth/GetResponsibleIdentityService.php | Respect configurable platform path in discovery endpoint. |
| src/Facades/DocuWare.php | Refine facade docblock generics/array typing. |
| src/DTO/Workflow/InstanceHistory.php | Normalize history steps parsing via JsonArrays. |
| src/DTO/Workflow/HistoryStep.php | Normalize Info.Item parsing for list vs map JSON shapes. |
| src/DTO/TextshotPage.php | Normalize Textshot item parsing + tighten callback typing. |
| src/DTO/Textshot.php | Normalize pages parsing via JsonArrays. |
| src/DTO/SuggestionField.php | Add docblocks for JSON typing. |
| src/DTO/Section.php | Add docblocks for JSON typing. |
| src/DTO/General/UserManagement/GetUsers/User.php | Add docblocks for JSON typing. |
| src/DTO/General/UserManagement/GetUsers/RegionalSettings.php | Add docblocks for JSON typing. |
| src/DTO/General/UserManagement/GetUsers/OutOfOffice.php | Add docblocks for JSON typing. |
| src/DTO/General/UserManagement/GetModifyRoles/Role.php | Add docblocks for JSON typing. |
| src/DTO/General/UserManagement/GetModifyGroups/Group.php | Add docblocks for JSON typing. |
| src/DTO/General/UserManagement/CreateUpdateUser/User.php | Add docblocks for JSON typing. |
| src/DTO/General/Organization/OrganizationIndex.php | Add docblocks for JSON typing. |
| src/DTO/General/Organization/Organization.php | Add docblocks for JSON typing + ctor arg typing notes. |
| src/DTO/General/Organization/FileCabinet.php | Add docblocks for JSON typing. |
| src/DTO/FileCabinets/General/FileCabinetInformation.php | Add docblocks for JSON typing. |
| src/DTO/FileCabinets/Dialog.php | Normalize Fields to list-of-records or null. |
| src/DTO/FileCabinets/CheckoutToFileSystemResult.php | New DTO to parse checkout-to-filesystem response. |
| src/DTO/Documents/TrashDocumentPaginator.php | Harden header/row mapping against mixed JSON shapes. |
| src/DTO/Documents/TableRow.php | Normalize table field parsing via JsonArrays. |
| src/DTO/Documents/Field.php | Add docblocks for JSON typing. |
| src/DTO/Documents/DocumentThumbnail.php | Add docblocks for JSON typing. |
| src/DTO/Documents/DocumentsTrashBin/RestoreDocuments.php | Normalize failed-items list via JsonArrays. |
| src/DTO/Documents/DocumentsTrashBin/DeleteDocuments.php | Normalize failed-items list via JsonArrays. |
| src/DTO/Documents/DocumentPaginator.php | Harden items parsing against mixed JSON shapes. |
| src/DTO/Documents/DocumentIndex/PrepareDTO.php | Add docblocks for index DTO collection typing. |
| src/DTO/Documents/DocumentIndex/IndexTextDTO.php | Add return type docblock for values payload. |
| src/DTO/Documents/DocumentIndex/IndexTableDTO.php | Harden row shaping (array vs collection) + add typing docs. |
| src/DTO/Documents/DocumentIndex/IndexNumericDTO.php | Add return type docblock for values payload. |
| src/DTO/Documents/DocumentIndex/IndexMemoDTO.php | Add return type docblock for values payload. |
| src/DTO/Documents/DocumentIndex/IndexKeywordDTO.php | Add return type docblock for values payload. |
| src/DTO/Documents/DocumentIndex/IndexDetectDTO.php | Add explicit union return type. |
| src/DTO/Documents/DocumentIndex/IndexDecimalDTO.php | Add return type docblock for values payload. |
| src/DTO/Documents/DocumentIndex/IndexDateTimeDTO.php | Tighten fallback return typing and add values payload docblock. |
| src/DTO/Documents/DocumentIndex/IndexDateDTO.php | Tighten fallback return typing and add values payload docblock. |
| src/DTO/Documents/DocumentField.php | Add docblocks for JSON typing and value union typing. |
| src/DTO/Documents/Document.php | Normalize nested arrays with JsonArrays and harden extension extraction. |
| src/DTO/Authentication/OAuth/ResponsibleIdentityService.php | Add docblocks for JSON typing. |
| src/DTO/Authentication/OAuth/RequestToken.php | Add docblocks for JSON typing. |
| src/DTO/Authentication/OAuth/IdentityServiceConfiguration.php | Normalize string lists and add helper to coerce list values. |
| src/DocuWareUrl.php | Use configurable platform path + URL normalization for WebClient URLs. |
| src/DocuWareSearchRequestBuilder.php | Tighten typing and filter handling; expand docs. |
| src/Connectors/DocuWareConnector.php | Normalize base URL via platform path; refactor token caching/validation. |
| README.md | Document platform path, parity matrix, fixture recording, and test suites. |
| phpunit.xml.dist | Split test suites (default vs integration) and update schema/versioning. |
| phpstan.neon.dist | Raise PHPStan level from 5 to 6. |
| docs/postman-parity.md | New endpoint parity matrix vs DocuWare Postman collection. |
| config/laravel-docuware.php | Add platform_path and extra test config keys. |
| composer.json | Upgrade Laravel/Saloon/Pest/Testbench constraints; add test suite scripts. |
| .github/workflows/run-tests.yml | Update matrix (Laravel 13, newer PHP) + workflow adjustments. |
| .github/workflows/phpstan.yml | Bump PHP version and update workflow steps. |
| .github/workflows/fix-php-code-style-issues.yml | Switch to explicit PHP setup + composer install + pint run. |
| .github/workflows/dependabot-auto-merge.yml | Update fetch-metadata action version + node runtime env flag. |
| .github/workflows/composer-audit.yml | Bump PHP version used for composer audit. |
| .github/ISSUE_TEMPLATE/bug_report.yml | Update default PHP/Laravel version placeholders. |
| .env.example | Add DocuWare env var mapping table and expanded test env vars. |
Comments suppressed due to low confidence (1)
src/DocuWareSearchRequestBuilder.php:269
array_searchcan return0when the operator is the first element; the currentif ($operatorFilterIndex = array_search(...))will treat that as false and skip unsetting the existing filter. Use a strict comparison (!== false) so date filters can be overridden reliably.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.