diff --git a/composer.json b/composer.json new file mode 100644 index 00000000..88fc0a3b --- /dev/null +++ b/composer.json @@ -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/" + } + } +} \ No newline at end of file diff --git a/composer.lock b/composer.lock new file mode 100644 index 00000000..d22bfc79 --- /dev/null +++ b/composer.lock @@ -0,0 +1,1276 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "eaa3873b10f11d28070fcbdc8bb067d7", + "packages": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/5a5a9fc8025a08d8919be87d6884d5a92520cefe", + "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "doctrine/collections": "1.*", + "phpunit/phpunit": "~4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "homepage": "https://github.com/myclabs/DeepCopy", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2017-01-26T22:05:40+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2015-12-27T11:43:31+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.2.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2016-09-30T07:12:33+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.2.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2016-11-25T06:54:22+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.6.2", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/6c52c2722f8460122f96f86346600e1077ce22cb", + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1", + "sebastian/recursion-context": "^1.0|^2.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.0", + "phpunit/phpunit": "^4.8 || ^5.6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2016-11-21T14:58:47+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "531553c4795a1df54114342d68ca337d5d81c8a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/531553c4795a1df54114342d68ca337d5d81c8a0", + "reference": "531553c4795a1df54114342d68ca337d5d81c8a0", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.11 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", + "sebastian/environment": "^2.0", + "sebastian/version": "^2.0" + }, + "require-dev": { + "ext-xdebug": "^2.5", + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-xdebug": "^2.5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2017-03-01T09:14:18+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2016-10-03T07:40:28+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-02-27T10:12:30+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "6.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "47ee3fa1bca5c50f1d25105201eb20df777bd7b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/47ee3fa1bca5c50f1d25105201eb20df777bd7b6", + "reference": "47ee3fa1bca5c50f1d25105201eb20df777bd7b6", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.3", + "php": "^7.0", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^5.0", + "phpunit/php-file-iterator": "^1.4", + "phpunit/php-text-template": "^1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "^4.0", + "sebastian/comparator": "^1.2.4 || ^2.0", + "sebastian/diff": "^1.2", + "sebastian/environment": "^2.0", + "sebastian/exporter": "^2.0 || ^3.0", + "sebastian/global-state": "^1.1 || ^2.0", + "sebastian/object-enumerator": "^2.0 || ^3.0", + "sebastian/resource-operations": "^1.0", + "sebastian/version": "^2.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2", + "phpunit/dbunit": "<3.0" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "^1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-03-02T15:24:03+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "3819745c44f3aff9518fd655f320c4535d541af7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3819745c44f3aff9518fd655f320c4535d541af7", + "reference": "3819745c44f3aff9518fd655f320c4535d541af7", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^2.0" + }, + "conflict": { + "phpunit/phpunit": "<6.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2017-02-02T10:36:38+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2016-02-13T06:45:14+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-12-08T07:14:41+00:00" + }, + { + "name": "sebastian/environment", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-11-26T07:53:53+00:00" + }, + { + "name": "sebastian/exporter", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-11-19T08:54:04+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-02-18T15:18:39+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-11-19T07:33:16+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28T20:34:47+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/lib/Exceptions/CircleAlreadyExistsException.php b/lib/Exceptions/CircleAlreadyExistsException.php new file mode 100644 index 00000000..8a32fe34 --- /dev/null +++ b/lib/Exceptions/CircleAlreadyExistsException.php @@ -0,0 +1,33 @@ + + * @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 . + * + */ + +namespace OCA\Circles\Exceptions; + +class CircleAlreadyExistsException extends \Exception { + +} + + diff --git a/lib/Exceptions/CircleCreationException.php b/lib/Exceptions/CircleCreationException.php new file mode 100644 index 00000000..108670d0 --- /dev/null +++ b/lib/Exceptions/CircleCreationException.php @@ -0,0 +1,32 @@ + + * @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 . + * + */ + +namespace OCA\Circles\Exceptions; + +class CircleCreationException extends \Exception { + +} + diff --git a/lib/Exceptions/MemberAlreadyExistsException.php b/lib/Exceptions/MemberAlreadyExistsException.php new file mode 100644 index 00000000..f1b9b2f7 --- /dev/null +++ b/lib/Exceptions/MemberAlreadyExistsException.php @@ -0,0 +1,32 @@ + + * @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 . + * + */ + +namespace OCA\Circles\Exceptions; + +class MemberAlreadyExistsException extends \Exception { + +} + diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 00000000..11cf7702 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,27 @@ +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(); \ No newline at end of file diff --git a/tests/phpunit.xml b/tests/phpunit.xml new file mode 100644 index 00000000..cea650ed --- /dev/null +++ b/tests/phpunit.xml @@ -0,0 +1,8 @@ + + + + + . + + + \ No newline at end of file diff --git a/tests/unit/lib/Api/CirclesTest.php b/tests/unit/lib/Api/CirclesTest.php new file mode 100644 index 00000000..d7df5b48 --- /dev/null +++ b/tests/unit/lib/Api/CirclesTest.php @@ -0,0 +1,41 @@ + + * @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 . + * + */ + +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')); +// } + + + +} diff --git a/tests/unit/lib/AppInfo/AppTest.php b/tests/unit/lib/AppInfo/AppTest.php new file mode 100644 index 00000000..5d7f0742 --- /dev/null +++ b/tests/unit/lib/AppInfo/AppTest.php @@ -0,0 +1,51 @@ + + * @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 . + * + */ + +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()); + } + + +} \ No newline at end of file diff --git a/tests/unit/lib/AppInfo/ApplicationTest.php b/tests/unit/lib/AppInfo/ApplicationTest.php new file mode 100644 index 00000000..cf6a9248 --- /dev/null +++ b/tests/unit/lib/AppInfo/ApplicationTest.php @@ -0,0 +1,107 @@ + + * @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 . + * + */ + +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); + } +} \ No newline at end of file diff --git a/tests/unit/lib/Db/CirclesMapperTest.php b/tests/unit/lib/Db/CirclesMapperTest.php new file mode 100644 index 00000000..49184027 --- /dev/null +++ b/tests/unit/lib/Db/CirclesMapperTest.php @@ -0,0 +1,259 @@ + + * @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 . + * + */ + + +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; + } + +} \ No newline at end of file diff --git a/tests/unit/lib/Db/CirclesTest.php b/tests/unit/lib/Db/CirclesTest.php new file mode 100644 index 00000000..4e04169f --- /dev/null +++ b/tests/unit/lib/Db/CirclesTest.php @@ -0,0 +1,79 @@ + + * @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 . + * + */ + + +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); + } + + +} \ No newline at end of file diff --git a/tests/unit/lib/Db/MembersMapperTest.php b/tests/unit/lib/Db/MembersMapperTest.php new file mode 100644 index 00000000..d5bf6bda --- /dev/null +++ b/tests/unit/lib/Db/MembersMapperTest.php @@ -0,0 +1,170 @@ + + * @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 . + * + */ + + +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'); + } + +} \ No newline at end of file diff --git a/tests/unit/lib/Db/MembersTest.php b/tests/unit/lib/Db/MembersTest.php new file mode 100644 index 00000000..ec7d7111 --- /dev/null +++ b/tests/unit/lib/Db/MembersTest.php @@ -0,0 +1,67 @@ + + * @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 . + * + */ + + +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); + } + +} \ No newline at end of file diff --git a/tests/unit/lib/Model/CircleTest.php b/tests/unit/lib/Model/CircleTest.php new file mode 100644 index 00000000..dde4f303 --- /dev/null +++ b/tests/unit/lib/Model/CircleTest.php @@ -0,0 +1,110 @@ + + * @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 . + * + */ + +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()); + } +} diff --git a/tests/unit/lib/Model/MemberTest.php b/tests/unit/lib/Model/MemberTest.php new file mode 100644 index 00000000..0964e82e --- /dev/null +++ b/tests/unit/lib/Model/MemberTest.php @@ -0,0 +1,78 @@ + + * @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 . + * + */ + +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()); + } +} diff --git a/vendor/autoload.php b/vendor/autoload.php new file mode 100644 index 00000000..70fc56ed --- /dev/null +++ b/vendor/autoload.php @@ -0,0 +1,7 @@ + + * Jordi Boggiano + * + * 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 + * @author Jordi Boggiano + * @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; +} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE new file mode 100644 index 00000000..1a281248 --- /dev/null +++ b/vendor/composer/LICENSE @@ -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. + diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php new file mode 100644 index 00000000..7a91153b --- /dev/null +++ b/vendor/composer/autoload_classmap.php @@ -0,0 +1,9 @@ += 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; + } +} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php new file mode 100644 index 00000000..ab7f5ad4 --- /dev/null +++ b/vendor/composer/autoload_static.php @@ -0,0 +1,15 @@ +