diff --git a/.github/workflows/_test-integrations.yml b/.github/workflows/_test-integrations.yml index 3273777f..e2f7ef90 100644 --- a/.github/workflows/_test-integrations.yml +++ b/.github/workflows/_test-integrations.yml @@ -13,7 +13,8 @@ env: MINDEE_API_KEY: ${{ secrets.MINDEE_API_KEY_SE_TESTS }} WORKFLOW_ID: ${{ secrets.WORKFLOW_ID_SE_TESTS }} MINDEE_V2_API_KEY: ${{ secrets.MINDEE_V2_SE_TESTS_API_KEY }} - MINDEE_V2_FAILURE_WEBHOOK_ID: ${{ secrets.MINDEE_V2_SE_TESTS_FAILURE_WEBHOOK_ID }} + MINDEE_V2_FAILURE_WEBHOOK_ID: ${{ secrets.MINDEE_V2_SE_TESTS_WEBHOOK_ID }} + MINDEE_V2_SE_TESTS_FAILURE_WEBHOOK_ID: ${{ secrets.MINDEE_V2_SE_TESTS_FAILURE_WEBHOOK_ID }} MINDEE_V2_FINDOC_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID }} MINDEE_V2_SE_TESTS_BLANK_PDF_URL: ${{ secrets.MINDEE_V2_SE_TESTS_BLANK_PDF_URL }} MINDEE_V2_CLASSIFICATION_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID }} diff --git a/.github/workflows/_test-smoke.yml b/.github/workflows/_test-smoke.yml index 4fe960f6..6d05b405 100644 --- a/.github/workflows/_test-smoke.yml +++ b/.github/workflows/_test-smoke.yml @@ -8,14 +8,13 @@ env: MINDEE_ACCOUNT_SE_TESTS: ${{ secrets.MINDEE_ACCOUNT_SE_TESTS }} MINDEE_ENDPOINT_SE_TESTS: ${{ secrets.MINDEE_ENDPOINT_SE_TESTS }} MINDEE_API_KEY: ${{ secrets.MINDEE_API_KEY_SE_TESTS }} - WORKFLOW_ID: ${{ secrets.WORKFLOW_ID_SE_TESTS }} MINDEE_V2_API_KEY: ${{ secrets.MINDEE_V2_SE_TESTS_API_KEY }} - MINDEE_V2_FINDOC_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID }} - MINDEE_V2_SE_TESTS_BLANK_PDF_URL: ${{ secrets.MINDEE_V2_SE_TESTS_BLANK_PDF_URL }} - MINDEE_V2_CLASSIFICATION_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID }} - MINDEE_V2_CROP_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CROP_MODEL_ID }} - MINDEE_V2_OCR_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_OCR_MODEL_ID }} - MINDEE_V2_SPLIT_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID }} + MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID }} + MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID }} + MINDEE_V2_SE_TESTS_CROP_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_CROP_MODEL_ID }} + MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID }} + MINDEE_V2_SE_TESTS_OCR_MODEL_ID: ${{ secrets.MINDEE_V2_SE_TESTS_OCR_MODEL_ID }} + MINDEE_V2_SE_TESTS_FAILURE_WEBHOOK_ID: ${{ secrets.MINDEE_V2_SE_TESTS_FAILURE_WEBHOOK_ID }} jobs: test: @@ -41,8 +40,8 @@ jobs: - name: Tests V2 code samples run: | - ./tests/test_code_samples_v2.sh + ./tests/test_v2_code_samples.sh - name: Tests V1 code samples run: | - ./tests/test_code_samples_v1.sh ${{ secrets.MINDEE_ACCOUNT_SE_TESTS }} ${{ secrets.MINDEE_ENDPOINT_SE_TESTS }} + ./tests/test_v1_code_samples.sh ${{ secrets.MINDEE_ACCOUNT_SE_TESTS }} ${{ secrets.MINDEE_ENDPOINT_SE_TESTS }} diff --git a/src/Parsing/V2/Job.php b/src/Parsing/V2/Job.php index 395465d7..d6701c73 100644 --- a/src/Parsing/V2/Job.php +++ b/src/Parsing/V2/Job.php @@ -91,12 +91,11 @@ public function __construct(array $serverResponse) $this->filename = $serverResponse['filename']; $this->resultUrl = $serverResponse['result_url'] ?? null; $this->alias = $serverResponse['alias']; + $this->webhooks = []; if (array_key_exists("webhooks", $serverResponse)) { foreach ($serverResponse['webhooks'] as $webhook) { $this->webhooks[] = new JobWebhook($webhook); } - } else { - $this->webhooks = []; } } diff --git a/src/V2/ClientOptions/BaseParameters.php b/src/V2/ClientOptions/BaseParameters.php index 4b4a8465..a156fb3e 100644 --- a/src/V2/ClientOptions/BaseParameters.php +++ b/src/V2/ClientOptions/BaseParameters.php @@ -63,17 +63,9 @@ public function asHash(): array $outHash['alias'] = $this->alias; } + if (isset($this->webhooksIds) && count($this->webhooksIds) > 0) { - if (PHP_VERSION_ID < 80200 && count($this->webhooksIds) > 1) { - // NOTE: see https://bugs.php.net/bug.php?id=51634 - error_log("PHP version is too low to support webbook array destructuring. - \nOnly the first webhook ID will be sent to the server."); - $outHash['webhook_ids'] = $this->webhooksIds[0]; - } else { - foreach ($this->webhooksIds as $webhookId) { - $outHash['webhook_ids[]'] = $webhookId; - } - } + $outHash['webhook_ids'] = implode(',', $this->webhooksIds); } return $outHash; } diff --git a/tests/V2/ClientOptions/BaseParametersTest.php b/tests/V2/ClientOptions/BaseParametersTest.php new file mode 100644 index 00000000..f727299e --- /dev/null +++ b/tests/V2/ClientOptions/BaseParametersTest.php @@ -0,0 +1,23 @@ +asHash(); + + $this->assertArrayHasKey('model_id', $hash); + $this->assertArrayHasKey('webhook_ids', $hash); + $this->assertSame('model-id', $hash['model_id']); + $this->assertSame('first-id,second-id', $hash['webhook_ids']); + } +} diff --git a/tests/V2/ClientV2TestFunctional.php b/tests/V2/ClientV2TestFunctional.php index bcef7162..e2e70991 100644 --- a/tests/V2/ClientV2TestFunctional.php +++ b/tests/V2/ClientV2TestFunctional.php @@ -177,7 +177,8 @@ public function testUrlInputSourceMustNotRaiseErrors(): void $this->assertNotNull($result); } - public function testDataSchemaMustSucceed(): void { + public function testDataSchemaMustSucceed(): void + { $source = new PathInput( TestingUtilities::getFileTypesDir() . '/pdf/blank_1.pdf' @@ -214,4 +215,18 @@ public function testDataSchemaMustSucceed(): void { $result->fields['test_replace']->value ); } + + public function testMultipleWebhooksMustSucceed(): void + { + $source = new PathInput( + TestingUtilities::getFileTypesDir() . '/pdf/blank_1.pdf' + ); + + $inferenceParams = new InferenceParameters($this->modelId, webhooksIds: [ + getenv('MINDEE_V2_FAILURE_WEBHOOK_ID'), + getenv('MINDEE_V2_SE_TESTS_FAILURE_WEBHOOK_ID')] + ); + $response = $this->mindeeClient->enqueue($source, $inferenceParams); + $this->assertEquals(2, count($response->job->webhooks)); + } } diff --git a/tests/V2/Parsing/JobResponseTest.php b/tests/V2/Parsing/JobResponseTest.php index 070a2826..0a09d4d5 100644 --- a/tests/V2/Parsing/JobResponseTest.php +++ b/tests/V2/Parsing/JobResponseTest.php @@ -39,6 +39,8 @@ public function testShouldLoadWhenStatusIsProcessing(): void $this->assertSame('Processing', $response->job->status); $this->assertNull($response->job->completedAt); $this->assertNull($response->job->error); + $this->assertIsArray($response->job->webhooks); + $this->assertCount(0, $response->job->webhooks); } /** diff --git a/tests/test_code_samples_v1.sh b/tests/test_v1_code_samples.sh similarity index 100% rename from tests/test_code_samples_v1.sh rename to tests/test_v1_code_samples.sh diff --git a/tests/test_code_samples_v2.sh b/tests/test_v2_code_samples.sh similarity index 78% rename from tests/test_code_samples_v2.sh rename to tests/test_v2_code_samples.sh index 345f8617..935e945e 100755 --- a/tests/test_code_samples_v2.sh +++ b/tests/test_v2_code_samples.sh @@ -41,28 +41,28 @@ do if echo "${f}" | grep -q "v2_classification" then - sed -i "s/MY_MODEL_ID/${MINDEE_V2_CLASSIFICATION_MODEL_ID}/" $OUTPUT_FILE + sed -i "s/MY_MODEL_ID/${MINDEE_V2_SE_TESTS_CLASSIFICATION_MODEL_ID}/" $OUTPUT_FILE fi if echo "${f}" | grep -q "v2_crop" then - sed -i "s/MY_MODEL_ID/${MINDEE_V2_CROP_MODEL_ID}/" $OUTPUT_FILE + sed -i "s/MY_MODEL_ID/${MINDEE_V2_SE_TESTS_CROP_MODEL_ID}/" $OUTPUT_FILE fi if echo "${f}" | grep -q "v2_extraction" then - sed -i "s/MY_MODEL_ID/${MINDEE_V2_FINDOC_MODEL_ID}/" $OUTPUT_FILE - sed -i "s/MY_WEBHOOK_ID/${MINDEE_V2_FAILURE_WEBHOOK_ID}/" $OUTPUT_FILE + sed -i "s/MY_MODEL_ID/${MINDEE_V2_SE_TESTS_FINDOC_MODEL_ID}/" $OUTPUT_FILE + sed -i "s/MY_WEBHOOK_ID/${MINDEE_V2_SE_TESTS_FAILURE_WEBHOOK_ID}/" $OUTPUT_FILE fi if echo "${f}" | grep -q "v2_ocr" then - sed -i "s/MY_MODEL_ID/${MINDEE_V2_OCR_MODEL_ID}/" $OUTPUT_FILE + sed -i "s/MY_MODEL_ID/${MINDEE_V2_SE_TESTS_OCR_MODEL_ID}/" $OUTPUT_FILE fi if echo "${f}" | grep -q "v2_split" then - sed -i "s/MY_MODEL_ID/${MINDEE_V2_SPLIT_MODEL_ID}/" $OUTPUT_FILE + sed -i "s/MY_MODEL_ID/${MINDEE_V2_SE_TESTS_SPLIT_MODEL_ID}/" $OUTPUT_FILE fi echo