mirror of
https://github.com/netzbegruenung/circles.git
synced 2024-05-06 05:33:41 +02:00
first batch of tests
This commit is contained in:
parent
a364d076c6
commit
982559c511
25
composer.json
Normal file
25
composer.json
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"name": "nextcloud/circles",
|
||||
"description": "circles",
|
||||
"minimum-stability": "stable",
|
||||
"license": "agpl",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Maxence Lange",
|
||||
"email": "maxence@nextcloud.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"phpunit/phpunit": "6.0.8"
|
||||
},
|
||||
"config": {
|
||||
"vendor-dir": "lib/composer",
|
||||
"optimize-autoloader": true
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"UpdateServer\\": "src/",
|
||||
"Tests\\": "tests/unit/"
|
||||
}
|
||||
}
|
||||
}
|
1276
composer.lock
generated
Normal file
1276
composer.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
33
lib/Exceptions/CircleAlreadyExistsException.php
Normal file
33
lib/Exceptions/CircleAlreadyExistsException.php
Normal file
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
/**
|
||||
* Circles - bring cloud-users closer
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Maxence Lange <maxence@pontapreta.net>
|
||||
* @copyright 2017
|
||||
* @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 OCA\Circles\Exceptions;
|
||||
|
||||
class CircleAlreadyExistsException extends \Exception {
|
||||
|
||||
}
|
||||
|
||||
|
32
lib/Exceptions/CircleCreationException.php
Normal file
32
lib/Exceptions/CircleCreationException.php
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
/**
|
||||
* Circles - bring cloud-users closer
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Maxence Lange <maxence@pontapreta.net>
|
||||
* @copyright 2017
|
||||
* @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 OCA\Circles\Exceptions;
|
||||
|
||||
class CircleCreationException extends \Exception {
|
||||
|
||||
}
|
||||
|
32
lib/Exceptions/MemberAlreadyExistsException.php
Normal file
32
lib/Exceptions/MemberAlreadyExistsException.php
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
/**
|
||||
* Circles - bring cloud-users closer
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Maxence Lange <maxence@pontapreta.net>
|
||||
* @copyright 2017
|
||||
* @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 OCA\Circles\Exceptions;
|
||||
|
||||
class MemberAlreadyExistsException extends \Exception {
|
||||
|
||||
}
|
||||
|
27
tests/bootstrap.php
Normal file
27
tests/bootstrap.php
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
|
||||
if (!defined('PHPUNIT_RUN')) {
|
||||
define('PHPUNIT_RUN', 1);
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/../../../lib/base.php';
|
||||
|
||||
// Fix for "Autoload path not allowed: .../tests/lib/testcase.php"
|
||||
//\OC::$loader->addValidRoot(OC::$SERVERROOT . '/tests');
|
||||
|
||||
// Fix for "Autoload path not allowed: .../activity/tests/testcase.php"
|
||||
\OC_App::loadApp('circles');
|
||||
|
||||
// Fix for "Autoload path not allowed: .../files/lib/activity.php"
|
||||
//\OC_App::loadApp('files');
|
||||
|
||||
// Fix for "Autoload path not allowed: .../files_sharing/lib/activity.php"
|
||||
//\OC_App::loadApp('files_sharing');
|
||||
|
||||
|
||||
if (!class_exists('PHPUnit_Framework_TestCase')) {
|
||||
require_once('PHPUnit/Autoload.php');
|
||||
}
|
||||
|
||||
OC_Hook::clear();
|
8
tests/phpunit.xml
Normal file
8
tests/phpunit.xml
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<phpunit bootstrap="bootstrap.php">
|
||||
<testsuites>
|
||||
<testsuite>
|
||||
<directory>.</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
</phpunit>
|
41
tests/unit/lib/Api/CirclesTest.php
Normal file
41
tests/unit/lib/Api/CirclesTest.php
Normal file
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
/**
|
||||
* Circles - bring cloud-users closer
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Maxence Lange <maxence@pontapreta.net>
|
||||
* @copyright 2017
|
||||
* @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 OCA\Circles\Tests\Api;
|
||||
|
||||
use OCA\Circles\Api\Circles;
|
||||
|
||||
class CirclesTest extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
protected function setUp() {}
|
||||
//
|
||||
// public function testTest() {
|
||||
// $this->assertSame(2, Circles::oui('ok'));
|
||||
// }
|
||||
|
||||
|
||||
|
||||
}
|
51
tests/unit/lib/AppInfo/AppTest.php
Normal file
51
tests/unit/lib/AppInfo/AppTest.php
Normal file
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
/**
|
||||
* Circles - bring cloud-users closer
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Maxence Lange <maxence@pontapreta.net>
|
||||
* @copyright 2017
|
||||
* @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 OCA\Activity\Tests\AppInfo;
|
||||
|
||||
use OCA\Circles\Tests\TestCase;
|
||||
|
||||
/**
|
||||
* Class AppTest
|
||||
*
|
||||
* @group DB
|
||||
* @package OCA\Circles\Tests\AppInfo
|
||||
*/
|
||||
class AppTest extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
public function testNavigationEntry() {
|
||||
|
||||
$navigationManager = \OC::$server->getNavigationManager();
|
||||
$navigationManager->clear();
|
||||
$countBefore = count($navigationManager->getAll());
|
||||
|
||||
require '../appinfo/app.php';
|
||||
|
||||
$this->assertCount($countBefore + 1, $navigationManager->getAll());
|
||||
}
|
||||
|
||||
|
||||
}
|
107
tests/unit/lib/AppInfo/ApplicationTest.php
Normal file
107
tests/unit/lib/AppInfo/ApplicationTest.php
Normal file
|
@ -0,0 +1,107 @@
|
|||
<?php
|
||||
/**
|
||||
* Circles - bring cloud-users closer
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Maxence Lange <maxence@pontapreta.net>
|
||||
* @copyright 2017
|
||||
* @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 OCA\Circles\Tests\AppInfo;
|
||||
|
||||
|
||||
use OCA\Circles\AppInfo\Application;
|
||||
use OCA\Circles\Controller\NavigationController;
|
||||
use OCA\Circles\Controller\CirclesController;
|
||||
use OCA\Circles\Controller\MembersController;
|
||||
use OCA\Circles\Db\CirclesMapper;
|
||||
use OCA\Circles\Db\MembersMapper;
|
||||
use OCA\Circles\Service\DatabaseService;
|
||||
use OCA\Circles\Service\CirclesService;
|
||||
use OCA\Circles\Service\MembersService;
|
||||
use OCA\Circles\Service\ConfigService;
|
||||
use OCA\Circles\Service\MiscService;
|
||||
use OCA\Circles\Exceptions\MemberExists;
|
||||
|
||||
|
||||
/**
|
||||
* Class ApplicationTest
|
||||
*
|
||||
* @group DB
|
||||
* @package OCA\Circles\Tests\AppInfo
|
||||
*/
|
||||
class ApplicationTest extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
/** @var \OCA\Circles\AppInfo\Application */
|
||||
protected $app;
|
||||
|
||||
/** @var \OCP\AppFramework\IAppContainer */
|
||||
protected $container;
|
||||
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->app = new Application();
|
||||
$this->container = $this->app->getContainer();
|
||||
}
|
||||
|
||||
public function testContainerAppName() {
|
||||
$this->app = new Application();
|
||||
$this->assertEquals('circles', $this->container->getAppName());
|
||||
}
|
||||
|
||||
|
||||
public function queryData() {
|
||||
return array(
|
||||
// array(IL10N::class),
|
||||
|
||||
// controller
|
||||
array(NavigationController::class),
|
||||
array('CirclesController', CirclesController::class),
|
||||
array('MembersController', MembersController::class),
|
||||
|
||||
// mapper
|
||||
array('CirclesMapper', CirclesMapper::class),
|
||||
array('MembersMapper', MembersMapper::class),
|
||||
|
||||
// service
|
||||
array('DatabaseService', DatabaseService::class),
|
||||
array('CirclesService', CirclesService::class),
|
||||
array('MembersService', MembersService::class),
|
||||
array('ConfigService', ConfigService::class),
|
||||
array('MiscService', MiscService::class),
|
||||
array('CirclesService', CirclesService::class),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider queryData
|
||||
*
|
||||
* @param string $service
|
||||
* @param string $expected
|
||||
*/
|
||||
public function testContainerQuery($service, $expected = null) {
|
||||
if ($expected === null) {
|
||||
$expected = $service;
|
||||
}
|
||||
|
||||
$this->assertTrue($this->container->query($service) instanceof $expected);
|
||||
}
|
||||
}
|
259
tests/unit/lib/Db/CirclesMapperTest.php
Normal file
259
tests/unit/lib/Db/CirclesMapperTest.php
Normal file
|
@ -0,0 +1,259 @@
|
|||
<?php
|
||||
/**
|
||||
* Circles - bring cloud-users closer
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Maxence Lange <maxence@pontapreta.net>
|
||||
* @copyright 2017
|
||||
* @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 OCA\Circles\Tests\Db;
|
||||
|
||||
use OCA\Circles\Db\Members;
|
||||
use OCA\Circles\Db\CirclesMapper;
|
||||
use OCA\Circles\Db\MembersMapper;
|
||||
use OCA\Circles\Exceptions\CircleAlreadyExistsException;
|
||||
use OCA\Circles\Exceptions\MemberAlreadyExistsException;
|
||||
use OCA\Circles\Exceptions\TeamExists;
|
||||
use OCA\Circles\Model\Member;
|
||||
use OCA\Circles\Model\Circle;
|
||||
|
||||
|
||||
/**
|
||||
* Class MembersMapperTest
|
||||
*
|
||||
* @group DB
|
||||
* @package OCA\Circles\Tests\Db
|
||||
*/
|
||||
class CirclesMapperTest extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
const TEST_CIRCLE_OWNER1 = '_owner1';
|
||||
const TEST_CIRCLE_OWNER2 = '_owner2';
|
||||
|
||||
const TEST_CIRCLE_USER1 = '_user1';
|
||||
|
||||
/** @var \OCA\Circles\Db\CirclesMapper|\PHPUnit_Framework_MockObject_MockObject */
|
||||
protected $circlesMapper;
|
||||
|
||||
/** @var \OCA\Circles\Db\MembersMapper|\PHPUnit_Framework_MockObject_MockObject */
|
||||
protected $membersMapper;
|
||||
|
||||
protected function setUp() {
|
||||
|
||||
$this->circlesMapper = new CirclesMapper(
|
||||
\OC::$server->getDatabaseConnection(),
|
||||
$this->getMockBuilder('OCA\Circles\Service\MiscService')
|
||||
->disableOriginalConstructor()
|
||||
->getMock()
|
||||
);
|
||||
|
||||
$this->membersMapper = new MembersMapper(
|
||||
\OC::$server->getDatabaseConnection(),
|
||||
$this->getMockBuilder('OCA\Circles\Service\MiscService')
|
||||
->disableOriginalConstructor()
|
||||
->getMock()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public function testCircles() {
|
||||
|
||||
$owner1 = new Member();
|
||||
$owner1->setUserId(self::TEST_CIRCLE_OWNER1);
|
||||
|
||||
$owner2 = new Member();
|
||||
$owner2->setUserId(self::TEST_CIRCLE_OWNER2);
|
||||
|
||||
// creating circles.
|
||||
$circles = [];
|
||||
$circles[] =
|
||||
$this->createCircleTest('__test_personal', Circle::CIRCLES_PERSONAL, $owner1, true);
|
||||
$circles[] =
|
||||
$this->createCircleTest('__test_private', Circle::CIRCLES_PRIVATE, $owner1, true);
|
||||
$circles[] =
|
||||
$this->createCircleTest('__test_hidden', Circle::CIRCLES_HIDDEN, $owner1, true);
|
||||
$circles[] =
|
||||
$this->createCircleTest('__test_public', Circle::CIRCLES_PUBLIC, $owner1, true);
|
||||
|
||||
// checking that we can't create circle with same name
|
||||
$this->createCircleTest('__test_private', Circle::CIRCLES_PRIVATE, $owner2, false);
|
||||
$this->createCircleTest('__test_hidden', Circle::CIRCLES_PRIVATE, $owner2, false);
|
||||
$this->createCircleTest('__test_public', Circle::CIRCLES_PRIVATE, $owner2, false);
|
||||
$this->createCircleTest('__test_private', Circle::CIRCLES_HIDDEN, $owner2, false);
|
||||
$this->createCircleTest('__test_hidden', Circle::CIRCLES_HIDDEN, $owner2, false);
|
||||
$this->createCircleTest('__test_public', Circle::CIRCLES_HIDDEN, $owner2, false);
|
||||
$this->createCircleTest('__test_private', Circle::CIRCLES_PUBLIC, $owner2, false);
|
||||
$this->createCircleTest('__test_hidden', Circle::CIRCLES_PUBLIC, $owner2, false);
|
||||
$this->createCircleTest('__test_public', Circle::CIRCLES_PUBLIC, $owner2, false);
|
||||
|
||||
|
||||
// counting the circles created from the real owner point of view
|
||||
$this->assertCount(
|
||||
1, $this->circlesMapper->findCirclesByUser(
|
||||
$owner1->getUserId(), Circle::CIRCLES_ALL, '_personal', 0
|
||||
)
|
||||
);
|
||||
$this->assertCount(
|
||||
1, $this->circlesMapper->findCirclesByUser(
|
||||
$owner1->getUserId(), Circle::CIRCLES_ALL, '_private', 0
|
||||
)
|
||||
);
|
||||
$this->assertCount(
|
||||
1, $this->circlesMapper->findCirclesByUser(
|
||||
$owner1->getUserId(), Circle::CIRCLES_ALL, '_hidden', 0
|
||||
)
|
||||
);
|
||||
$this->assertCount(
|
||||
1, $this->circlesMapper->findCirclesByUser(
|
||||
$owner1->getUserId(), Circle::CIRCLES_ALL, '_public', 0
|
||||
)
|
||||
);
|
||||
|
||||
// counting the circles created from someone else' point of view
|
||||
$this->assertCount(
|
||||
0, $this->circlesMapper->findCirclesByUser(
|
||||
$owner2->getUserId(), Circle::CIRCLES_ALL, '_personal', 0
|
||||
)
|
||||
);
|
||||
$this->assertCount(
|
||||
1, $this->circlesMapper->findCirclesByUser(
|
||||
$owner2->getUserId(), Circle::CIRCLES_ALL, '_private', 0
|
||||
)
|
||||
);
|
||||
$this->assertCount(
|
||||
0, $this->circlesMapper->findCirclesByUser(
|
||||
$owner2->getUserId(), Circle::CIRCLES_ALL, '_hidden', 0
|
||||
)
|
||||
);
|
||||
$this->assertCount(
|
||||
1, $this->circlesMapper->findCirclesByUser(
|
||||
$owner2->getUserId(), Circle::CIRCLES_ALL, '__test_hidden', 0
|
||||
)
|
||||
);
|
||||
$this->assertCount(
|
||||
1, $this->circlesMapper->findCirclesByUser(
|
||||
$owner2->getUserId(), Circle::CIRCLES_ALL, '_public', 0
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
// create user (for hidden circle)
|
||||
$user1 = new Member();
|
||||
$user1->setUserId(self::TEST_CIRCLE_USER1);
|
||||
$user1->setCircleId(
|
||||
self::getTestFromCircles('__test_hidden', $circles)
|
||||
->getId()
|
||||
);
|
||||
$user1->setLevel(Member::LEVEL_MEMBER);
|
||||
$user1->setStatus(Member::STATUS_MEMBER);
|
||||
|
||||
// checking some access from this user point of view (before adding him to DB)
|
||||
$this->assertCount(
|
||||
0, $this->circlesMapper->findCirclesByUser(
|
||||
$user1->getUserId(), Circle::CIRCLES_ALL, '_hidden', 0
|
||||
)
|
||||
);
|
||||
|
||||
// add User1 to DB
|
||||
$this->membersMapper->add($user1);
|
||||
|
||||
// checking access after adding user (as member) to DB
|
||||
$this->assertCount(
|
||||
1, $this->circlesMapper->findCirclesByUser(
|
||||
$user1->getUserId(), Circle::CIRCLES_ALL, '_hidden', 0
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
// create user (for personal circle)
|
||||
$user1 = new Member();
|
||||
$user1->setUserId(self::TEST_CIRCLE_USER1);
|
||||
$user1->setCircleId(
|
||||
self::getTestFromCircles('__test_personal', $circles)
|
||||
->getId()
|
||||
);
|
||||
$user1->setLevel(Member::LEVEL_MEMBER);
|
||||
$user1->setStatus(Member::STATUS_MEMBER);
|
||||
|
||||
// checking some access from this user point of view (before adding him to DB)
|
||||
$this->assertCount(
|
||||
0, $this->circlesMapper->findCirclesByUser(
|
||||
$user1->getUserId(), Circle::CIRCLES_ALL, '_personal', 0
|
||||
)
|
||||
);
|
||||
|
||||
// add User1 to DB
|
||||
$this->membersMapper->add($user1);
|
||||
|
||||
// checking non access after adding user (as member) to DB
|
||||
$this->assertCount(
|
||||
0, $this->circlesMapper->findCirclesByUser(
|
||||
$user1->getUserId(), Circle::CIRCLES_ALL, '_personal', 0
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
//
|
||||
// we delete everything
|
||||
foreach ($circles AS $circle) {
|
||||
$this->membersMapper->removeAllFromCircle($circle);
|
||||
$this->circlesMapper->destroy($circle);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private static function getTestFromCircles($name, $circles) {
|
||||
|
||||
foreach ($circles AS $circle) {
|
||||
if ($circle->getName() === $name) {
|
||||
return $circle;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function createCircleTest($name, $type, $owner, $create = true) {
|
||||
|
||||
$circle = new Circle();
|
||||
$circle->setName($name);
|
||||
$circle->setDescription('description');
|
||||
$circle->setType($type);
|
||||
$circle->setOwner($owner);
|
||||
|
||||
if ($create === true) {
|
||||
$this->circlesMapper->create($circle, $owner);
|
||||
$this->membersMapper->add($owner);
|
||||
}
|
||||
|
||||
try {
|
||||
$this->circlesMapper->create($circle, $owner);
|
||||
$this->assertSame(true, false, 'Circle should already exists');
|
||||
} catch (CircleAlreadyExistsException $c) {
|
||||
} catch (\Exception $e) {
|
||||
$this->assertSame(true, false, 'Should returns CircleAlreadyExistsException');
|
||||
}
|
||||
|
||||
return $circle;
|
||||
}
|
||||
|
||||
}
|
79
tests/unit/lib/Db/CirclesTest.php
Normal file
79
tests/unit/lib/Db/CirclesTest.php
Normal file
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
/**
|
||||
* Circles - bring cloud-users closer
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Maxence Lange <maxence@pontapreta.net>
|
||||
* @copyright 2017
|
||||
* @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 OCA\Circles\Tests\Db;
|
||||
|
||||
use OCA\Circles\Db\Circles;
|
||||
use OCA\Circles\Model\Circle;
|
||||
use OCA\Circles\Model\Member;
|
||||
|
||||
|
||||
/**
|
||||
* Class CirclesTest
|
||||
*
|
||||
* @group DB
|
||||
* @package OCA\Circles\Tests\Db
|
||||
*/
|
||||
class CirclesTest extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
|
||||
public function testCircles() {
|
||||
|
||||
$date = date("Y-m-d H:i:s");
|
||||
|
||||
$owner = new Member();
|
||||
$owner->setUserId('owner');
|
||||
$user = new Member();
|
||||
$user->setUserID('user');
|
||||
|
||||
$members = array($owner, $user);
|
||||
|
||||
$model = Circle::fromArray(
|
||||
array(
|
||||
'id' => 1,
|
||||
'name' => 'test',
|
||||
'description' => 'description',
|
||||
'type' => Circle::CIRCLES_ALL,
|
||||
'creation' => $date,
|
||||
'count' => sizeof($members),
|
||||
)
|
||||
);
|
||||
$model->setMembers($members);
|
||||
|
||||
$item = new Circles($model);
|
||||
|
||||
$this->assertSame(1, $item->id);
|
||||
$this->assertSame('test', $item->name);
|
||||
|
||||
$this->assertSame('description', $item->description);
|
||||
$this->assertSame(Circle::CIRCLES_ALL, $item->type);
|
||||
$this->assertSame($date, $item->creation);
|
||||
$this->assertSame($members, $item->members);
|
||||
}
|
||||
|
||||
|
||||
}
|
170
tests/unit/lib/Db/MembersMapperTest.php
Normal file
170
tests/unit/lib/Db/MembersMapperTest.php
Normal file
|
@ -0,0 +1,170 @@
|
|||
<?php
|
||||
/**
|
||||
* Circles - bring cloud-users closer
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Maxence Lange <maxence@pontapreta.net>
|
||||
* @copyright 2017
|
||||
* @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 OCA\Circles\Tests\Db;
|
||||
|
||||
use OCA\Circles\Db\Members;
|
||||
use OCA\Circles\Db\MembersMapper;
|
||||
use OCA\Circles\Exceptions\MemberAlreadyExistsException;
|
||||
use OCA\Circles\Exceptions\TeamExists;
|
||||
use OCA\Circles\Model\Member;
|
||||
|
||||
|
||||
/**
|
||||
* Class MembersMapperTest
|
||||
*
|
||||
* @group DB
|
||||
* @package OCA\Circles\Tests\Db
|
||||
*/
|
||||
class MembersMapperTest extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
const TEST_MEMBER_1 = '_test_1';
|
||||
const TEST_MEMBER_2 = '_test_2';
|
||||
|
||||
const TEST_CIRCLE_ID = 9999998;
|
||||
|
||||
/** @var \OCA\Circles\Db\MembersMapper|\PHPUnit_Framework_MockObject_MockObject */
|
||||
protected $membersMapper;
|
||||
|
||||
protected function setUp() {
|
||||
// $this->db = \OC::$server->getDatabaseConnection();
|
||||
// $this->miscService = $this->getMockBuilder('OCA\Circles\Service\MiscService')
|
||||
// ->disableOriginalConstructor()
|
||||
// ->getMock();
|
||||
|
||||
$this->membersMapper = new MembersMapper(
|
||||
\OC::$server->getDatabaseConnection(),
|
||||
$this->getMockBuilder('OCA\Circles\Service\MiscService')
|
||||
->disableOriginalConstructor()
|
||||
->getMock()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public function testMembers() {
|
||||
|
||||
$member1 = Member::fromArray(
|
||||
array(
|
||||
'circle_id' => self::TEST_CIRCLE_ID,
|
||||
'user_id' => self::TEST_MEMBER_1,
|
||||
'level' => Member::LEVEL_MEMBER,
|
||||
'status' => Member::STATUS_MEMBER,
|
||||
'note' => 'test note',
|
||||
)
|
||||
);
|
||||
|
||||
$member2 = Member::fromArray(
|
||||
array(
|
||||
'circle_id' => self::TEST_CIRCLE_ID,
|
||||
'user_id' => self::TEST_MEMBER_2,
|
||||
'level' => Member::LEVEL_OWNER,
|
||||
'status' => Member::STATUS_MEMBER,
|
||||
'note' => 'test note',
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
$this->membersMapper->remove($member1);
|
||||
$this->membersMapper->remove($member2);
|
||||
|
||||
$this->membersMapper->add($member1);
|
||||
$this->membersMapper->add($member2);
|
||||
|
||||
try {
|
||||
$this->membersMapper->add($member1);
|
||||
$this->assertSame(true, false, 'Member should already exists');
|
||||
} catch (MemberAlreadyExistsException $m) {
|
||||
} catch (\Exception $e) {
|
||||
$this->assertSame(true, false, 'Should returns MemberAlreadyExistsException');
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// get result from database (as moderator)
|
||||
$result1 =
|
||||
$this->membersMapper->getMemberFromCircle(
|
||||
self::TEST_CIRCLE_ID, $member1->getUserId(), true
|
||||
);
|
||||
|
||||
$this->assertSame($result1->getCircleId(), $member1->getCircleId());
|
||||
$this->assertSame($result1->getUserID(), $member1->getUserID());
|
||||
$this->assertSame($result1->getLevel(), $member1->getLevel());
|
||||
$this->assertSame($result1->getStatus(), $member1->getStatus());
|
||||
$this->assertSame($result1->getNote(), $member1->getNote());
|
||||
|
||||
// non-moderator should not get access to note
|
||||
$result1 =
|
||||
$this->membersMapper->getMemberFromCircle(
|
||||
self::TEST_CIRCLE_ID, $member1->getUserId(), false
|
||||
);
|
||||
$this->assertSame(null, $result1->getNote());
|
||||
|
||||
|
||||
//
|
||||
// list of members from a circle (moderator)
|
||||
$membersList = $this->membersMapper->getMembersFromCircle(self::TEST_CIRCLE_ID, true);
|
||||
$this->assertCount(2, $membersList);
|
||||
if (sizeof($membersList) > 0) {
|
||||
$this->assertSame('test note', $membersList[0]->getNote());
|
||||
}
|
||||
|
||||
// list of members from a circle (mom-moderator)
|
||||
$membersList = $this->membersMapper->getMembersFromCircle(self::TEST_CIRCLE_ID, false);
|
||||
$this->assertCount(2, $membersList);
|
||||
if (sizeof($membersList) > 0) {
|
||||
$this->assertSame(null, $membersList[0]->getNote());
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Update members
|
||||
$member1->setLevel(Member::LEVEL_NONE);
|
||||
$member1->setStatus(Member::STATUS_NONMEMBER);
|
||||
$this->membersMapper->editMember($member1);
|
||||
|
||||
$result1 =
|
||||
$this->membersMapper->getMemberFromCircle(
|
||||
self::TEST_CIRCLE_ID, $member1->getUserId()
|
||||
);
|
||||
|
||||
// verify
|
||||
$this->assertSame($result1->getCircleId(), $member1->getCircleId());
|
||||
$this->assertSame($result1->getUserID(), $member1->getUserID());
|
||||
$this->assertSame($result1->getLevel(), Member::LEVEL_NONE);
|
||||
$this->assertSame($result1->getStatus(), Member::STATUS_NONMEMBER);
|
||||
|
||||
$this->assertCount(
|
||||
1, $this->membersMapper->getMembersFromCircle(self::TEST_CIRCLE_ID, false)
|
||||
);
|
||||
|
||||
$this->membersMapper->remove($member1);
|
||||
$this->membersMapper->remove($member2);
|
||||
|
||||
//$this->getMemberFromCircle('test');
|
||||
}
|
||||
|
||||
}
|
67
tests/unit/lib/Db/MembersTest.php
Normal file
67
tests/unit/lib/Db/MembersTest.php
Normal file
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
/**
|
||||
* Circles - bring cloud-users closer
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Maxence Lange <maxence@pontapreta.net>
|
||||
* @copyright 2017
|
||||
* @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 OCA\Circles\Tests\Db;
|
||||
|
||||
use OCA\Circles\Db\Members;
|
||||
use OCA\Circles\Model\Member;
|
||||
|
||||
|
||||
/**
|
||||
* Class MembersTest
|
||||
*
|
||||
* @group DB
|
||||
* @package OCA\Circles\Tests\Db
|
||||
*/
|
||||
class MembersTest extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
public function testMembers() {
|
||||
|
||||
$date = date("Y-m-d H:i:s");
|
||||
|
||||
$model = Member::fromArray(
|
||||
array(
|
||||
'circle_id' => 1,
|
||||
'user_id' => 'test',
|
||||
'level' => Member::LEVEL_OWNER,
|
||||
'status' => Member::STATUS_MEMBER,
|
||||
'note' => 'note test',
|
||||
'joined' => $date,
|
||||
)
|
||||
);
|
||||
|
||||
$item = new Members($model);
|
||||
|
||||
$this->assertSame(1, $item->circleId);
|
||||
$this->assertSame('test', $item->userId);
|
||||
$this->assertSame(Member::LEVEL_OWNER, $item->level);
|
||||
$this->assertSame(Member::STATUS_MEMBER, $item->status);
|
||||
$this->assertSame('note test', $item->note);
|
||||
$this->assertSame($date, $item->joined);
|
||||
}
|
||||
|
||||
}
|
110
tests/unit/lib/Model/CircleTest.php
Normal file
110
tests/unit/lib/Model/CircleTest.php
Normal file
|
@ -0,0 +1,110 @@
|
|||
<?php
|
||||
/**
|
||||
* Circles - bring cloud-users closer
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Maxence Lange <maxence@pontapreta.net>
|
||||
* @copyright 2017
|
||||
* @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 OCA\Circles\Tests\Model;
|
||||
|
||||
use OCA\Circles\Model\Circle;
|
||||
use \OCA\Circles\Model\Member;
|
||||
|
||||
|
||||
/**
|
||||
* Class CircleTest
|
||||
*
|
||||
* @package OCA\Circles\Tests\Model
|
||||
*/
|
||||
class CircleTest extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
public function testConst() {
|
||||
|
||||
$this->assertSame(1, Circle::CIRCLES_PERSONAL);
|
||||
$this->assertSame(2, Circle::CIRCLES_HIDDEN);
|
||||
$this->assertSame(4, Circle::CIRCLES_PRIVATE);
|
||||
$this->assertSame(8, Circle::CIRCLES_PUBLIC);
|
||||
|
||||
$this->assertSame(
|
||||
Circle::CIRCLES_PERSONAL + Circle::CIRCLES_HIDDEN + Circle::CIRCLES_PRIVATE
|
||||
+ Circle::CIRCLES_PUBLIC,
|
||||
Circle::CIRCLES_ALL
|
||||
);
|
||||
}
|
||||
|
||||
public function testModel() {
|
||||
|
||||
$date = date("Y-m-d H:i:s");
|
||||
$joined = date("H:i:s Y-m-d");
|
||||
|
||||
$owner = new Member();
|
||||
$owner->setUserId('owner');
|
||||
$user = new Member();
|
||||
$user->setUserID('user');
|
||||
$user->setStatus(Member::STATUS_MEMBER);
|
||||
$user->setLevel(Member::LEVEL_MEMBER);
|
||||
$user->setJoined($joined);
|
||||
|
||||
$members = array($owner, $user);
|
||||
|
||||
|
||||
$model = Circle::fromArray(
|
||||
array(
|
||||
'id' => 1,
|
||||
'name' => 'test',
|
||||
'description' => 'description',
|
||||
'type' => Circle::CIRCLES_ALL,
|
||||
'creation' => $date,
|
||||
'count' => sizeof($members),
|
||||
'owner' => $owner->getUserId(),
|
||||
'status' => $user->getStatus(),
|
||||
'level' => $user->getLevel(),
|
||||
'joined' => $user->getJoined()
|
||||
)
|
||||
);
|
||||
|
||||
$model->setMembers($members);
|
||||
|
||||
$this->assertSame(1, $model->getId());
|
||||
$this->assertSame(
|
||||
'owner', $model->getOwner()
|
||||
->getUserId()
|
||||
);
|
||||
$this->assertSame(
|
||||
Member::STATUS_MEMBER, $model->getUser()
|
||||
->getStatus()
|
||||
);
|
||||
$this->assertSame(
|
||||
Member::LEVEL_MEMBER, $model->getUser()
|
||||
->getLevel()
|
||||
);
|
||||
$this->assertSame(
|
||||
$joined, $model->getUser()
|
||||
->getJoined()
|
||||
);
|
||||
$this->assertSame('description', $model->getDescription());
|
||||
$this->assertSame(Circle::CIRCLES_ALL, $model->getType());
|
||||
$this->assertSame($date, $model->getCreation());
|
||||
$this->assertSame($members, $model->getMembers());
|
||||
$this->assertSame(2, $model->getCount());
|
||||
}
|
||||
}
|
78
tests/unit/lib/Model/MemberTest.php
Normal file
78
tests/unit/lib/Model/MemberTest.php
Normal file
|
@ -0,0 +1,78 @@
|
|||
<?php
|
||||
/**
|
||||
* Circles - bring cloud-users closer
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Maxence Lange <maxence@pontapreta.net>
|
||||
* @copyright 2017
|
||||
* @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 OCA\Circles\Tests\Model;
|
||||
|
||||
use \OCA\Circles\Model\Member;
|
||||
|
||||
|
||||
/**
|
||||
* Class MemberTest
|
||||
*
|
||||
* @package OCA\Circles\Tests\Model
|
||||
*/
|
||||
class MemberTest extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
public function testConst() {
|
||||
|
||||
$this->assertSame(0, Member::LEVEL_NONE);
|
||||
$this->assertSame(1, Member::LEVEL_MEMBER);
|
||||
$this->assertSame(6, Member::LEVEL_MODERATOR);
|
||||
$this->assertSame(8, Member::LEVEL_ADMIN);
|
||||
$this->assertSame(9, Member::LEVEL_OWNER);
|
||||
|
||||
$this->assertSame('Unknown', Member::STATUS_NONMEMBER);
|
||||
$this->assertSame('Invited', Member::STATUS_INVITED);
|
||||
$this->assertSame('Requesting', Member::STATUS_REQUEST);
|
||||
$this->assertSame('Member', Member::STATUS_MEMBER);
|
||||
$this->assertSame('Blocked', Member::STATUS_BLOCKED);
|
||||
$this->assertSame('Kicked', Member::STATUS_KICKED);
|
||||
}
|
||||
|
||||
public function testModel() {
|
||||
|
||||
$date = date("Y-m-d H:i:s");
|
||||
|
||||
$member = Member::fromArray(
|
||||
array(
|
||||
'circle_id' => 1,
|
||||
'user_id' => 'test',
|
||||
'level' => Member::LEVEL_OWNER,
|
||||
'status' => Member::STATUS_MEMBER,
|
||||
'note' => 'test note',
|
||||
'joined' => $date
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertSame(1, $member->getCircleId());
|
||||
$this->assertSame('test', $member->getUserID());
|
||||
$this->assertSame(Member::LEVEL_OWNER, $member->getLevel());
|
||||
$this->assertSame(Member::STATUS_MEMBER, $member->getStatus());
|
||||
$this->assertSame('test note', $member->getNote());
|
||||
$this->assertSame($date, $member->getJoined());
|
||||
$this->assertSame('Owner', $member->getLevelString());
|
||||
}
|
||||
}
|
7
vendor/autoload.php
vendored
Normal file
7
vendor/autoload.php
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?php
|
||||
|
||||
// autoload.php @generated by Composer
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit91ad254cd51636fd4865b9a0f6d1b4ef::getLoader();
|
441
vendor/composer/ClassLoader.php
vendored
Normal file
441
vendor/composer/ClassLoader.php
vendored
Normal file
|
@ -0,0 +1,441 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Composer.
|
||||
*
|
||||
* (c) Nils Adermann <naderman@naderman.de>
|
||||
* Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
/**
|
||||
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
|
||||
*
|
||||
* $loader = new \Composer\Autoload\ClassLoader();
|
||||
*
|
||||
* // register classes with namespaces
|
||||
* $loader->add('Symfony\Component', __DIR__.'/component');
|
||||
* $loader->add('Symfony', __DIR__.'/framework');
|
||||
*
|
||||
* // activate the autoloader
|
||||
* $loader->register();
|
||||
*
|
||||
* // to enable searching the include path (eg. for PEAR packages)
|
||||
* $loader->setUseIncludePath(true);
|
||||
*
|
||||
* In this example, if you try to use a class in the Symfony\Component
|
||||
* namespace or one of its children (Symfony\Component\Console for instance),
|
||||
* the autoloader will first look for the class under the component/
|
||||
* directory, and it will then fallback to the framework/ directory if not
|
||||
* found before giving up.
|
||||
*
|
||||
* This class is loosely based on the Symfony UniversalClassLoader.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @see http://www.php-fig.org/psr/psr-0/
|
||||
* @see http://www.php-fig.org/psr/psr-4/
|
||||
*/
|
||||
class ClassLoader
|
||||
{
|
||||
// PSR-4
|
||||
private $prefixLengthsPsr4 = array();
|
||||
private $prefixDirsPsr4 = array();
|
||||
private $fallbackDirsPsr4 = array();
|
||||
|
||||
// PSR-0
|
||||
private $prefixesPsr0 = array();
|
||||
private $fallbackDirsPsr0 = array();
|
||||
|
||||
private $useIncludePath = false;
|
||||
private $classMap = array();
|
||||
private $classMapAuthoritative = false;
|
||||
private $missingClasses = array();
|
||||
private $apcuPrefix;
|
||||
|
||||
public function getPrefixes()
|
||||
{
|
||||
if (!empty($this->prefixesPsr0)) {
|
||||
return call_user_func_array('array_merge', $this->prefixesPsr0);
|
||||
}
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
public function getPrefixesPsr4()
|
||||
{
|
||||
return $this->prefixDirsPsr4;
|
||||
}
|
||||
|
||||
public function getFallbackDirs()
|
||||
{
|
||||
return $this->fallbackDirsPsr0;
|
||||
}
|
||||
|
||||
public function getFallbackDirsPsr4()
|
||||
{
|
||||
return $this->fallbackDirsPsr4;
|
||||
}
|
||||
|
||||
public function getClassMap()
|
||||
{
|
||||
return $this->classMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $classMap Class to filename map
|
||||
*/
|
||||
public function addClassMap(array $classMap)
|
||||
{
|
||||
if ($this->classMap) {
|
||||
$this->classMap = array_merge($this->classMap, $classMap);
|
||||
} else {
|
||||
$this->classMap = $classMap;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-0 directories for a given prefix, either
|
||||
* appending or prepending to the ones previously set for this prefix.
|
||||
*
|
||||
* @param string $prefix The prefix
|
||||
* @param array|string $paths The PSR-0 root directories
|
||||
* @param bool $prepend Whether to prepend the directories
|
||||
*/
|
||||
public function add($prefix, $paths, $prepend = false)
|
||||
{
|
||||
if (!$prefix) {
|
||||
if ($prepend) {
|
||||
$this->fallbackDirsPsr0 = array_merge(
|
||||
(array) $paths,
|
||||
$this->fallbackDirsPsr0
|
||||
);
|
||||
} else {
|
||||
$this->fallbackDirsPsr0 = array_merge(
|
||||
$this->fallbackDirsPsr0,
|
||||
(array) $paths
|
||||
);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$first = $prefix[0];
|
||||
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
||||
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
||||
|
||||
return;
|
||||
}
|
||||
if ($prepend) {
|
||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||
(array) $paths,
|
||||
$this->prefixesPsr0[$first][$prefix]
|
||||
);
|
||||
} else {
|
||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||
$this->prefixesPsr0[$first][$prefix],
|
||||
(array) $paths
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-4 directories for a given namespace, either
|
||||
* appending or prepending to the ones previously set for this namespace.
|
||||
*
|
||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||
* @param array|string $paths The PSR-4 base directories
|
||||
* @param bool $prepend Whether to prepend the directories
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public function addPsr4($prefix, $paths, $prepend = false)
|
||||
{
|
||||
if (!$prefix) {
|
||||
// Register directories for the root namespace.
|
||||
if ($prepend) {
|
||||
$this->fallbackDirsPsr4 = array_merge(
|
||||
(array) $paths,
|
||||
$this->fallbackDirsPsr4
|
||||
);
|
||||
} else {
|
||||
$this->fallbackDirsPsr4 = array_merge(
|
||||
$this->fallbackDirsPsr4,
|
||||
(array) $paths
|
||||
);
|
||||
}
|
||||
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
||||
// Register directories for a new namespace.
|
||||
$length = strlen($prefix);
|
||||
if ('\\' !== $prefix[$length - 1]) {
|
||||
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||
}
|
||||
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
||||
} elseif ($prepend) {
|
||||
// Prepend directories for an already registered namespace.
|
||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||
(array) $paths,
|
||||
$this->prefixDirsPsr4[$prefix]
|
||||
);
|
||||
} else {
|
||||
// Append directories for an already registered namespace.
|
||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||
$this->prefixDirsPsr4[$prefix],
|
||||
(array) $paths
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-0 directories for a given prefix,
|
||||
* replacing any others previously set for this prefix.
|
||||
*
|
||||
* @param string $prefix The prefix
|
||||
* @param array|string $paths The PSR-0 base directories
|
||||
*/
|
||||
public function set($prefix, $paths)
|
||||
{
|
||||
if (!$prefix) {
|
||||
$this->fallbackDirsPsr0 = (array) $paths;
|
||||
} else {
|
||||
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-4 directories for a given namespace,
|
||||
* replacing any others previously set for this namespace.
|
||||
*
|
||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||
* @param array|string $paths The PSR-4 base directories
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public function setPsr4($prefix, $paths)
|
||||
{
|
||||
if (!$prefix) {
|
||||
$this->fallbackDirsPsr4 = (array) $paths;
|
||||
} else {
|
||||
$length = strlen($prefix);
|
||||
if ('\\' !== $prefix[$length - 1]) {
|
||||
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||
}
|
||||
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns on searching the include path for class files.
|
||||
*
|
||||
* @param bool $useIncludePath
|
||||
*/
|
||||
public function setUseIncludePath($useIncludePath)
|
||||
{
|
||||
$this->useIncludePath = $useIncludePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can be used to check if the autoloader uses the include path to check
|
||||
* for classes.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getUseIncludePath()
|
||||
{
|
||||
return $this->useIncludePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns off searching the prefix and fallback directories for classes
|
||||
* that have not been registered with the class map.
|
||||
*
|
||||
* @param bool $classMapAuthoritative
|
||||
*/
|
||||
public function setClassMapAuthoritative($classMapAuthoritative)
|
||||
{
|
||||
$this->classMapAuthoritative = $classMapAuthoritative;
|
||||
}
|
||||
|
||||
/**
|
||||
* Should class lookup fail if not found in the current class map?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isClassMapAuthoritative()
|
||||
{
|
||||
return $this->classMapAuthoritative;
|
||||
}
|
||||
|
||||
/**
|
||||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
||||
*
|
||||
* @param string|null $apcuPrefix
|
||||
*/
|
||||
public function setApcuPrefix($apcuPrefix)
|
||||
{
|
||||
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* The APCu prefix in use, or null if APCu caching is not enabled.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getApcuPrefix()
|
||||
{
|
||||
return $this->apcuPrefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers this instance as an autoloader.
|
||||
*
|
||||
* @param bool $prepend Whether to prepend the autoloader or not
|
||||
*/
|
||||
public function register($prepend = false)
|
||||
{
|
||||
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregisters this instance as an autoloader.
|
||||
*/
|
||||
public function unregister()
|
||||
{
|
||||
spl_autoload_unregister(array($this, 'loadClass'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the given class or interface.
|
||||
*
|
||||
* @param string $class The name of the class
|
||||
* @return bool|null True if loaded, null otherwise
|
||||
*/
|
||||
public function loadClass($class)
|
||||
{
|
||||
if ($file = $this->findFile($class)) {
|
||||
includeFile($file);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the path to the file where the class is defined.
|
||||
*
|
||||
* @param string $class The name of the class
|
||||
*
|
||||
* @return string|false The path if found, false otherwise
|
||||
*/
|
||||
public function findFile($class)
|
||||
{
|
||||
// class map lookup
|
||||
if (isset($this->classMap[$class])) {
|
||||
return $this->classMap[$class];
|
||||
}
|
||||
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
|
||||
return false;
|
||||
}
|
||||
if (null !== $this->apcuPrefix) {
|
||||
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
||||
if ($hit) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
||||
$file = $this->findFileWithExtension($class, '.php');
|
||||
|
||||
// Search for Hack files if we are running on HHVM
|
||||
if (false === $file && defined('HHVM_VERSION')) {
|
||||
$file = $this->findFileWithExtension($class, '.hh');
|
||||
}
|
||||
|
||||
if (null !== $this->apcuPrefix) {
|
||||
apcu_add($this->apcuPrefix.$class, $file);
|
||||
}
|
||||
|
||||
if (false === $file) {
|
||||
// Remember that this class does not exist.
|
||||
$this->missingClasses[$class] = true;
|
||||
}
|
||||
|
||||
return $file;
|
||||
}
|
||||
|
||||
private function findFileWithExtension($class, $ext)
|
||||
{
|
||||
// PSR-4 lookup
|
||||
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
|
||||
|
||||
$first = $class[0];
|
||||
if (isset($this->prefixLengthsPsr4[$first])) {
|
||||
foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
|
||||
if (0 === strpos($class, $prefix)) {
|
||||
foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
|
||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-4 fallback dirs
|
||||
foreach ($this->fallbackDirsPsr4 as $dir) {
|
||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-0 lookup
|
||||
if (false !== $pos = strrpos($class, '\\')) {
|
||||
// namespaced class name
|
||||
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
|
||||
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
|
||||
} else {
|
||||
// PEAR-like class name
|
||||
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
|
||||
}
|
||||
|
||||
if (isset($this->prefixesPsr0[$first])) {
|
||||
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
|
||||
if (0 === strpos($class, $prefix)) {
|
||||
foreach ($dirs as $dir) {
|
||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-0 fallback dirs
|
||||
foreach ($this->fallbackDirsPsr0 as $dir) {
|
||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-0 include paths.
|
||||
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
||||
return $file;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope isolated include.
|
||||
*
|
||||
* Prevents access to $this/self from included files.
|
||||
*/
|
||||
function includeFile($file)
|
||||
{
|
||||
include $file;
|
||||
}
|
21
vendor/composer/LICENSE
vendored
Normal file
21
vendor/composer/LICENSE
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
|
||||
Copyright (c) 2016 Nils Adermann, Jordi Boggiano
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is furnished
|
||||
to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
9
vendor/composer/autoload_classmap.php
vendored
Normal file
9
vendor/composer/autoload_classmap.php
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
// autoload_classmap.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
);
|
9
vendor/composer/autoload_namespaces.php
vendored
Normal file
9
vendor/composer/autoload_namespaces.php
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
// autoload_namespaces.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
);
|
9
vendor/composer/autoload_psr4.php
vendored
Normal file
9
vendor/composer/autoload_psr4.php
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
// autoload_psr4.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
);
|
52
vendor/composer/autoload_real.php
vendored
Normal file
52
vendor/composer/autoload_real.php
vendored
Normal file
|
@ -0,0 +1,52 @@
|
|||
<?php
|
||||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInit91ad254cd51636fd4865b9a0f6d1b4ef
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
public static function loadClassLoader($class)
|
||||
{
|
||||
if ('Composer\Autoload\ClassLoader' === $class) {
|
||||
require __DIR__ . '/ClassLoader.php';
|
||||
}
|
||||
}
|
||||
|
||||
public static function getLoader()
|
||||
{
|
||||
if (null !== self::$loader) {
|
||||
return self::$loader;
|
||||
}
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInit91ad254cd51636fd4865b9a0f6d1b4ef', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit91ad254cd51636fd4865b9a0f6d1b4ef', 'loadClassLoader'));
|
||||
|
||||
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
||||
if ($useStaticLoader) {
|
||||
require_once __DIR__ . '/autoload_static.php';
|
||||
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit91ad254cd51636fd4865b9a0f6d1b4ef::getInitializer($loader));
|
||||
} else {
|
||||
$map = require __DIR__ . '/autoload_namespaces.php';
|
||||
foreach ($map as $namespace => $path) {
|
||||
$loader->set($namespace, $path);
|
||||
}
|
||||
|
||||
$map = require __DIR__ . '/autoload_psr4.php';
|
||||
foreach ($map as $namespace => $path) {
|
||||
$loader->setPsr4($namespace, $path);
|
||||
}
|
||||
|
||||
$classMap = require __DIR__ . '/autoload_classmap.php';
|
||||
if ($classMap) {
|
||||
$loader->addClassMap($classMap);
|
||||
}
|
||||
}
|
||||
|
||||
$loader->register(true);
|
||||
|
||||
return $loader;
|
||||
}
|
||||
}
|
15
vendor/composer/autoload_static.php
vendored
Normal file
15
vendor/composer/autoload_static.php
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
// autoload_static.php @generated by Composer
|
||||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
class ComposerStaticInit91ad254cd51636fd4865b9a0f6d1b4ef
|
||||
{
|
||||
public static function getInitializer(ClassLoader $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
|
||||
}, null, ClassLoader::class);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue