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
 {