/** * @Route("/api/create-package", name="generic_create", defaults={"_format" = "json"}) * @Method({"POST"}) */ public function createPackageAction(Request $request) { $payload = json_decode($request->getContent(), true); if (!$payload) { return new JsonResponse(array('status' => 'error', 'message' => 'Missing payload parameter'), 406); } $url = $payload['repository']['url']; $package = new Package(); $package->setEntityRepository($this->getDoctrine()->getRepository('PackagistWebBundle:Package')); $package->setRouter($this->get('router')); $user = $this->findUser($request); $package->addMaintainer($user); $package->setRepository($url); $errors = $this->get('validator')->validate($package); if (count($errors) > 0) { $errorArray = array(); foreach ($errors as $error) { $errorArray[$error->getPropertyPath()] = $error->getMessage(); } return new JsonResponse(array('status' => 'error', 'message' => $errorArray), 406); } try { $em = $this->getDoctrine()->getManager(); $em->persist($package); $em->flush(); } catch (\Exception $e) { $this->get('logger')->critical($e->getMessage(), array('exception', $e)); return new JsonResponse(array('status' => 'error', 'message' => 'Error saving package'), 500); } return new JsonResponse(array('status' => 'success'), 202); }
/** * @dataProvider githubApiProvider */ public function testGithubApi($url) { $client = self::createClient(); $package = new Package(); $package->setRepository($url); $user = new User(); $user->addPackages($package); $repo = $this->getMockBuilder('Packagist\\WebBundle\\Entity\\UserRepository')->disableOriginalConstructor()->getMock(); $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock(); $updater = $this->getMockBuilder('Packagist\\WebBundle\\Package\\Updater')->disableOriginalConstructor()->getMock(); $repo->expects($this->once())->method('findOneBy')->with($this->equalTo(array('username' => 'test', 'apiToken' => 'token')))->will($this->returnValue($user)); static::$kernel->getContainer()->set('packagist.user_repository', $repo); static::$kernel->getContainer()->set('doctrine.orm.entity_manager', $em); static::$kernel->getContainer()->set('packagist.package_updater', $updater); $payload = json_encode(array('repository' => array('url' => 'git://github.com/composer/composer'))); $client->request('POST', '/api/github?username=test&apiToken=token', array('payload' => $payload)); $this->assertEquals(202, $client->getResponse()->getStatusCode()); }
/** * @param callable $onBeforeIndex TODO Add typehint when migrating to 5.4+ * @param array $orderBys * * @return array */ protected function commonTestSearchActionOrderBysAction($onBeforeIndex, array $orderBys = array()) { $client = self::createClient(); $container = $client->getContainer(); $kernelRootDir = $container->getParameter('kernel.root_dir'); $this->executeCommand('php ' . $kernelRootDir . '/console doctrine:database:drop --env=test --force', false); $this->executeCommand('php ' . $kernelRootDir . '/console doctrine:database:create --env=test'); $this->executeCommand('php ' . $kernelRootDir . '/console doctrine:schema:create --env=test'); $this->executeCommand('php ' . $kernelRootDir . '/console redis:flushall --env=test -n'); $lock = $container->getParameter('kernel.cache_dir') . '/composer-indexer.lock'; $this->executeCommand('rm -f ' . $lock); $em = $container->get('doctrine')->getManager(); if (!empty($orderBys)) { $orderBysQryStrPart = '&' . http_build_query(array('orderBys' => $orderBys)); } else { $orderBysQryStrPart = ''; } $twigPackage = new Package(); $twigPackage->setName('twig/twig'); $twigPackage->setRepository('https://github.com/twig/twig'); $packagistPackage = new Package(); $packagistPackage->setName('composer/packagist'); $packagistPackage->setRepository('https://github.com/composer/packagist'); $symfonyPackage = new Package(); $symfonyPackage->setName('symfony/symfony'); $symfonyPackage->setRepository('https://github.com/symfony/symfony'); $em->persist($twigPackage); $em->persist($packagistPackage); $em->persist($symfonyPackage); $em->flush(); $onBeforeIndex($container, $twigPackage, $packagistPackage, $symfonyPackage); $this->executeCommand('php ' . $kernelRootDir . '/console packagist:index --env=test --force'); $client->request('GET', '/search.json?q=' . $orderBysQryStrPart); $response = $client->getResponse(); $content = $client->getResponse()->getContent(); $this->assertSame(200, $response->getStatusCode(), $content); return json_decode($content, true); }
protected function initializePackages(ContainerInterface $container) { $kernelRootDir = $container->getParameter('kernel.root_dir'); $this->executeCommand('php ' . $kernelRootDir . '/console doctrine:database:drop --env=test --force', false); $this->executeCommand('php ' . $kernelRootDir . '/console doctrine:database:create --env=test'); $this->executeCommand('php ' . $kernelRootDir . '/console doctrine:schema:create --env=test'); $this->executeCommand('php ' . $kernelRootDir . '/console redis:flushall --env=test -n'); $em = $container->get('doctrine')->getManager(); $twigPackage = new Package(); $twigPackage->setName('twig/twig'); $twigPackage->setRepository('https://github.com/twig/twig'); $packagistPackage = new Package(); $packagistPackage->setName('composer/packagist'); $packagistPackage->setRepository('https://github.com/composer/packagist'); $symfonyPackage = new Package(); $symfonyPackage->setName('symfony/symfony'); $symfonyPackage->setRepository('https://github.com/symfony/symfony'); $em->persist($twigPackage); $em->persist($packagistPackage); $em->persist($symfonyPackage); $em->flush(); return [$twigPackage, $packagistPackage, $symfonyPackage]; }