diff --git a/README.md b/README.md index 0211188..bc44e7f 100644 --- a/README.md +++ b/README.md @@ -230,6 +230,8 @@ You may provide the following as envelopes: ## Changelog +* `1.5.3` + * Added optional `deepfake` and `deepfake_confidence` fields for document event * `1.5.2` * Fixed validation of `second_user_merchant_id` field for the "Transfer" event * `1.5.1` diff --git a/src/Envelopes/Builder.php b/src/Envelopes/Builder.php index 044091f..1636ef4 100644 --- a/src/Envelopes/Builder.php +++ b/src/Envelopes/Builder.php @@ -2050,6 +2050,8 @@ public static function postBackEvent( * @param string|null $translatedExtractedText * @param string|null $translatedFrom * @param string|null $translatedTo + * @param string|null $deepfake + * @param string|null $deepfakeConfidence * * @return Builder */ @@ -2105,7 +2107,9 @@ public static function documentEvent( $textLanguageDetails = null, $translatedExtractedText = null, $translatedFrom = null, - $translatedTo = null + $translatedTo = null, + $deepfake = null, + $deepfakeConfidence = null ) { $sequenceId = $sequenceId ?? ''; $builder = new self(self::EVENT_DOCUMENT, $sequenceId); @@ -2152,7 +2156,9 @@ public static function documentEvent( $textLanguageDetails, $translatedExtractedText, $translatedFrom, - $translatedTo + $translatedTo, + $deepfake, + $deepfakeConfidence ) ->addUserData( $email, @@ -5148,6 +5154,8 @@ public function addKycSubmitData( * @param string|null $translatedExtractedText * @param string|null $translatedFrom * @param string|null $translatedTo + * @param string|null $deepfake + * @param string|null $deepfakeConfidence * @return Builder */ public function addDocumentEventData( @@ -5189,7 +5197,9 @@ public function addDocumentEventData( $textLanguageDetails = null, $translatedExtractedText = null, $translatedFrom = null, - $translatedTo = null + $translatedTo = null, + $deepfake = null, + $deepfakeConfidence = null ) { if (!is_string($eventId)) { throw new \InvalidArgumentException('Event ID must be string'); @@ -5248,7 +5258,7 @@ public function addDocumentEventData( } if ($amount !== null) { if (!is_float($amount)) { - throw new \InvalidArgumentException('Amount must be must be float'); + throw new \InvalidArgumentException('Amount must be float'); } if ($amount < 0) { throw new \InvalidArgumentException('Amount cannot be negative'); @@ -5333,6 +5343,20 @@ public function addDocumentEventData( if ($translatedTo !== null && !is_string($translatedTo)) { throw new \InvalidArgumentException('Translated To must be string'); } + if ($deepfake !== null && !is_bool($deepfake)) { + throw new \InvalidArgumentException('Deepfake enabled flag must be boolean'); + } + if ($deepfakeConfidence !== null) { + if (!is_int($deepfakeConfidence) && !is_float($deepfakeConfidence)) { + throw new \InvalidArgumentException('Deepfake confidence must be number'); + } + if ($deepfakeConfidence < 0) { + throw new \InvalidArgumentException('Deepfake confidence cannot be negative'); + } + if ($deepfakeConfidence > 1) { + throw new \InvalidArgumentException('Deepfake confidence cannot be greater than 1'); + } + } $this->replace('event_id', $eventId); $this->replace('event_timestamp', $eventTimestamp); @@ -5373,6 +5397,8 @@ public function addDocumentEventData( $this->replace('translated_extracted_text', $translatedExtractedText); $this->replace('translated_from', $translatedFrom); $this->replace('translated_to', $translatedTo); + $this->replace('deepfake', $deepfake); + $this->replaceZeroAllowed('deepfake_confidence', $deepfakeConfidence); return $this; } diff --git a/src/Envelopes/ValidatorV1.php b/src/Envelopes/ValidatorV1.php index cf4bb77..6c12c5b 100644 --- a/src/Envelopes/ValidatorV1.php +++ b/src/Envelopes/ValidatorV1.php @@ -271,7 +271,9 @@ class ValidatorV1 'text_language_details' => 'array_string', 'translated_extracted_text' => 'string(225)', 'translated_from' => 'string(225)', - 'translated_to' => 'string(225)' + 'translated_to' => 'string(225)', + 'deepfake' => 'bool', + 'deepfake_confidence' => 'float' ); private static $fieldWithZeroAllowed = array( @@ -997,6 +999,8 @@ class ValidatorV1 "translated_extracted_text", "translated_from", "translated_to", + "deepfake", + "deepfake_confidence", ) ), ); diff --git a/tests/Covery/BuildDocumentEventTest.php b/tests/Covery/BuildDocumentEventTest.php index 8968732..86a08a5 100644 --- a/tests/Covery/BuildDocumentEventTest.php +++ b/tests/Covery/BuildDocumentEventTest.php @@ -63,10 +63,12 @@ public function testBuild() ['en'], 'testTranslatedExtractedText', 'testTranslatedFrom', - 'testTranslatedTo' + 'testTranslatedTo', + false, + 0.12 )->build(); - self::assertCount(51, $result); + self::assertCount(53, $result); self::assertSame(Builder::EVENT_DOCUMENT, $result->getType()); self::assertSame('tempSequenceId', $result->getSequenceId()); self::assertSame('tempEventId', $result['event_id']); @@ -119,7 +121,8 @@ public function testBuild() self::assertSame(['en'], $result['text_language_details']); self::assertSame("testTranslatedExtractedText", $result['translated_extracted_text']); self::assertSame("testTranslatedFrom", $result['translated_from']); - self::assertSame("testTranslatedTo", $result['translated_to']); + self::assertSame(false, $result['deepfake']); + self::assertSame(0.12, $result['deepfake_confidence']); $validator->validate($result); @@ -258,4 +261,128 @@ public function testEventExpectInvalidArgumentExceptionForNegativeAmountConverte -34.5 )->build(); } + + public function testEventExpectInvalidArgumentExceptionForNegativeDeepfakeConfidence() + { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage("Deepfake confidence cannot be negative"); + Builder::documentEvent( + 'tempEventId', + 123456, + 'tempUserId', + \Covery\Client\DocumentType::INTERNATIONAL_PASSPORT, + 'tempSequenceId', + 'tempGroupId', + 'tempDocumentCountry', + 'tempDocumentNumber', + 'tempFileName', + 'tempEmail', + 'tempFirstName', + 'tempLastName', + 'tempFullname', + 123456, + 18, + 'tempGender', + 'tempNationality', + 'tempCountry', + 'tempCity', + 'tempZip', + 'tempAddress', + 123456, + 123456, + 'tempAuthority', + 'testRecordNumber', + 'testPersonalNumber', + 'testDescription', + 10.4, + 'testPaymentMethod', + 23.6, + 34.5, + 'testCurrency', + 'testMrzDocumentType', + 'testMrzCountry', + 'testMrzLastname', + 'testMrzFirstname', + 'testMrzFullname', + 'testMrzDocumentNumber', + 'testMrzNationality', + 'testMrzPersonalNumber', + 123456, + 'testMrzGender', + 123456, + 'testMrzRecordNumber', + false, + 'tempMrzAuthority', + 123456, + 'testExtractedText', + ['en'], + 'testTranslatedExtractedText', + 'testTranslatedFrom', + 'testTranslatedTo', + false, + -0.12 + )->build(); + } + + public function testEventExpectInvalidArgumentExceptionForGreaterThanOneDeepfakeConfidence() + { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage("Deepfake confidence cannot be greater than 1"); + Builder::documentEvent( + 'tempEventId', + 123456, + 'tempUserId', + \Covery\Client\DocumentType::INTERNATIONAL_PASSPORT, + 'tempSequenceId', + 'tempGroupId', + 'tempDocumentCountry', + 'tempDocumentNumber', + 'tempFileName', + 'tempEmail', + 'tempFirstName', + 'tempLastName', + 'tempFullname', + 123456, + 18, + 'tempGender', + 'tempNationality', + 'tempCountry', + 'tempCity', + 'tempZip', + 'tempAddress', + 123456, + 123456, + 'tempAuthority', + 'testRecordNumber', + 'testPersonalNumber', + 'testDescription', + 10.4, + 'testPaymentMethod', + 23.6, + 34.5, + 'testCurrency', + 'testMrzDocumentType', + 'testMrzCountry', + 'testMrzLastname', + 'testMrzFirstname', + 'testMrzFullname', + 'testMrzDocumentNumber', + 'testMrzNationality', + 'testMrzPersonalNumber', + 123456, + 'testMrzGender', + 123456, + 'testMrzRecordNumber', + false, + 'tempMrzAuthority', + 123456, + 'testExtractedText', + ['en'], + 'testTranslatedExtractedText', + 'testTranslatedFrom', + 'testTranslatedTo', + false, + 1.12 + )->build(); + } }