From d5b77e96079085723298890b5a5cbe40f712b7b2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marko=20Ivan=C4=8Di=C4=87?= <marko.ivancic@srce.hr>
Date: Mon, 10 Jul 2023 16:23:29 +0200
Subject: [PATCH] WIP

---
 tests/src/Constants/StateArrays.php           |  1 +
 .../Bases/AbstractOidcProviderTest.php        | 79 +++++++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 tests/src/Entities/Providers/Bases/AbstractOidcProviderTest.php

diff --git a/tests/src/Constants/StateArrays.php b/tests/src/Constants/StateArrays.php
index 3d844cd..8b4b425 100755
--- a/tests/src/Constants/StateArrays.php
+++ b/tests/src/Constants/StateArrays.php
@@ -249,6 +249,7 @@ final class StateArrays
                 'owner' => null,
                 'post_logout_redirect_uri' => [],
                 'backchannel_logout_uri' => 'http://sp.host.internal:8074/logout.php',
+                'logo_uri' => 'http://sp.host.internal:8074/logo.svg',
             ],
             'AuthorizationRequestParameters' => [
                 'response_type' => 'code',
diff --git a/tests/src/Entities/Providers/Bases/AbstractOidcProviderTest.php b/tests/src/Entities/Providers/Bases/AbstractOidcProviderTest.php
new file mode 100644
index 0000000..882ce99
--- /dev/null
+++ b/tests/src/Entities/Providers/Bases/AbstractOidcProviderTest.php
@@ -0,0 +1,79 @@
+<?php
+
+namespace SimpleSAML\Test\Module\accounting\Entities\Providers\Bases;
+
+use PHPUnit\Framework\MockObject\Stub;
+use SimpleSAML\Module\accounting\Entities\Authentication\Protocol\Oidc;
+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;
+
+/**
+ * @covers \SimpleSAML\Module\accounting\Entities\Providers\Bases\AbstractOidcProvider
+ * @uses \SimpleSAML\Module\accounting\Entities\Bases\AbstractProvider
+ */
+class AbstractOidcProviderTest 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::OIDC_FULL['Oidc']['RelyingPartyMetadata'];
+    }
+
+    public function testCanCreateInstance(): void
+    {
+        $this->assertInstanceOf(AbstractOidcProvider::class, $this->prepareInstance(StateArrays::OIDC_FULL));
+    }
+
+    public function testCanGetLogoUrl(): void
+    {
+        $this->assertSame(
+            $this->metadata['logo_uri'],
+            $this->prepareInstance($this->metadata)->getLogoUrl()
+        );
+
+        $metadaNoLogo = $this->metadata;
+        unset($metadaNoLogo['logo_uri']);
+
+        $this->assertNull($this->prepareInstance($metadaNoLogo)->getLogoUrl());
+    }
+
+    public function testCanGetProtocol(): void
+    {
+        $this->assertInstanceOf(Oidc::class, $this->prepareInstance($this->metadata)->getProtocol());
+    }
+
+    protected function prepareInstance(array $metadata): AbstractOidcProvider
+    {
+        $this->helpersManagerStub->method('getArr')->willReturn($this->arrStub);
+        return new class($metadata, $this->helpersManagerStub) extends AbstractOidcProvider {
+            public function getName(string $locale = self::DEFAULT_LOCALE): ?string
+            {
+                return 'name';
+            }
+
+            public function getDescription(string $locale = self::DEFAULT_LOCALE): ?string
+            {
+                return 'description';
+            }
+
+            protected function resolveEntityId(): string
+            {
+                return 'entityId';
+            }
+
+            protected function getProviderDescription(): string
+            {
+                return 'provider description';
+            }
+        };
+    }
+}
-- 
GitLab