public function testCreate()
 {
     $installInfo = new InstallInfo('vendor/package', '/path');
     $installInfo->setInstallerName('Composer');
     $this->assertSame('vendor/package', $installInfo->getPackageName());
     $this->assertSame('/path', $installInfo->getInstallPath());
     $this->assertSame('Composer', $installInfo->getInstallerName());
 }
 public function testReadFullRootPackageFile()
 {
     $packageFile = $this->reader->readRootPackageFile(__DIR__ . '/Fixtures/json/full-root.json', $this->baseConfig);
     $installInfo1 = new InstallInfo('vendor/package1', '/path/to/package1');
     $installInfo1->setInstallerName('composer');
     $installInfo1->addEnabledBindingUuid(Uuid::fromString('a54e5668-2b36-43f4-a32c-2d175092b77d'));
     $installInfo1->addDisabledBindingUuid(Uuid::fromString('4d02ee67-d845-4789-a9c1-8301351c6f5a'));
     $installInfo2 = new InstallInfo('vendor/package2', '/path/to/package2');
     $this->assertInstanceOf('Puli\\Manager\\Api\\Package\\RootPackageFile', $packageFile);
     $this->assertSame(__DIR__ . '/Fixtures/json/full-root.json', $packageFile->getPath());
     $this->assertFullConfig($packageFile);
     $this->assertSame(array('acme/blog-extension1', 'acme/blog-extension2'), $packageFile->getOverrideOrder());
     $this->assertEquals(array($installInfo1, $installInfo2), $packageFile->getInstallInfos());
     $config = $packageFile->getConfig();
     $this->assertSame('puli-dir', $config->get(Config::PULI_DIR));
     $this->assertSame('Puli\\MyFactory', $config->get(Config::FACTORY_OUT_CLASS));
     $this->assertSame('puli-dir/MyFactory.php', $config->get(Config::FACTORY_OUT_FILE));
     $this->assertSame('my-type', $config->get(Config::REPOSITORY_TYPE));
     $this->assertSame('puli-dir/my-repo', $config->get(Config::REPOSITORY_PATH));
     $this->assertSame('my-store-type', $config->get(Config::DISCOVERY_STORE_TYPE));
 }
 public function testWriteRootPackageFile()
 {
     $installInfo1 = new InstallInfo('vendor/package1', '/path/to/package1');
     $installInfo1->setInstallerName('composer');
     $installInfo1->addEnabledBindingUuid(Uuid::fromString('a54e5668-2b36-43f4-a32c-2d175092b77d'));
     $installInfo1->addDisabledBindingUuid(Uuid::fromString('4d02ee67-d845-4789-a9c1-8301351c6f5a'));
     $installInfo2 = new InstallInfo('vendor/package2', '/path/to/package2');
     $baseConfig = new Config();
     $packageFile = new RootPackageFile(null, null, $baseConfig);
     $packageFile->setPackageName('my/application');
     $packageFile->addPathMapping(new PathMapping('/app', 'res'));
     $packageFile->addBindingDescriptor(new BindingDescriptor('/app/config*.yml', 'my/type', array(), 'glob', Uuid::fromString(self::BINDING_UUID1)));
     $packageFile->addTypeDescriptor(new BindingTypeDescriptor('my/type', 'Description of my type.', array(new BindingParameterDescriptor('param', BindingParameterDescriptor::OPTIONAL, 1234, 'Description of the parameter.'))));
     $packageFile->setOverriddenPackages(array('acme/blog'));
     $packageFile->setOverrideOrder(array('acme/blog-extension1', 'acme/blog-extension2'));
     $packageFile->addPluginClass('Puli\\Manager\\Tests\\Api\\Package\\Fixtures\\TestPlugin');
     $packageFile->getConfig()->merge(array(Config::PULI_DIR => 'puli-dir', Config::FACTORY_OUT_CLASS => 'Puli\\MyFactory', Config::FACTORY_OUT_FILE => '{$puli-dir}/MyFactory.php', Config::REPOSITORY_TYPE => 'my-type', Config::REPOSITORY_PATH => '{$puli-dir}/my-repo', Config::DISCOVERY_STORE_TYPE => 'my-store-type'));
     $packageFile->addInstallInfo($installInfo1);
     $packageFile->addInstallInfo($installInfo2);
     $packageFile->setExtraKeys(array('extra1' => 'value', 'extra2' => array('key' => 'value')));
     $this->writer->writePackageFile($packageFile, $this->tempFile);
     $this->assertFileExists($this->tempFile);
     $this->assertJsonFileEquals(__DIR__ . '/Fixtures/json/full-root.json', $this->tempFile);
 }
 protected function setUp()
 {
     parent::setUp();
     $this->environment = $this->getMockBuilder('Puli\\Manager\\Api\\Environment\\ProjectEnvironment')->disableOriginalConstructor()->getMock();
     $this->packageManager = $this->getMock('Puli\\Manager\\Api\\Package\\PackageManager');
     $this->handler = new PackageCommandHandler($this->packageManager);
     $this->environment->expects($this->any())->method('getRootDirectory')->willReturn(__DIR__ . '/Fixtures/root');
     $this->packageManager->expects($this->any())->method('getEnvironment')->willReturn($this->environment);
     $installInfo1 = new InstallInfo('vendor/package1', 'packages/package1');
     $installInfo2 = new InstallInfo('vendor/package2', 'packages/package2');
     $installInfo3 = new InstallInfo('vendor/package3', 'packages/package3');
     $installInfo4 = new InstallInfo('vendor/package4', 'packages/package4');
     $installInfo1->setInstallerName('spock');
     $installInfo2->setInstallerName('spock');
     $installInfo3->setInstallerName('kirk');
     $installInfo4->setInstallerName('spock');
     $rootPackage = new RootPackage(new RootPackageFile('vendor/root'), __DIR__ . '/Fixtures/root');
     $package1 = new Package(new PackageFile('vendor/package1'), __DIR__ . '/Fixtures/root/packages/package1', $installInfo1);
     $package2 = new Package(new PackageFile('vendor/package2'), __DIR__ . '/Fixtures/root/packages/package2', $installInfo2);
     $package3 = new Package(new PackageFile('vendor/package3'), __DIR__ . '/Fixtures/root/packages/package3', $installInfo3);
     $package4 = new Package(null, __DIR__ . '/Fixtures/root/packages/package4', $installInfo4, array(new RuntimeException('Load error')));
     $this->packageManager->expects($this->any())->method('findPackages')->willReturnCallback($this->returnFromMap(array(array($this->all(), new PackageCollection(array($rootPackage, $package1, $package2, $package3, $package4))), array($this->installer('spock'), new PackageCollection(array($package1, $package2, $package4))), array($this->state(PackageState::ENABLED), new PackageCollection(array($rootPackage, $package1, $package2))), array($this->state(PackageState::NOT_FOUND), new PackageCollection(array($package3))), array($this->state(PackageState::NOT_LOADABLE), new PackageCollection(array($package4))), array($this->states(array(PackageState::ENABLED, PackageState::NOT_FOUND)), new PackageCollection(array($rootPackage, $package1, $package2, $package3))), array($this->installerAndState('spock', PackageState::ENABLED), new PackageCollection(array($package1, $package2))), array($this->installerAndState('spock', PackageState::NOT_FOUND), new PackageCollection(array())), array($this->installerAndState('spock', PackageState::NOT_LOADABLE), new PackageCollection(array($package4))))));
     $this->previousWd = getcwd();
     $this->wd = __DIR__;
     chdir($this->wd);
 }
 public function testUnserializeFullRootPackageFile()
 {
     $packageFile = $this->serializer->unserializeRootPackageFile(self::FULL_ROOT_JSON, '/path', $this->baseConfig);
     $installInfo1 = new InstallInfo('vendor/package1', '/path/to/package1');
     $installInfo1->setInstallerName('composer');
     $installInfo1->addDisabledBindingUuid(Uuid::fromString('4d02ee67-d845-4789-a9c1-8301351c6f5a'));
     $installInfo2 = new InstallInfo('vendor/package2', '/path/to/package2');
     $installInfo2->setEnvironment(Environment::DEV);
     $this->assertInstanceOf('Puli\\Manager\\Api\\Package\\RootPackageFile', $packageFile);
     $this->assertSame('/path', $packageFile->getPath());
     $this->assertFullConfig($packageFile);
     $this->assertSame(array('acme/blog-extension1', 'acme/blog-extension2'), $packageFile->getOverrideOrder());
     $this->assertEquals(array($installInfo1, $installInfo2), $packageFile->getInstallInfos());
     $config = $packageFile->getConfig();
     $this->assertSame('puli-dir', $config->get(Config::PULI_DIR));
     $this->assertSame('Puli\\MyFactory', $config->get(Config::FACTORY_OUT_CLASS));
     $this->assertSame('puli-dir/MyFactory.php', $config->get(Config::FACTORY_OUT_FILE));
     $this->assertSame('my-type', $config->get(Config::REPOSITORY_TYPE));
     $this->assertSame('puli-dir/my-repo', $config->get(Config::REPOSITORY_PATH));
     $this->assertSame('my-store-type', $config->get(Config::DISCOVERY_STORE_TYPE));
 }
 public function testFindPackages()
 {
     $this->rootPackageFile->addInstallInfo($installInfo1 = new InstallInfo('vendor/package1', '../foo'));
     $this->rootPackageFile->addInstallInfo($installInfo2 = new InstallInfo('vendor/package2', $this->packageDir2));
     $installInfo1->setInstallerName('webmozart');
     $manager = new PackageManagerImpl($this->context, $this->packageFileStorage);
     $expr1 = Expr::same(PackageState::ENABLED, Package::STATE);
     $expr2 = Expr::same('webmozart', Package::INSTALLER);
     $expr3 = $expr1->andX($expr2);
     $packages = $manager->findPackages($expr1);
     $this->assertInstanceOf('Puli\\Manager\\Api\\Package\\PackageCollection', $packages);
     $this->assertTrue($packages->contains('vendor/root'));
     $this->assertTrue($packages->contains('vendor/package2'));
     $this->assertCount(2, $packages);
     $packages = $manager->findPackages($expr2);
     $this->assertInstanceOf('Puli\\Manager\\Api\\Package\\PackageCollection', $packages);
     $this->assertTrue($packages->contains('vendor/package1'));
     $this->assertCount(1, $packages);
     $packages = $manager->findPackages($expr3);
     $this->assertInstanceOf('Puli\\Manager\\Api\\Package\\PackageCollection', $packages);
     $this->assertCount(0, $packages);
 }
 private function populateRootConfig(RootPackageFile $packageFile, \stdClass $jsonData)
 {
     if (isset($jsonData->{'override-order'})) {
         $packageFile->setOverrideOrder((array) $jsonData->{'override-order'});
     }
     if (isset($jsonData->plugins)) {
         $packageFile->setPluginClasses($jsonData->plugins);
     }
     if (isset($jsonData->config)) {
         $config = $packageFile->getConfig();
         foreach ($this->objectsToArrays($jsonData->config) as $key => $value) {
             $config->set($key, $value);
         }
     }
     if (isset($jsonData->packages)) {
         foreach ($jsonData->packages as $packageName => $packageData) {
             $installInfo = new InstallInfo($packageName, $packageData->{'install-path'});
             if (isset($packageData->installer)) {
                 $installInfo->setInstallerName($packageData->installer);
             }
             if (isset($packageData->{'enabled-bindings'})) {
                 foreach ($packageData->{'enabled-bindings'} as $uuid) {
                     $installInfo->addEnabledBindingUuid(Uuid::fromString($uuid));
                 }
             }
             if (isset($packageData->{'disabled-bindings'})) {
                 foreach ($packageData->{'disabled-bindings'} as $uuid) {
                     $installInfo->addDisabledBindingUuid(Uuid::fromString($uuid));
                 }
             }
             $packageFile->addInstallInfo($installInfo);
         }
     }
 }
 private function renameNonRootPackage(Package $package, $newName)
 {
     $previousInstallInfo = $package->getInstallInfo();
     $installInfo = new InstallInfo($newName, $previousInstallInfo->getInstallPath());
     $installInfo->setInstallerName($previousInstallInfo->getInstallerName());
     foreach ($previousInstallInfo->getEnabledBindingUuids() as $uuid) {
         $installInfo->addEnabledBindingUuid($uuid);
     }
     foreach ($previousInstallInfo->getDisabledBindingUuids() as $uuid) {
         $installInfo->addDisabledBindingUuid($uuid);
     }
     $this->rootPackageFile->removeInstallInfo($package->getName());
     $this->rootPackageFile->addInstallInfo($installInfo);
     try {
         $this->packageFileStorage->saveRootPackageFile($this->rootPackageFile);
     } catch (Exception $e) {
         $this->rootPackageFile->removeInstallInfo($newName);
         $this->rootPackageFile->addInstallInfo($previousInstallInfo);
         throw $e;
     }
     $this->packages->remove($package->getName());
     $this->packages->add(new Package($package->getPackageFile(), $package->getInstallPath(), $installInfo, $package->getLoadErrors()));
 }
