From 5912af66b180bd98b821aeccdbece491296e3ddb Mon Sep 17 00:00:00 2001 From: sebastianMindee <130448732+sebastianMindee@users.noreply.github.com> Date: Wed, 25 Mar 2026 14:17:20 +0100 Subject: [PATCH 1/3] :bug: fix curl lib not registering webhooks correctly --- .github/workflows/_test-integrations.yml | 3 ++- src/V2/ClientOptions/BaseParameters.php | 12 ++-------- tests/V2/ClientOptions/BaseParametersTest.php | 23 +++++++++++++++++++ tests/V2/ClientV2TestFunctional.php | 17 +++++++++++++- tests/V2/Parsing/JobResponseTest.php | 2 ++ 5 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 tests/V2/ClientOptions/BaseParametersTest.php 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/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); } /** From dc2be8477b2ea0d80519c4192b3debc7453a5290 Mon Sep 17 00:00:00 2001 From: sebastianMindee <130448732+sebastianMindee@users.noreply.github.com> Date: Wed, 25 Mar 2026 15:27:37 +0100 Subject: [PATCH 2/3] fix webhook property init --- src/Parsing/V2/Job.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 = []; } } From c98ee2f44eca90f2512d4a26b26a514eb67b315e Mon Sep 17 00:00:00 2001 From: sebastianMindee <130448732+sebastianMindee@users.noreply.github.com> Date: Thu, 26 Mar 2026 12:59:58 +0100 Subject: [PATCH 3/3] fix tests --- .github/workflows/_test-smoke.yml | 17 ++++++++--------- ...de_samples_v1.sh => test_v1_code_samples.sh} | 0 ...de_samples_v2.sh => test_v2_code_samples.sh} | 12 ++++++------ 3 files changed, 14 insertions(+), 15 deletions(-) rename tests/{test_code_samples_v1.sh => test_v1_code_samples.sh} (100%) rename tests/{test_code_samples_v2.sh => test_v2_code_samples.sh} (78%) 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/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