diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 00000000..1a939bf4 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,9 @@ +{ + "permissions": { + "allow": [ + "Bash(git rev-list *)", + "Bash(./vendor/bin/phpunit --filter 'SdkConfigBuilderTest|SessionConfigurationResponseTest')", + "Bash(git config *)" + ] + } +} diff --git a/src/DocScan/Session/Create/SdkConfig.php b/src/DocScan/Session/Create/SdkConfig.php index 60b43fb7..1a9bf8aa 100644 --- a/src/DocScan/Session/Create/SdkConfig.php +++ b/src/DocScan/Session/Create/SdkConfig.php @@ -296,4 +296,19 @@ public function getSuppressedScreens(): ?array { return $this->suppressedScreens; } + + /** + * Returns true when the given screen identifier has been configured to be suppressed. + * + * @param string $screenIdentifier + * @return bool + */ + public function isScreenSuppressed(string $screenIdentifier): bool + { + if ($this->suppressedScreens === null) { + return false; + } + + return in_array($screenIdentifier, $this->suppressedScreens, true); + } } diff --git a/src/DocScan/Session/Create/SuppressedScreen.php b/src/DocScan/Session/Create/SuppressedScreen.php new file mode 100644 index 00000000..30505078 --- /dev/null +++ b/src/DocScan/Session/Create/SuppressedScreen.php @@ -0,0 +1,16 @@ +jsonSerialize(); $this->assertFalse(property_exists($jsonData, 'suppressed_screens')); } + + /** + * @test + * @covers ::withSuppressedScreens + * @covers \Yoti\DocScan\Session\Create\SdkConfig::getSuppressedScreens + */ + public function shouldAllowEmptySuppressedScreensArray() + { + $result = (new SdkConfigBuilder()) + ->withSuppressedScreens([]) + ->build(); + + $this->assertSame([], $result->getSuppressedScreens()); + } + + /** + * @test + * @covers ::withSuppressedScreens + * @covers \Yoti\DocScan\Session\Create\SdkConfig::getSuppressedScreens + */ + public function shouldBuildUsingSuppressedScreenConstants() + { + $suppressedScreens = [ + SuppressedScreen::ID_DOCUMENT_EDUCATION, + SuppressedScreen::ID_DOCUMENT_REQUIREMENTS, + SuppressedScreen::SUPPLEMENTARY_DOCUMENT_EDUCATION, + SuppressedScreen::ZOOM_LIVENESS_EDUCATION, + SuppressedScreen::STATIC_LIVENESS_EDUCATION, + SuppressedScreen::FACE_CAPTURE_EDUCATION, + SuppressedScreen::FLOW_COMPLETION, + ]; + + $result = (new SdkConfigBuilder()) + ->withSuppressedScreens($suppressedScreens) + ->build(); + + $this->assertEquals($suppressedScreens, $result->getSuppressedScreens()); + } + + /** + * @test + * @covers \Yoti\DocScan\Session\Create\SuppressedScreen + */ + public function suppressedScreenConstantsShouldHaveExpectedValues() + { + $this->assertSame('ID_DOCUMENT_EDUCATION', SuppressedScreen::ID_DOCUMENT_EDUCATION); + $this->assertSame('ID_DOCUMENT_REQUIREMENTS', SuppressedScreen::ID_DOCUMENT_REQUIREMENTS); + $this->assertSame( + 'SUPPLEMENTARY_DOCUMENT_EDUCATION', + SuppressedScreen::SUPPLEMENTARY_DOCUMENT_EDUCATION + ); + $this->assertSame('ZOOM_LIVENESS_EDUCATION', SuppressedScreen::ZOOM_LIVENESS_EDUCATION); + $this->assertSame('STATIC_LIVENESS_EDUCATION', SuppressedScreen::STATIC_LIVENESS_EDUCATION); + $this->assertSame('FACE_CAPTURE_EDUCATION', SuppressedScreen::FACE_CAPTURE_EDUCATION); + $this->assertSame('FLOW_COMPLETION', SuppressedScreen::FLOW_COMPLETION); + } + + /** + * @test + * @covers \Yoti\DocScan\Session\Create\SdkConfig::isScreenSuppressed + */ + public function isScreenSuppressedShouldReturnTrueForListedScreen() + { + $result = (new SdkConfigBuilder()) + ->withSuppressedScreens([ + SuppressedScreen::ID_DOCUMENT_EDUCATION, + SuppressedScreen::FLOW_COMPLETION, + ]) + ->build(); + + $this->assertTrue($result->isScreenSuppressed(SuppressedScreen::ID_DOCUMENT_EDUCATION)); + $this->assertTrue($result->isScreenSuppressed(SuppressedScreen::FLOW_COMPLETION)); + } + + /** + * @test + * @covers \Yoti\DocScan\Session\Create\SdkConfig::isScreenSuppressed + */ + public function isScreenSuppressedShouldReturnFalseForUnlistedScreen() + { + $result = (new SdkConfigBuilder()) + ->withSuppressedScreen(SuppressedScreen::ID_DOCUMENT_EDUCATION) + ->build(); + + $this->assertFalse($result->isScreenSuppressed(SuppressedScreen::FLOW_COMPLETION)); + } + + /** + * @test + * @covers \Yoti\DocScan\Session\Create\SdkConfig::isScreenSuppressed + */ + public function isScreenSuppressedShouldReturnFalseWhenSuppressedScreensIsNull() + { + $result = (new SdkConfigBuilder())->build(); + + $this->assertFalse($result->isScreenSuppressed(SuppressedScreen::ID_DOCUMENT_EDUCATION)); + } + + /** + * @test + * @covers \Yoti\DocScan\Session\Create\SdkConfig::isScreenSuppressed + */ + public function isScreenSuppressedShouldBeCaseSensitive() + { + $result = (new SdkConfigBuilder()) + ->withSuppressedScreen(SuppressedScreen::ID_DOCUMENT_EDUCATION) + ->build(); + + $this->assertFalse($result->isScreenSuppressed('id_document_education')); + } }