Beispiel #9
0
 public function testMatch()
 {
     $packageFile = new PackageFile('vendor/name');
     $package = new Package($packageFile, __DIR__);
     $this->assertFalse($package->match(Expr::same('foobar', Package::NAME)));
     $this->assertTrue($package->match(Expr::same('vendor/name', Package::NAME)));
     $this->assertFalse($package->match(Expr::same('/path/foo', Package::INSTALL_PATH)));
     $this->assertTrue($package->match(Expr::same(__DIR__, Package::INSTALL_PATH)));
     $this->assertFalse($package->match(Expr::same(PackageState::NOT_LOADABLE, Package::STATE)));
     $this->assertTrue($package->match(Expr::same(PackageState::ENABLED, Package::STATE)));
     $this->assertFalse($package->match(Expr::same('webmozart', Package::INSTALLER)));
     $installInfo = new InstallInfo('vendor/install-info', '/path');
     $installInfo->setInstallerName('webmozart');
     $packageWithInstallInfo = new Package($packageFile, __DIR__, $installInfo);
     $this->assertFalse($packageWithInstallInfo->match(Expr::same('foobar', Package::INSTALLER)));
     $this->assertTrue($packageWithInstallInfo->match(Expr::same('webmozart', Package::INSTALLER)));
 }
