diff --git a/src/Entities/Providers/Identity/Oidc.php b/src/Entities/Providers/Identity/Oidc.php index 0394cc5246ed7126606c66d612ddecdd98c6bfaf..0ead0e2b14903484b8f7a2c3a47dbd584cdb2a72 100755 --- a/src/Entities/Providers/Identity/Oidc.php +++ b/src/Entities/Providers/Identity/Oidc.php @@ -34,7 +34,7 @@ class Oidc extends AbstractOidcProvider implements IdentityProviderInterface return $this->metadata[self::METADATA_KEY_ENTITY_ID]; } - throw new MetadataException('OpenID VersionedDataProvider metadata does not contain entity ID.'); + throw new MetadataException($this->getProviderDescription() . ' metadata does not contain entity ID.'); } protected function getProviderDescription(): string diff --git a/src/Entities/Providers/Service/Oidc.php b/src/Entities/Providers/Service/Oidc.php index d074e774c3b841d834112e3ab679a1338f74ca0d..10cb0300be2a4d12985f64f6bde1060570f5a28a 100755 --- a/src/Entities/Providers/Service/Oidc.php +++ b/src/Entities/Providers/Service/Oidc.php @@ -36,7 +36,7 @@ class Oidc extends AbstractOidcProvider implements ServiceProviderInterface return $this->metadata[self::METADATA_KEY_ENTITY_ID]; } - throw new MetadataException('Relying VersionedDataProvider metadata does not contain entity ID.'); + throw new MetadataException($this->getProviderDescription() . ' metadata does not contain entity ID.'); } protected function getProviderDescription(): string diff --git a/tests/src/Entities/Providers/Bases/AbstractOidcProviderTest.php b/tests/src/Entities/Providers/Bases/AbstractOidcProviderTest.php index 882ce99046a0111dcf3f731206b728a23a7e67fd..40dc7dccee1875fec35515ed9c29371a4a8c6531 100644 --- a/tests/src/Entities/Providers/Bases/AbstractOidcProviderTest.php +++ b/tests/src/Entities/Providers/Bases/AbstractOidcProviderTest.php @@ -1,5 +1,7 @@ <?php +declare(strict_types=1); + namespace SimpleSAML\Test\Module\accounting\Entities\Providers\Bases; use PHPUnit\Framework\MockObject\Stub; @@ -8,7 +10,6 @@ use SimpleSAML\Module\accounting\Entities\Providers\Bases\AbstractOidcProvider; use PHPUnit\Framework\TestCase; use SimpleSAML\Module\accounting\Helpers\Arr; use SimpleSAML\Module\accounting\Services\HelpersManager; -use SimpleSAML\Module\accounting\Services\JobRunner\State; use SimpleSAML\Test\Module\accounting\Constants\StateArrays; /** @@ -54,7 +55,8 @@ class AbstractOidcProviderTest extends TestCase protected function prepareInstance(array $metadata): AbstractOidcProvider { $this->helpersManagerStub->method('getArr')->willReturn($this->arrStub); - return new class($metadata, $this->helpersManagerStub) extends AbstractOidcProvider { + + return new class ($metadata, $this->helpersManagerStub) extends AbstractOidcProvider { public function getName(string $locale = self::DEFAULT_LOCALE): ?string { return 'name'; diff --git a/tests/src/Entities/Providers/Bases/AbstractSaml2ProviderTest.php b/tests/src/Entities/Providers/Bases/AbstractSaml2ProviderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..0822ec2bbda16b5fbc9eee41e08c443c54ac9bc0 --- /dev/null +++ b/tests/src/Entities/Providers/Bases/AbstractSaml2ProviderTest.php @@ -0,0 +1,136 @@ +<?php + +declare(strict_types=1); + +namespace SimpleSAML\Test\Module\accounting\Entities\Providers\Bases; + +use PHPUnit\Framework\MockObject\Stub; +use SimpleSAML\Module\accounting\Entities\Interfaces\AuthenticationProtocolInterface; +use SimpleSAML\Module\accounting\Entities\Interfaces\ProviderInterface; +use SimpleSAML\Module\accounting\Entities\Providers\Bases\AbstractSaml2Provider; +use PHPUnit\Framework\TestCase; +use SimpleSAML\Module\accounting\Exceptions\MetadataException; +use SimpleSAML\Module\accounting\Helpers\Arr; +use SimpleSAML\Module\accounting\Services\HelpersManager; +use SimpleSAML\Test\Module\accounting\Constants\StateArrays; + +/** + * @covers \SimpleSAML\Module\accounting\Entities\Providers\Bases\AbstractSaml2Provider + * @uses \SimpleSAML\Module\accounting\Entities\Bases\AbstractProvider + */ +class AbstractSaml2ProviderTest extends TestCase +{ + protected Stub $helpersManagerStub; + protected Stub $arrStub; + protected array $metadata; + + protected function setUp(): void + { + $this->helpersManagerStub = $this->createStub(HelpersManager::class); + $this->arrStub = $this->createStub(Arr::class); + $this->metadata = StateArrays::SAML2_FULL['SPMetadata']; + } + + protected function prepareInstance(array $metadata): AbstractSaml2Provider + { + $this->helpersManagerStub->method('getArr')->willReturn($this->arrStub); + + return new class ($metadata, $this->helpersManagerStub) extends AbstractSaml2Provider { + protected function getProviderDescription(): string + { + return 'service description'; + } + }; + } + + public function testCanCreateInstance(): void + { + $this->assertInstanceOf(AbstractSaml2Provider::class, $this->prepareInstance($this->metadata)); + } + + public function testCanGetName(): void + { + $metadata = $this->metadata; + $this->assertSame( + $this->metadata[AbstractSaml2Provider::METADATA_KEY_NAME], + $this->prepareInstance($metadata)->getName() + ); + + unset($metadata[AbstractSaml2Provider::METADATA_KEY_NAME]); + $this->assertSame( + $this->metadata[AbstractSaml2Provider::METADATA_KEY_UI_INFO] + [AbstractSaml2Provider::METADATA_KEY_UI_INFO_DISPLAY_NAME] + [ProviderInterface::DEFAULT_LOCALE], + $this->prepareInstance($metadata)->getName() + ); + + unset($metadata[AbstractSaml2Provider::METADATA_KEY_UI_INFO]); + $this->assertNull($this->prepareInstance($metadata)->getName()); + } + + public function testCanGetDescription(): void + { + $metadata = $this->metadata; + $this->assertSame( + $this->metadata[AbstractSaml2Provider::METADATA_KEY_DESCRIPTION], + $this->prepareInstance($metadata)->getDescription() + ); + + unset($metadata[AbstractSaml2Provider::METADATA_KEY_DESCRIPTION]); + $this->assertSame( + $this->metadata[AbstractSaml2Provider::METADATA_KEY_UI_INFO] + [AbstractSaml2Provider::METADATA_KEY_UI_INFO_DESCRIPTION] + [ProviderInterface::DEFAULT_LOCALE], + $this->prepareInstance($metadata)->getDescription() + ); + + unset($metadata[AbstractSaml2Provider::METADATA_KEY_UI_INFO]); + $this->assertNull($this->prepareInstance($metadata)->getDescription()); + } + + public function testCanGetLogo(): void + { + $this->arrStub->method('getNestedElementByKey')->willReturn(['https://example.org/logo']); + + $this->assertSame( + 'https://example.org/logo', + $this->prepareInstance($this->metadata)->getLogoUrl() + ); + } + + public function testGetLogoNotFound(): void + { + $this->arrStub->method('getNestedElementByKey')->willReturn(null); + + $this->assertNull( + $this->prepareInstance($this->metadata)->getLogoUrl() + ); + } + + public function testGetLogoIsNullIfNotValid(): void + { + $this->arrStub->method('getNestedElementByKey')->willReturn(['not-valid']); + + $this->assertNull( + $this->prepareInstance($this->metadata)->getLogoUrl() + ); + } + + public function testThrowsForInvalidEntityId(): void + { + $metadata = $this->metadata; + unset($metadata[AbstractSaml2Provider::METADATA_KEY_ENTITY_ID]); + + $this->expectException(MetadataException::class); + + $this->prepareInstance($metadata); + } + + public function testCanGetProtocol(): void + { + $this->assertInstanceOf( + AuthenticationProtocolInterface::class, + $this->prepareInstance($this->metadata)->getProtocol() + ); + } +} diff --git a/tests/src/Entities/Providers/Identity/OidcTest.php b/tests/src/Entities/Providers/Identity/OidcTest.php index 9d1a6a3852c37fccafd09ef37bde91da6f4281ed..32591e217a0a4c2d3d28c8e660d8396bb7708d8c 100755 --- a/tests/src/Entities/Providers/Identity/OidcTest.php +++ b/tests/src/Entities/Providers/Identity/OidcTest.php @@ -12,6 +12,7 @@ use SimpleSAML\Module\accounting\Exceptions\MetadataException; * @covers \SimpleSAML\Module\accounting\Entities\Providers\Identity\Oidc * @uses \SimpleSAML\Module\accounting\Entities\Bases\AbstractProvider * @uses \SimpleSAML\Module\accounting\Entities\Providers\Bases\AbstractOidcProvider + * @uses \SimpleSAML\Module\accounting\Entities\Authentication\Protocol\Oidc */ class OidcTest extends TestCase { diff --git a/tests/src/Entities/Providers/Service/OidcTest.php b/tests/src/Entities/Providers/Service/OidcTest.php index a1445d473f720656bba13adc4e20af97d8f5c9e4..dbba56c8fed584fb7ed1feb2126b08d4d84bef44 100755 --- a/tests/src/Entities/Providers/Service/OidcTest.php +++ b/tests/src/Entities/Providers/Service/OidcTest.php @@ -12,6 +12,7 @@ use SimpleSAML\Module\accounting\Exceptions\MetadataException; * @covers \SimpleSAML\Module\accounting\Entities\Providers\Service\Oidc * @uses \SimpleSAML\Module\accounting\Entities\Bases\AbstractProvider * @uses \SimpleSAML\Module\accounting\Entities\Providers\Bases\AbstractOidcProvider + * @uses \SimpleSAML\Module\accounting\Entities\Authentication\Protocol\Oidc */ class OidcTest extends TestCase { diff --git a/tests/src/Helpers/ArrayTest.php b/tests/src/Helpers/ArrayTest.php index c1a409a060f58e87f8c5e6354d15f2330f4dd94b..2ad8905cc1236493d8ee658dc0f490c005f64a0f 100755 --- a/tests/src/Helpers/ArrayTest.php +++ b/tests/src/Helpers/ArrayTest.php @@ -82,6 +82,7 @@ class ArrayTest extends TestCase $this->assertSame($arrHelper->getNestedElementByKey($simpleIndexed, 0), [1]); $this->assertNull($arrHelper->getNestedElementByKey($simpleIndexed, 3)); $this->assertNull($arrHelper->getNestedElementByKey($simpleIndexed, 'a')); + $this->assertNull($arrHelper->getNestedElementByKey($simpleIndexed, 0, 'a')); $this->assertSame($arrHelper->getNestedElementByKey($nestedIndexed, 0), [1, [2, [4, [5]]]]); $this->assertSame($arrHelper->getNestedElementByKey($nestedIndexed, 0), [1, [2, [4, [5]]]]); diff --git a/tests/src/Helpers/ProviderResolverTest.php b/tests/src/Helpers/ProviderResolverTest.php index 1e7f3fe5e7bae7ce2df95c6355f2854496ab381f..854e1af69375e87281c090ef48f6f4e63d879a68 100755 --- a/tests/src/Helpers/ProviderResolverTest.php +++ b/tests/src/Helpers/ProviderResolverTest.php @@ -22,7 +22,9 @@ use SimpleSAML\Test\Module\accounting\Constants\StateArrays; * @uses \SimpleSAML\Module\accounting\Entities\Providers\Service\Saml2 * @uses \SimpleSAML\Module\accounting\Entities\Providers\Service\Oidc * @uses \SimpleSAML\Module\accounting\Entities\Providers\Bases\AbstractSaml2Provider + * @uses \SimpleSAML\Module\accounting\Entities\Providers\Bases\AbstractOidcProvider * @uses \SimpleSAML\Module\accounting\Entities\Authentication\Protocol\Saml2 + * @uses \SimpleSAML\Module\accounting\Entities\Authentication\Protocol\Oidc */ class ProviderResolverTest extends TestCase {