2019-05-10 15:21:41 +03:00
|
|
|
<?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;
|
2020-03-06 15:08:51 +03:00
|
|
|
use OCP\IConfig;
|
2020-12-02 12:07:34 +03:00
|
|
|
use OCP\IGroup;
|
|
|
|
use OCP\IGroupManager;
|
2020-07-08 20:38:26 +03:00
|
|
|
use OCP\IServerContainer;
|
2020-10-08 12:41:16 +03:00
|
|
|
use OCP\IUserManager;
|
2020-12-02 12:07:34 +03:00
|
|
|
use OCP\Notification\IManager;
|
2019-05-10 15:21:41 +03:00
|
|
|
use OCP\Support\Subscription\ISubscription;
|
|
|
|
use OCP\Support\Subscription\ISupportedApps;
|
2020-03-06 15:08:51 +03:00
|
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
2020-10-08 12:41:16 +03:00
|
|
|
use Psr\Log\LoggerInterface;
|
2019-05-10 15:21:41 +03:00
|
|
|
use Test\TestCase;
|
|
|
|
|
|
|
|
class RegistryTest extends TestCase {
|
|
|
|
|
|
|
|
/** @var Registry */
|
|
|
|
private $registry;
|
|
|
|
|
2020-03-06 15:08:51 +03:00
|
|
|
/** @var MockObject|IConfig */
|
|
|
|
private $config;
|
|
|
|
|
2020-07-08 20:38:26 +03:00
|
|
|
/** @var MockObject|IServerContainer */
|
|
|
|
private $serverContainer;
|
|
|
|
|
2020-10-08 12:41:16 +03:00
|
|
|
/** @var MockObject|IUserManager */
|
|
|
|
private $userManager;
|
|
|
|
|
2020-12-02 12:07:34 +03:00
|
|
|
/** @var MockObject|IGroupManager */
|
|
|
|
private $groupManager;
|
|
|
|
|
2020-10-08 12:41:16 +03:00
|
|
|
/** @var MockObject|LoggerInterface */
|
|
|
|
private $logger;
|
|
|
|
|
2020-12-02 12:07:34 +03:00
|
|
|
/** @var MockObject|IManager */
|
|
|
|
private $notificationManager;
|
|
|
|
|
2019-11-21 18:40:38 +03:00
|
|
|
protected function setUp(): void {
|
2019-05-10 15:21:41 +03:00
|
|
|
parent::setUp();
|
|
|
|
|
2020-03-06 15:08:51 +03:00
|
|
|
$this->config = $this->createMock(IConfig::class);
|
2020-07-08 20:38:26 +03:00
|
|
|
$this->serverContainer = $this->createMock(IServerContainer::class);
|
2020-10-08 12:41:16 +03:00
|
|
|
$this->userManager = $this->createMock(IUserManager::class);
|
2020-12-02 12:07:34 +03:00
|
|
|
$this->groupManager = $this->createMock(IGroupManager::class);
|
2020-10-08 12:41:16 +03:00
|
|
|
$this->logger = $this->createMock(LoggerInterface::class);
|
2020-12-02 12:07:34 +03:00
|
|
|
$this->notificationManager = $this->createMock(IManager::class);
|
2020-10-08 12:41:16 +03:00
|
|
|
$this->registry = new Registry(
|
|
|
|
$this->config,
|
|
|
|
$this->serverContainer,
|
|
|
|
$this->userManager,
|
2020-12-02 12:07:34 +03:00
|
|
|
$this->groupManager,
|
|
|
|
$this->logger,
|
|
|
|
$this->notificationManager
|
2020-10-08 12:41:16 +03:00
|
|
|
);
|
2019-05-10 15:21:41 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Doesn't assert anything, just checks whether anything "explodes"
|
|
|
|
*/
|
|
|
|
public function testDelegateToNone() {
|
|
|
|
$this->registry->delegateHasValidSubscription();
|
|
|
|
$this->addToAssertionCount(1);
|
|
|
|
}
|
|
|
|
|
2020-07-08 20:38:26 +03:00
|
|
|
|
2019-05-10 15:21:41 +03:00
|
|
|
public function testDoubleRegistration() {
|
2019-11-27 17:27:18 +03:00
|
|
|
$this->expectException(\OCP\Support\Subscription\Exception\AlreadyRegisteredException::class);
|
|
|
|
|
2019-05-10 15:21:41 +03:00
|
|
|
/* @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() {
|
2020-08-11 22:32:18 +03:00
|
|
|
/* @var ISubscription|\PHPUnit\Framework\MockObject\MockObject $subscription */
|
2019-05-10 15:21:41 +03:00
|
|
|
$subscription = $this->createMock(ISubscription::class);
|
|
|
|
$subscription->expects($this->once())
|
|
|
|
->method('hasValidSubscription')
|
|
|
|
->willReturn(true);
|
|
|
|
$this->registry->register($subscription);
|
|
|
|
|
|
|
|
$this->assertSame(true, $this->registry->delegateHasValidSubscription());
|
|
|
|
}
|
|
|
|
|
2020-03-06 15:08:51 +03:00
|
|
|
public function testDelegateHasValidSubscriptionConfig() {
|
2020-08-11 22:32:18 +03:00
|
|
|
/* @var ISubscription|\PHPUnit\Framework\MockObject\MockObject $subscription */
|
2020-03-06 15:08:51 +03:00
|
|
|
$this->config->expects($this->once())
|
|
|
|
->method('getSystemValueBool')
|
|
|
|
->with('has_valid_subscription')
|
|
|
|
->willReturn(true);
|
|
|
|
|
|
|
|
$this->assertSame(true, $this->registry->delegateHasValidSubscription());
|
|
|
|
}
|
|
|
|
|
2019-06-13 21:23:29 +03:00
|
|
|
public function testDelegateHasExtendedSupport() {
|
2020-08-11 22:32:18 +03:00
|
|
|
/* @var ISubscription|\PHPUnit\Framework\MockObject\MockObject $subscription */
|
2019-06-13 21:23:29 +03:00
|
|
|
$subscription = $this->createMock(ISubscription::class);
|
|
|
|
$subscription->expects($this->once())
|
|
|
|
->method('hasExtendedSupport')
|
|
|
|
->willReturn(true);
|
|
|
|
$this->registry->register($subscription);
|
|
|
|
|
|
|
|
$this->assertSame(true, $this->registry->delegateHasExtendedSupport());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-05-10 15:21:41 +03:00
|
|
|
public function testDelegateGetSupportedApps() {
|
2020-08-11 22:32:18 +03:00
|
|
|
/* @var ISupportedApps|\PHPUnit\Framework\MockObject\MockObject $subscription */
|
2019-05-10 15:21:41 +03:00
|
|
|
$subscription = $this->createMock(ISupportedApps::class);
|
|
|
|
$subscription->expects($this->once())
|
|
|
|
->method('getSupportedApps')
|
|
|
|
->willReturn(['abc']);
|
|
|
|
$this->registry->register($subscription);
|
|
|
|
|
|
|
|
$this->assertSame(['abc'], $this->registry->delegateGetSupportedApps());
|
|
|
|
}
|
2020-07-08 22:45:08 +03:00
|
|
|
|
|
|
|
public function testSubscriptionService() {
|
|
|
|
$this->serverContainer->method('query')
|
|
|
|
->with(DummySubscription::class)
|
2020-10-08 12:41:16 +03:00
|
|
|
->willReturn(new DummySubscription(true, false, false));
|
2020-07-08 22:45:08 +03:00
|
|
|
$this->registry->registerService(DummySubscription::class);
|
|
|
|
|
|
|
|
$this->assertTrue($this->registry->delegateHasValidSubscription());
|
|
|
|
$this->assertFalse($this->registry->delegateHasExtendedSupport());
|
|
|
|
}
|
2020-10-08 12:41:16 +03:00
|
|
|
|
|
|
|
public function testDelegateIsHardUserLimitReached() {
|
|
|
|
/* @var ISubscription|\PHPUnit\Framework\MockObject\MockObject $subscription */
|
|
|
|
$subscription = $this->createMock(ISubscription::class);
|
|
|
|
$subscription->expects($this->once())
|
|
|
|
->method('hasValidSubscription')
|
|
|
|
->willReturn(true);
|
|
|
|
$subscription->expects($this->once())
|
|
|
|
->method('isHardUserLimitReached')
|
|
|
|
->willReturn(true);
|
|
|
|
$this->registry->register($subscription);
|
2020-12-02 12:07:34 +03:00
|
|
|
$dummyGroup = $this->createMock(IGroup::class);
|
|
|
|
$dummyGroup->expects($this->once())
|
|
|
|
->method('getUsers')
|
|
|
|
->willReturn([]);
|
|
|
|
$this->groupManager->expects($this->once())
|
|
|
|
->method('get')
|
|
|
|
->willReturn($dummyGroup);
|
2020-10-08 12:41:16 +03:00
|
|
|
|
|
|
|
$this->assertSame(true, $this->registry->delegateIsHardUserLimitReached());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testDelegateIsHardUserLimitReachedWithoutSupportApp() {
|
|
|
|
$this->config->expects($this->once())
|
|
|
|
->method('getSystemValueBool')
|
|
|
|
->with('one-click-instance')
|
|
|
|
->willReturn(false);
|
|
|
|
|
|
|
|
$this->assertSame(false, $this->registry->delegateIsHardUserLimitReached());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function dataForUserLimitCheck() {
|
|
|
|
return [
|
|
|
|
// $userLimit, $userCount, $disabledUsers, $expectedResult
|
|
|
|
[35, 15, 2, false],
|
|
|
|
[35, 45, 15, false],
|
|
|
|
[35, 45, 5, true],
|
|
|
|
[35, 45, 55, false],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider dataForUserLimitCheck
|
|
|
|
*/
|
|
|
|
public function testDelegateIsHardUserLimitReachedWithoutSupportAppAndUserCount($userLimit, $userCount, $disabledUsers, $expectedResult) {
|
|
|
|
$this->config->expects($this->once())
|
|
|
|
->method('getSystemValueBool')
|
|
|
|
->with('one-click-instance')
|
|
|
|
->willReturn(true);
|
|
|
|
$this->config->expects($this->once())
|
|
|
|
->method('getSystemValue')
|
|
|
|
->with('one-click-instance.user-limit')
|
|
|
|
->willReturn($userLimit);
|
|
|
|
$this->config->expects($this->once())
|
|
|
|
->method('getUsersForUserValue')
|
|
|
|
->with('core', 'enabled', 'false')
|
|
|
|
->willReturn(array_fill(0, $disabledUsers, ''));
|
|
|
|
/* @var UserInterface|\PHPUnit\Framework\MockObject\MockObject $dummyBackend */
|
|
|
|
$dummyBackend = $this->createMock(UserInterface::class);
|
|
|
|
$dummyBackend->expects($this->once())
|
|
|
|
->method('implementsActions')
|
|
|
|
->willReturn(true);
|
|
|
|
$dummyBackend->expects($this->once())
|
|
|
|
->method('countUsers')
|
|
|
|
->willReturn($userCount);
|
|
|
|
$this->userManager->expects($this->once())
|
|
|
|
->method('getBackends')
|
|
|
|
->willReturn([$dummyBackend]);
|
|
|
|
|
2020-12-02 12:07:34 +03:00
|
|
|
if ($expectedResult) {
|
|
|
|
$dummyGroup = $this->createMock(IGroup::class);
|
|
|
|
$dummyGroup->expects($this->once())
|
|
|
|
->method('getUsers')
|
|
|
|
->willReturn([]);
|
|
|
|
$this->groupManager->expects($this->once())
|
|
|
|
->method('get')
|
|
|
|
->willReturn($dummyGroup);
|
|
|
|
}
|
|
|
|
|
2020-10-08 12:41:16 +03:00
|
|
|
$this->assertSame($expectedResult, $this->registry->delegateIsHardUserLimitReached());
|
|
|
|
}
|
2019-05-10 15:21:41 +03:00
|
|
|
}
|