Beispiel #10
0
 public function testMatch()
 {
     $packageFile = new PackageFile('vendor/name');
     $package = new Package($packageFile, __DIR__);
     $this->assertFalse($package->match(Expr::same('foobar', Package::NAME)));
     $this->assertTrue($package->match(Expr::same('vendor/name', Package::NAME)));
     $this->assertFalse($package->match(Expr::same('/path/foo', Package::INSTALL_PATH)));
     $this->assertTrue($package->match(Expr::same(__DIR__, Package::INSTALL_PATH)));
     $this->assertFalse($package->match(Expr::same(PackageState::NOT_LOADABLE, Package::STATE)));
     $this->assertTrue($package->match(Expr::same(PackageState::ENABLED, Package::STATE)));
     $this->assertFalse($package->match(Expr::same('webmozart', Package::INSTALLER)));
     // Packages without install info (= the root package) are assumed to be
     // installed in the production environment
     $this->assertTrue($package->match(Expr::same(Environment::PROD, Package::ENVIRONMENT)));
     $installInfo = new InstallInfo('vendor/install-info', '/path');
     $installInfo->setInstallerName('webmozart');
     $packageWithInstallInfo = new Package($packageFile, __DIR__, $installInfo);
     $this->assertFalse($packageWithInstallInfo->match(Expr::same('foobar', Package::INSTALLER)));
     $this->assertTrue($packageWithInstallInfo->match(Expr::same('webmozart', Package::INSTALLER)));
     $this->assertTrue($packageWithInstallInfo->match(Expr::notsame(Environment::DEV, Package::ENVIRONMENT)));
     $installInfo2 = new InstallInfo('vendor/install-info', '/path');
     $installInfo2->setEnvironment(Environment::DEV);
     $packageWithInstallInfo2 = new Package($packageFile, __DIR__, $installInfo2);
     $this->assertTrue($packageWithInstallInfo2->match(Expr::same(Environment::DEV, Package::ENVIRONMENT)));
 }