Signed-off-by: Morris Jobke <hey@morrisjobke.de>pull/15495/head
parent
855486d7c1
commit
83b00a99fa
@ -0,0 +1,75 @@ |
||||
<?php |
||||
declare(strict_types=1); |
||||
|
||||
/** |
||||
* @author Morris Jobke <hey@morrisjobke.de> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OC\Support\Subscription; |
||||
|
||||
use OCP\Support\Subscription\Exception\AlreadyRegisteredException; |
||||
use OCP\Support\Subscription\IRegistry; |
||||
use OCP\Support\Subscription\ISubscription; |
||||
use OCP\Support\Subscription\ISupportedApps; |
||||
|
||||
class Registry implements IRegistry { |
||||
|
||||
/** @var ISubscription */ |
||||
private $subscription = null; |
||||
|
||||
/** |
||||
* Register a subscription instance. In case it is called multiple times the |
||||
* first one is used. |
||||
* |
||||
* @param ISubscription $subscription |
||||
* @throws AlreadyRegisteredException |
||||
* |
||||
* @since 17.0.0 |
||||
*/ |
||||
public function register(ISubscription $subscription): void { |
||||
if ($this->subscription !== null) { |
||||
throw new AlreadyRegisteredException(); |
||||
} |
||||
$this->subscription = $subscription; |
||||
} |
||||
|
||||
/** |
||||
* Fetches the list of app IDs that are supported by the subscription |
||||
* |
||||
* @since 17.0.0 |
||||
*/ |
||||
public function delegateGetSupportedApps(): array { |
||||
if ($this->subscription instanceof ISupportedApps) { |
||||
return $this->subscription->getSupportedApps(); |
||||
} |
||||
return []; |
||||
} |
||||
|
||||
/** |
||||
* Indicates if a valid subscription is available |
||||
* |
||||
* @since 17.0.0 |
||||
*/ |
||||
public function delegateHasValidSubscription(): bool { |
||||
if ($this->subscription instanceof ISubscription) { |
||||
return $this->subscription->hasValidSubscription(); |
||||
} |
||||
return false; |
||||
} |
||||
} |
||||
@ -0,0 +1,30 @@ |
||||
<?php |
||||
declare(strict_types=1); |
||||
|
||||
/** |
||||
* @author Morris Jobke <hey@morrisjobke.de> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCP\Support\Subscription\Exception; |
||||
|
||||
/** |
||||
* @since 17.0.0 |
||||
*/ |
||||
class AlreadyRegisteredException extends \Exception { |
||||
} |
||||
@ -0,0 +1,57 @@ |
||||
<?php |
||||
declare(strict_types=1); |
||||
|
||||
/** |
||||
* @author Morris Jobke <hey@morrisjobke.de> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCP\Support\Subscription; |
||||
|
||||
use OCP\Support\Subscription\Exception\AlreadyRegisteredException; |
||||
|
||||
/** |
||||
* @since 17.0.0 |
||||
*/ |
||||
interface IRegistry { |
||||
|
||||
/** |
||||
* Register a subscription instance. In case it is called multiple times the |
||||
* first one is used. |
||||
* |
||||
* @param ISubscription $subscription |
||||
* @throws AlreadyRegisteredException |
||||
* |
||||
* @since 17.0.0 |
||||
*/ |
||||
public function register(ISubscription $subscription): void; |
||||
|
||||
/** |
||||
* Fetches the list of app IDs that are supported by the subscription |
||||
* |
||||
* @since 17.0.0 |
||||
*/ |
||||
public function delegateGetSupportedApps(): array; |
||||
|
||||
/** |
||||
* Indicates if a valid subscription is available |
||||
* |
||||
* @since 17.0.0 |
||||
*/ |
||||
public function delegateHasValidSubscription(): bool; |
||||
} |
||||
@ -0,0 +1,37 @@ |
||||
<?php |
||||
declare(strict_types=1); |
||||
|
||||
/** |
||||
* @author Morris Jobke <hey@morrisjobke.de> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCP\Support\Subscription; |
||||
|
||||
/** |
||||
* @since 17.0.0 |
||||
*/ |
||||
interface ISubscription { |
||||
|
||||
/** |
||||
* Indicates if a valid subscription is available |
||||
* |
||||
* @since 17.0.0 |
||||
*/ |
||||
public function hasValidSubscription(): bool; |
||||
} |
||||
@ -0,0 +1,37 @@ |
||||
<?php |
||||
declare(strict_types=1); |
||||
|
||||
/** |
||||
* @author Morris Jobke <hey@morrisjobke.de> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCP\Support\Subscription; |
||||
|
||||
/** |
||||
* @since 17.0.0 |
||||
*/ |
||||
interface ISupportedApps extends ISubscription { |
||||
|
||||
/** |
||||
* Fetches the list of app IDs that are supported by the subscription |
||||
* |
||||
* @since 17.0.0 |
||||
*/ |
||||
public function getSupportedApps(): array; |
||||
} |
||||
@ -0,0 +1,87 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* @author Morris Jobke <hey@morrisjobke.de> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace Test\Support\Subscription; |
||||
|
||||
use OC\Support\Subscription\Registry; |
||||
use OCP\Support\Subscription\ISubscription; |
||||
use OCP\Support\Subscription\ISupportedApps; |
||||
use Test\TestCase; |
||||
|
||||
class RegistryTest extends TestCase { |
||||
|
||||
/** @var Registry */ |
||||
private $registry; |
||||
|
||||
protected function setUp() { |
||||
parent::setUp(); |
||||
|
||||
$this->registry = new Registry(); |
||||
} |
||||
|
||||
/** |
||||
* Doesn't assert anything, just checks whether anything "explodes" |
||||
*/ |
||||
public function testDelegateToNone() { |
||||
$this->registry->delegateHasValidSubscription(); |
||||
$this->addToAssertionCount(1); |
||||
} |
||||
|
||||
/** |
||||
* @expectedException \OCP\Support\Subscription\Exception\AlreadyRegisteredException |
||||
*/ |
||||
public function testDoubleRegistration() { |
||||
/* @var ISubscription $subscription1 */ |
||||
$subscription1 = $this->createMock(ISubscription::class); |
||||
/* @var ISubscription $subscription2 */ |
||||
$subscription2 = $this->createMock(ISubscription::class); |
||||
$this->registry->register($subscription1); |
||||
$this->registry->register($subscription2); |
||||
} |
||||
|
||||
public function testNoSupportApp() { |
||||
$this->assertSame([], $this->registry->delegateGetSupportedApps()); |
||||
$this->assertSame(false, $this->registry->delegateHasValidSubscription()); |
||||
} |
||||
|
||||
public function testDelegateHasValidSubscription() { |
||||
/* @var ISubscription|\PHPUnit_Framework_MockObject_MockObject $subscription */ |
||||
$subscription = $this->createMock(ISubscription::class); |
||||
$subscription->expects($this->once()) |
||||
->method('hasValidSubscription') |
||||
->willReturn(true); |
||||
$this->registry->register($subscription); |
||||
|
||||
$this->assertSame(true, $this->registry->delegateHasValidSubscription()); |
||||
} |
||||
|
||||
public function testDelegateGetSupportedApps() { |
||||
/* @var ISupportedApps|\PHPUnit_Framework_MockObject_MockObject $subscription */ |
||||
$subscription = $this->createMock(ISupportedApps::class); |
||||
$subscription->expects($this->once()) |
||||
->method('getSupportedApps') |
||||
->willReturn(['abc']); |
||||
$this->registry->register($subscription); |
||||
|
||||
$this->assertSame(['abc'], $this->registry->delegateGetSupportedApps()); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue