diff --git a/.gitignore b/.gitignore index 2536343..0d3a8e7 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ vendor node_modules .phpactor.json build +.phpunit.cache ## Annotations src/DTO/Documents/AnnotationsStamps/* diff --git a/.phpunit.cache/test-results b/.phpunit.cache/test-results deleted file mode 100644 index 865937d..0000000 --- a/.phpunit.cache/test-results +++ /dev/null @@ -1 +0,0 @@ -{"version":"pest_3.8.2","defects":{"P\\Tests\\Feature\\Requests\\Workflow\\GetDocumentWorkflowHistoryTest::__pest_evaluable_it_can_get_document_workflow_history":1,"P\\Tests\\Feature\\SleepTest::__pest_evaluable_sleep":1,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_uses_CACHE__STORE_in_Laravel_12":8,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_uses_DOCUWARE__CACHE__DRIVER_when_explicitly_set":7,"P\\Tests\\Feature\\Requests\\Workflow\\GetDocumentWorkflowHistoryStepsTest::__pest_evaluable_it_can_get_document_workflow_history":1,"P\\Tests\\Feature\\Requests\\FileCabinets\\Upload\\AppendFilesToADataRecordTest::__pest_evaluable_it_can_attach_files_to_a_data_record":1,"Tests\\Unit\\DTO\\TextshotPageTest::test_it_can_create_textshot_page_with_null_language":7,"Tests\\Unit\\DTO\\TextshotPageTest::test_it_can_create_textshot_page_with_string_language":7,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_uses_default_file_driver_when_no_configuration_is_set":8,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_respects_the_new_CACHE__STORE_fallback_chain":8,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_environment_variable_fallback_chain_works_correctly":7,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_CACHE__STORE_takes_precedence_over_CACHE__DRIVER_when_DOCUWARE__CACHE__DRIVER_is_not_set":7,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_can_be_overridden":8,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_fallback_chain_is_properly_configured":8},"times":{"P\\Tests\\Feature\\Requests\\Documents\\Sections\\GetTextshotTest::__pest_evaluable_it_get_textshot_for_a_specific_section":1.669,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\DeleteDocumentsFromTrashBinTest::__pest_evaluable_it_can_delete_documents_in_trash":1.262,"P\\Tests\\Feature\\Requests\\Documents\\Sections\\GetAllSectionsFromADocumentTest::__pest_evaluable_it_can_get_all_sections_from_a_document":1.1,"P\\Tests\\Feature\\Requests\\Documents\\ClipUnclipStapleUnstaple\\UnstapleTest::__pest_evaluable_it_can_unstaple_a_document":13.455,"P\\Tests\\Feature\\Requests\\Documents\\ApplicationProperties\\ApplicationPropertiesTest::__pest_evaluable_it_can_add_get_update_delete_application_properties_to_a_document":1.042,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetUsers\\GetUsersTest::__pest_evaluable_it_can_list_users":0.746,"P\\Tests\\Feature\\Requests\\Organization\\GetOrganizationsRequestTest::__pest_evaluable_it_can_list_organizations":0.504,"P\\Tests\\Feature\\Requests\\Fields\\GetFieldsRequestTest::__pest_evaluable_it_can_list_fields_for_a_file_cabinet":0.53,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_override_search_documents_dates_filter_by_using_equal_operator":0.766,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents_dates_filter_in_past":0.661,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents":0.58,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents_with_multiple_values":1.078,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents_with_null_values":0.495,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_override_search_documents_dates_filter_by_using_same_operator":0.617,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_t_search_documents_by_more_than_two_dates":0.371,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents_dates_filter_in_future":0.645,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_t_search_documents_by_diverged_date_range":0.364,"P\\Tests\\Feature\\DocuWareTest::__pest_evaluable_it_can_create_encrypted_url_for_a_document_in_a_file_cabinet":0.424,"P\\Tests\\Feature\\DocuWareTest::__pest_evaluable_it_can_create_encrypted_url_for_a_document_in_a_basket":0.369,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyGroups\\GetAllGroupsForASpecificUserTest::__pest_evaluable_it_can_list_groups_for_a_specific_user":0.884,"P\\Tests\\Feature\\Requests\\FileCabinets\\Dialogs\\GetASpecificDialogTest::__pest_evaluable_it_can_get_a_dialog":0.555,"P\\Tests\\Feature\\Requests\\FileCabinets\\General\\GetFileCabinetInformationTest::__pest_evaluable_it_can_get_file_cabinet_information":0.63,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_organization_index":0.395,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_document":0.351,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_dialog":0.405,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_file_cabinet":0.352,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_field":0.336,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_document_field":0.34,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_table_row":0.352,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_suggestion_field":0.361,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_document_paginator":0.361,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_organization":0.346,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexDateDTOTest::__pest_evaluable_it_create_index_date_dto":0.002,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyRoles\\GetRolesTest::__pest_evaluable_it_can_list_groups":0.494,"P\\Tests\\Feature\\Requests\\FileCabinets\\Search\\GetASpecificDocumentFromAFileCabinetTest::__pest_evaluable_it_can_show_a_document":0.666,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\RestoreDocumentsFromTrashBinTest::__pest_evaluable_it_can_restore_documents_in_trash":1.184,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_search_documents_dates_filter_in_past_in_trash":0.518,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_t_search_documents_by_more_than_two_dates_in_trash":0.331,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_override_search_documents_dates_filter_by_using_same_operator_in_trash":0.565,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_override_search_documents_dates_filter_by_using_equal_operator_in_trash":0.56,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_search_documents_in_trash":0.532,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_search_documents_with_null_values_in_trash":0.568,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_t_search_documents_by_diverged_date_range":0.364,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_search_documents_dates_filter_in_future_in_trash":0.51,"P\\Tests\\Feature\\Requests\\FileCabinets\\Upload\\ReplaceAPDFDocumentSectionTest::__pest_evaluable_it_can_replace_a_pdf_document_section":1.084,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexKeywordDTOTest::__pest_evaluable_it_create_prepare_index_keyword_dto":0.001,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetUsers\\GetUsersOfARoleTest::__pest_evaluable_it_can_list_users_of_a_role":0.649,"P\\Tests\\Feature\\DocuWareAuthenticationTest::__pest_evaluable_it_can_get_oath_responsible_identity_service":0.497,"P\\Tests\\Feature\\DocuWareAuthenticationTest::__pest_evaluable_it_throws_an_error_if_credentials_are_wrong":0.839,"P\\Tests\\Feature\\DocuWareAuthenticationTest::__pest_evaluable_it_can_authenticate_with_DocuWare_Credentials":0.48,"P\\Tests\\Feature\\DocuWareAuthenticationTest::__pest_evaluable_it_can_get_oath_identity_service_configuration":0.701,"P\\Tests\\Unit\\DTO\\DocumentIndex\\PrepareDTOTest::__pest_evaluable_it_create_prepare_makeContent_dto":0,"P\\Tests\\Feature\\Requests\\Documents\\Download\\DownloadThumbnailTest::__pest_evaluable_it_can_download_a_thumbnail":0.814,"P\\Tests\\Feature\\Requests\\Documents\\ClipUnclipStapleUnstaple\\StapleTest::__pest_evaluable_it_can_staple_2_documents":12.323,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexDecimalDTOTest::__pest_evaluable_it_create_index_numeric_dto":0.001,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetUsers\\GetUserByIdTest::__pest_evaluable_it_can_get_user_by_id":0.763,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyGroups\\GetGroupsTest::__pest_evaluable_it_can_list_groups":0.548,"P\\Tests\\Feature\\Requests\\Workflow\\GetDocumentWorkflowHistoryTest::__pest_evaluable_it_can_get_document_workflow_history":0.359,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyGroups\\AddRemoveUserToAGroupTest::__pest_evaluable_it_can_add_groups_to_a_user":7.947,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyGroups\\AddRemoveUserToAGroupTest::__pest_evaluable_it_can_remove_groups_to_a_user":5.958,"P\\Tests\\Feature\\Requests\\Documents\\PostDocumentRequestTest::__pest_evaluable_it_can_upload_document_without_file_name_and_file_content_and_delete_it":0.565,"P\\Tests\\Feature\\Requests\\Documents\\PostDocumentRequestTest::__pest_evaluable_it_can_upload_document_with_index_values_and_delete_it":0.633,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexDateTimeDTOTest::__pest_evaluable_it_create_index_date_time_dto":0.001,"P\\Tests\\Core\\ArchTest::__pest_evaluable_it_will_not_use_any_debug_function":0.231,"P\\Tests\\Feature\\Requests\\Documents\\GetDocumentPreviewRequestTest::__pest_evaluable_it_can_preview_a_document_image":0.941,"P\\Tests\\Feature\\Requests\\Documents\\PutDocumentFieldsRequestTest::__pest_evaluable_it_can_update_a_document_value":0.679,"P\\Tests\\Feature\\Requests\\Documents\\PutDocumentFieldsRequestTest::__pest_evaluable_it_can_update_multiple_document_values":0.803,"P\\Tests\\Feature\\SleepTest::__pest_evaluable_sleep":0.339,"P\\Tests\\Feature\\Requests\\Documents\\ClipUnclipStapleUnstaple\\ClipTest::__pest_evaluable_it_can_clip_2_documents":6.624,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_uses_CACHE__STORE_in_Laravel_12":0.003,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_falls_back_to_CACHE__DRIVER_when_CACHE__STORE_is_not_set":0.425,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_uses_DOCUWARE__CACHE__DRIVER_when_explicitly_set":0.876,"P\\Tests\\Feature\\Requests\\Documents\\Download\\DownloadDocumentTest::__pest_evaluable_it_can_download_a_document":0.705,"P\\Tests\\Feature\\Requests\\FileCabinets\\Upload\\AppendASinglePDFToADocumentTest::__pest_evaluable_it_can_replace_a_pdf_document_section":0.87,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\CreateUpdateUsers\\CreateUpdateUserTest::__pest_evaluable_it_can_create_users":1.781,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\CreateUpdateUsers\\CreateUpdateUserTest::__pest_evaluable_it_can_update_users":6.156,"P\\Tests\\Feature\\Requests\\FileCabinets\\Dialogs\\GetDialogsOfASpecificTypeTest::__pest_evaluable_it_can_list_dialogs_for_a_file_cabinet":0.523,"P\\Tests\\Feature\\Requests\\Documents\\ClipUnclipStapleUnstaple\\UnclipTest::__pest_evaluable_it_can_unclip_2_documents":12.165,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetUsers\\GetUsersOfAGroupTest::__pest_evaluable_it_can_list_users_of_a_group":0.729,"P\\Tests\\Feature\\Requests\\Workflow\\GetDocumentWorkflowHistoryStepsTest::__pest_evaluable_it_can_get_document_workflow_history":0.354,"P\\Tests\\Feature\\Requests\\FileCabinets\\Search\\GetDocumentsFromAFileCabinetTest::__pest_evaluable_it_can_get_all_documents":0.876,"P\\Tests\\Feature\\Requests\\Documents\\Sections\\DeleteSectionTest::__pest_evaluable_it_can_delete_a_specific_section":0.825,"P\\Tests\\Feature\\Requests\\FileCabinets\\Upload\\AppendFilesToADataRecordTest::__pest_evaluable_it_can_attach_a_file_to_a_data_record":0.8,"P\\Tests\\Feature\\Requests\\FileCabinets\\Upload\\AppendFilesToADataRecordTest::__pest_evaluable_it_can_attach_files_to_a_data_record":0.353,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyRoles\\GetAllRolesForASpecificUserTest::__pest_evaluable_it_can_list_groups":0.78,"P\\Tests\\Feature\\Requests\\Documents\\Sections\\GetASpecificSectionTest::__pest_evaluable_it_can_get_a_specific_section":0.76,"P\\Tests\\Feature\\Requests\\Documents\\Thumbnail\\GetDocumentDownloadThumbnailRequestTest::__pest_evaluable_it_can_download_a_document_thumbnail":0.847,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexNumericDTOTest::__pest_evaluable_it_create_index_numeric_dto":0,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyRoles\\AddRemoveUserToARoleTest::__pest_evaluable_it_can_add_roles_to_a_user":6.818,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyRoles\\AddRemoveUserToARoleTest::__pest_evaluable_it_can_remove_roles_to_a_user":5.917,"P\\Tests\\Feature\\Requests\\Documents\\Download\\DownloadSectionTest::__pest_evaluable_it_can_download_a_section":0.849,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexTableDTOTest::__pest_evaluable_it_create_prepare_index_text_dto_using_dto":0.001,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexTextDTOTest::__pest_evaluable_it_create_prepare_index_text_dto":0,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexMemoDTOTest::__pest_evaluable_it_create_prepare_index_memo_dto":0,"P\\Tests\\Feature\\Requests\\Documents\\GetDocumentCountRequestTest::__pest_evaluable_it_can_get_a_total_count_of_documents":0.879,"Tests\\Unit\\DTO\\TextshotPageTest::test_it_can_create_textshot_page_with_null_language":0,"Tests\\Unit\\DTO\\TextshotPageTest::test_it_can_create_textshot_page_with_string_language":0.006,"Tests\\Unit\\DTO\\TextshotPageTest::test_it_can_create_textshot_page_with_empty_content":0,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_uses_default_file_driver_when_no_configuration_is_set":0.361,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_respects_the_new_CACHE__STORE_fallback_chain":0.008,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_environment_variable_fallback_chain_works_correctly":0.384,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_CACHE__STORE_takes_precedence_over_CACHE__DRIVER_when_DOCUWARE__CACHE__DRIVER_is_not_set":0.376,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_can_be_overridden":0.037,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_properly_loads_from_config":0.412,"P\\Tests\\Feature\\Laravel12CacheCompatibilityTest::__pest_evaluable_cache_configuration_fallback_chain_is_properly_configured":0.385}} \ No newline at end of file diff --git a/README.md b/README.md index 5e86651..a544013 100644 --- a/README.md +++ b/README.md @@ -315,6 +315,52 @@ $connector = new DocuWareConnector( ); ``` +### Enums + +The package provides several enums to ensure type safety and consistency when working with DocuWare API values. + +#### ConnectionEnum + +Represents different connection types for DocuWare authentication: + +```php +use CodebarAg\DocuWare\Enums\ConnectionEnum; + +ConnectionEnum::WITHOUT_COOKIE; +ConnectionEnum::STATIC_COOKIE; +ConnectionEnum::DYNAMIC_COOKIE; +``` + +#### DialogType + +Represents different types of dialogs in DocuWare: + +```php +use CodebarAg\DocuWare\Enums\DialogType; + +DialogType::SEARCH; +DialogType::STORE; +DialogType::RESULT; +DialogType::INDEX; +DialogType::LIST; +DialogType::FOLDERS; +``` + +#### DocuWareFieldTypeEnum + +Represents different field types used in DocuWare document indexing: + +```php +use CodebarAg\DocuWare\Enums\DocuWareFieldTypeEnum; + +DocuWareFieldTypeEnum::STRING; +DocuWareFieldTypeEnum::INT; +DocuWareFieldTypeEnum::DECIMAL; +DocuWareFieldTypeEnum::DATE; +DocuWareFieldTypeEnum::DATETIME; +DocuWareFieldTypeEnum::TABLE; +``` + ### Available Requests The following sections provide examples for each available request type. All functionality is documented inline below with code examples. diff --git a/src/DTO/General/UserManagement/GetUsers/OutOfOffice.php b/src/DTO/General/UserManagement/GetUsers/OutOfOffice.php index 802e4cf..8aeb77a 100644 --- a/src/DTO/General/UserManagement/GetUsers/OutOfOffice.php +++ b/src/DTO/General/UserManagement/GetUsers/OutOfOffice.php @@ -10,14 +10,22 @@ final class OutOfOffice { public static function fromJson(array $data): self { - if ($startDateTime = Arr::get($data, 'StartDateTime')) { + $startDateTime = Arr::get($data, 'StartDateTime'); + + $timeZone = config('app.timezone', 'UTC'); + + if (filled($startDateTime)) { $startDateTime = Str::of($startDateTime)->after('(')->before(')'); - $startDateTime = Carbon::createFromTimestamp($startDateTime); + $milliseconds = (int) (string) $startDateTime; + $startDateTime = Carbon::createFromTimestampMs($milliseconds, $timeZone); } - if ($endDateTime = Arr::get($data, 'EndDateTime')) { + $endDateTime = Arr::get($data, 'EndDateTime'); + + if (filled($endDateTime)) { $endDateTime = Str::of($endDateTime)->after('(')->before(')'); - $endDateTime = Carbon::createFromTimestamp($endDateTime); + $milliseconds = (int) (string) $endDateTime; + $endDateTime = Carbon::createFromTimestampMs($milliseconds, $timeZone); } return new self( diff --git a/src/Enums/DocuWareFieldTypeEnum.php b/src/Enums/DocuWareFieldTypeEnum.php new file mode 100644 index 0000000..e3370d7 --- /dev/null +++ b/src/Enums/DocuWareFieldTypeEnum.php @@ -0,0 +1,13 @@ +destinationFileCabinetId.'/Task/Transfer'; + $endpoint = '/FileCabinets/'.$this->destinationFileCabinetId.'/Task/Transfer'; + + if ($this->storeDialogId) { + $endpoint .= '?StoreDialogId='.$this->storeDialogId; + } + + return $endpoint; } protected function defaultHeaders(): array @@ -39,18 +51,20 @@ protected function defaultHeaders(): array protected function defaultBody(): array { - return [ + $body = [ 'SourceFileCabinetId' => $this->fileCabinetId, 'Documents' => [ [ 'Id' => $this->documentId, - 'Fields' => $this->fields, + 'Fields' => $this->fields ? Arr::get(PrepareDTO::makeField($this->fields), 'Field') : null, ], ], - 'KeepSource' => false, - 'FillIntellix' => false, - 'UseDefaultDialog' => false, + 'KeepSource' => $this->keepSource, + 'FillIntellix' => $this->fillIntellix, + 'UseDefaultDialog' => $this->useDefaultDialog, ]; + + return $body; } public function createDtoFromResponse(Response $response): bool diff --git a/tests/Unit/Enums/ConnectionEnumTest.php b/tests/Unit/Enums/ConnectionEnumTest.php new file mode 100644 index 0000000..fc81989 --- /dev/null +++ b/tests/Unit/Enums/ConnectionEnumTest.php @@ -0,0 +1,37 @@ + $case->value, ConnectionEnum::cases()); + + expect($actualCases)->toBe($expectedCases); +}); + +it('can get string value from enum', function () { + expect(ConnectionEnum::WITHOUT_COOKIE->value)->toBe('WITHOUT_COOKIE'); + expect(ConnectionEnum::STATIC_COOKIE->value)->toBe('STATIC_COOKIE'); + expect(ConnectionEnum::DYNAMIC_COOKIE->value)->toBe('DYNAMIC_COOKIE'); +}); + +it('can create enum from string value', function () { + expect(ConnectionEnum::from('WITHOUT_COOKIE'))->toBe(ConnectionEnum::WITHOUT_COOKIE); + expect(ConnectionEnum::from('STATIC_COOKIE'))->toBe(ConnectionEnum::STATIC_COOKIE); + expect(ConnectionEnum::from('DYNAMIC_COOKIE'))->toBe(ConnectionEnum::DYNAMIC_COOKIE); +}); + +it('throws exception for invalid enum value', function () { + expect(fn () => ConnectionEnum::from('INVALID_VALUE')) + ->toThrow(ValueError::class); +}); + +it('can try to create enum from string value', function () { + expect(ConnectionEnum::tryFrom('WITHOUT_COOKIE'))->toBe(ConnectionEnum::WITHOUT_COOKIE); + expect(ConnectionEnum::tryFrom('INVALID_VALUE'))->toBeNull(); +}); diff --git a/tests/Unit/Enums/DialogTypeTest.php b/tests/Unit/Enums/DialogTypeTest.php new file mode 100644 index 0000000..7f5008b --- /dev/null +++ b/tests/Unit/Enums/DialogTypeTest.php @@ -0,0 +1,46 @@ + $case->value, DialogType::cases()); + + expect($actualCases)->toBe($expectedCases); +}); + +it('can get string value from enum', function () { + expect(DialogType::SEARCH->value)->toBe('Search'); + expect(DialogType::STORE->value)->toBe('Store'); + expect(DialogType::RESULT->value)->toBe('Result'); + expect(DialogType::INDEX->value)->toBe('Index'); + expect(DialogType::LIST->value)->toBe('List'); + expect(DialogType::FOLDERS->value)->toBe('Folders'); +}); + +it('can create enum from string value', function () { + expect(DialogType::from('Search'))->toBe(DialogType::SEARCH); + expect(DialogType::from('Store'))->toBe(DialogType::STORE); + expect(DialogType::from('Result'))->toBe(DialogType::RESULT); + expect(DialogType::from('Index'))->toBe(DialogType::INDEX); + expect(DialogType::from('List'))->toBe(DialogType::LIST); + expect(DialogType::from('Folders'))->toBe(DialogType::FOLDERS); +}); + +it('throws exception for invalid enum value', function () { + expect(fn () => DialogType::from('InvalidType')) + ->toThrow(ValueError::class); +}); + +it('can try to create enum from string value', function () { + expect(DialogType::tryFrom('Search'))->toBe(DialogType::SEARCH); + expect(DialogType::tryFrom('InvalidType'))->toBeNull(); +}); diff --git a/tests/Unit/Enums/DocuWareFieldTypeEnumTest.php b/tests/Unit/Enums/DocuWareFieldTypeEnumTest.php new file mode 100644 index 0000000..cadd5f2 --- /dev/null +++ b/tests/Unit/Enums/DocuWareFieldTypeEnumTest.php @@ -0,0 +1,61 @@ + $case->value, DocuWareFieldTypeEnum::cases()); + + expect($actualCases)->toBe($expectedCases); +}); + +it('can get string value from enum', function () { + expect(DocuWareFieldTypeEnum::STRING->value)->toBe('String'); + expect(DocuWareFieldTypeEnum::INT->value)->toBe('Int'); + expect(DocuWareFieldTypeEnum::DECIMAL->value)->toBe('Decimal'); + expect(DocuWareFieldTypeEnum::DATE->value)->toBe('Date'); + expect(DocuWareFieldTypeEnum::DATETIME->value)->toBe('DateTime'); + expect(DocuWareFieldTypeEnum::TABLE->value)->toBe('Table'); +}); + +it('can create enum from string value', function () { + expect(DocuWareFieldTypeEnum::from('String'))->toBe(DocuWareFieldTypeEnum::STRING); + expect(DocuWareFieldTypeEnum::from('Int'))->toBe(DocuWareFieldTypeEnum::INT); + expect(DocuWareFieldTypeEnum::from('Decimal'))->toBe(DocuWareFieldTypeEnum::DECIMAL); + expect(DocuWareFieldTypeEnum::from('Date'))->toBe(DocuWareFieldTypeEnum::DATE); + expect(DocuWareFieldTypeEnum::from('DateTime'))->toBe(DocuWareFieldTypeEnum::DATETIME); + expect(DocuWareFieldTypeEnum::from('Table'))->toBe(DocuWareFieldTypeEnum::TABLE); +}); + +it('throws exception for invalid enum value', function () { + expect(fn () => DocuWareFieldTypeEnum::from('InvalidType')) + ->toThrow(ValueError::class); +}); + +it('can try to create enum from string value', function () { + expect(DocuWareFieldTypeEnum::tryFrom('String'))->toBe(DocuWareFieldTypeEnum::STRING); + expect(DocuWareFieldTypeEnum::tryFrom('InvalidType'))->toBeNull(); +}); + +it('can be used in switch statements', function () { + $fieldType = DocuWareFieldTypeEnum::STRING; + + $result = match ($fieldType) { + DocuWareFieldTypeEnum::STRING => 'text field', + DocuWareFieldTypeEnum::INT => 'numeric field', + DocuWareFieldTypeEnum::DECIMAL => 'decimal field', + DocuWareFieldTypeEnum::DATE => 'date field', + DocuWareFieldTypeEnum::DATETIME => 'datetime field', + DocuWareFieldTypeEnum::TABLE => 'table field', + }; + + expect($result)->toBe('text field'); +});