From dbd63222c890127307a0106db5fda35b74929523 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Julius=20H=C3=A4rtl?= <jus@bitgrid.net>
Date: Fri, 6 Mar 2020 13:08:51 +0100
Subject: [PATCH] Add system config flag to manually set that a subscription is
 available
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Julius Härtl <jus@bitgrid.net>
---
 .../Controller/AdminSettingsControllerTest.php |  4 +++-
 lib/private/Support/Subscription/Registry.php  | 13 +++++++++++++
 .../lib/Support/Subscription/RegistryTest.php  | 18 +++++++++++++++++-
 3 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/apps/settings/tests/Controller/AdminSettingsControllerTest.php b/apps/settings/tests/Controller/AdminSettingsControllerTest.php
index 9a82fd97854..c20067ddfc3 100644
--- a/apps/settings/tests/Controller/AdminSettingsControllerTest.php
+++ b/apps/settings/tests/Controller/AdminSettingsControllerTest.php
@@ -37,6 +37,7 @@ use OCP\IRequest;
 use OCP\IUser;
 use OCP\IUserSession;
 use OCP\Settings\IManager;
+use OCP\Support\Subscription\IRegistry;
 use PHPUnit\Framework\MockObject\MockObject;
 use Test\TestCase;
 
@@ -99,6 +100,7 @@ class AdminSettingsControllerTest extends TestCase {
 
 	public function testIndex() {
 		$user = $this->createMock(IUser::class);
+		$registry = $this->createMock(IRegistry::class);
 		$this->userSession
 			->method('getUser')
 			->willReturn($user);
@@ -123,7 +125,7 @@ class AdminSettingsControllerTest extends TestCase {
 			->expects($this->once())
 			->method('getAdminSettings')
 			->with('test')
-			->willReturn([5 => new ServerDevNotice()]);
+			->willReturn([5 => new ServerDevNotice($registry)]);
 
 		$idx = $this->adminSettingsController->index('test');
 
diff --git a/lib/private/Support/Subscription/Registry.php b/lib/private/Support/Subscription/Registry.php
index dfcff8ff96a..f0d946a2911 100644
--- a/lib/private/Support/Subscription/Registry.php
+++ b/lib/private/Support/Subscription/Registry.php
@@ -27,6 +27,7 @@ declare(strict_types=1);
 
 namespace OC\Support\Subscription;
 
+use OCP\IConfig;
 use OCP\Support\Subscription\Exception\AlreadyRegisteredException;
 use OCP\Support\Subscription\IRegistry;
 use OCP\Support\Subscription\ISubscription;
@@ -37,6 +38,13 @@ class Registry implements IRegistry {
 	/** @var ISubscription */
 	private $subscription = null;
 
+	/** @var IConfig */
+	private $config;
+
+	public function __construct(IConfig $config) {
+		$this->config = $config;
+	}
+
 	/**
 	 * Register a subscription instance. In case it is called multiple times the
 	 * first one is used.
@@ -71,6 +79,11 @@ class Registry implements IRegistry {
 	 * @since 17.0.0
 	 */
 	public function delegateHasValidSubscription(): bool {
+		// Allow overwriting this manually for environments where the subscription information cannot be fetched
+		if ($this->config->getSystemValueBool('has_valid_subscription')) {
+			return true;
+		}
+
 		if ($this->subscription instanceof ISubscription) {
 			return $this->subscription->hasValidSubscription();
 		}
diff --git a/tests/lib/Support/Subscription/RegistryTest.php b/tests/lib/Support/Subscription/RegistryTest.php
index 3793026be0f..3e316792682 100644
--- a/tests/lib/Support/Subscription/RegistryTest.php
+++ b/tests/lib/Support/Subscription/RegistryTest.php
@@ -23,8 +23,10 @@
 namespace Test\Support\Subscription;
 
 use OC\Support\Subscription\Registry;
+use OCP\IConfig;
 use OCP\Support\Subscription\ISubscription;
 use OCP\Support\Subscription\ISupportedApps;
+use PHPUnit\Framework\MockObject\MockObject;
 use Test\TestCase;
 
 class RegistryTest extends TestCase {
@@ -32,10 +34,14 @@ class RegistryTest extends TestCase {
 	/** @var Registry */
 	private $registry;
 
+	/** @var MockObject|IConfig */
+	private $config;
+
 	protected function setUp(): void {
 		parent::setUp();
 
-		$this->registry = new Registry();
+		$this->config = $this->createMock(IConfig::class);
+		$this->registry = new Registry($this->config);
 	}
 
 	/**
@@ -74,6 +80,16 @@ class RegistryTest extends TestCase {
 		$this->assertSame(true, $this->registry->delegateHasValidSubscription());
 	}
 
+	public function testDelegateHasValidSubscriptionConfig() {
+		/* @var ISubscription|\PHPUnit_Framework_MockObject_MockObject $subscription */
+		$this->config->expects($this->once())
+			->method('getSystemValueBool')
+			->with('has_valid_subscription')
+			->willReturn(true);
+
+		$this->assertSame(true, $this->registry->delegateHasValidSubscription());
+	}
+
 	public function testDelegateHasExtendedSupport() {
 		/* @var ISubscription|\PHPUnit_Framework_MockObject_MockObject $subscription */
 		$subscription = $this->createMock(ISubscription::class);
-- 
GitLab