Эх сурвалжийг харах

Add test and some minor changes

Jordi Boggiano 12 жил өмнө
parent
commit
5eaf249fd8

+ 1 - 1
app/config/config.yml

@@ -15,7 +15,7 @@ framework:
     session:
         name:           packagist
         lifetime:       3600
-        auto_start:     true
+        auto_start:     false
 
 # Twig Configuration
 twig:

+ 2 - 2
src/Packagist/WebBundle/Command/UpdatePackagesCommand.php

@@ -76,11 +76,12 @@ class UpdatePackagesCommand extends ContainerAwareCommand
             $flags = Updater::DELETE_BEFORE;
         }
 
-        $updater = new Updater($doctrine);
+        $updater = $this->getContainer()->get('packagist.package_updater');
         $start = new \DateTime();
 
         $input->setInteractive(false);
         $io = $verbose ? new ConsoleIO($input, $output, $this->getApplication()->getHelperSet()) : new NullIO;
+        $config = Factory::createConfig();
 
         while ($ids) {
             $packages = $doctrine->getRepository('PackagistWebBundle:Package')->getFullPackages(array_splice($ids, 0, 50));
@@ -90,7 +91,6 @@ class UpdatePackagesCommand extends ContainerAwareCommand
                     $output->writeln('Importing '.$package->getRepository());
                 }
                 try {
-                    $config = Factory::createConfig();
                     $repository = new VcsRepository(array('url' => $package->getRepository()), $io, $config);
                     $updater->update($package, $repository, $flags, $start);
                 } catch (\Exception $e) {

+ 7 - 9
src/Packagist/WebBundle/Controller/ApiController.php

@@ -93,9 +93,9 @@ class ApiController extends Controller
             $request->request->get('apiToken') :
             $request->query->get('apiToken');
 
-        $doctrine = $this->get('doctrine');
-        $user = $doctrine
-            ->getRepository('PackagistWebBundle:User')
+        $updater = $this->get('packagist.package_updater');
+        $em = $this->get('doctrine.orm.entity_manager');
+        $user = $this->get('packagist.user_repository')
             ->findOneBy(array('username' => $username, 'apiToken' => $apiToken));
 
         if (!$user) {
@@ -109,17 +109,15 @@ class ApiController extends Controller
         $payloadRepositoryChunk = $match[1];
 
         $updated = false;
+        $config = Factory::createConfig();
         foreach ($user->getPackages() as $package) {
             if (preg_match('{'.preg_quote($payloadRepositoryChunk).'(\.git)?$}', $package->getRepository())) {
-                $updated = true;
                 set_time_limit(3600);
-                // We found the package that was referenced.
-                $updater = new Updater($doctrine);
+                $updated = true;
 
-                $config = Factory::createConfig();
                 $repository = new VcsRepository(array('url' => $package->getRepository()), new NullIO, $config);
                 $package->setAutoUpdated(true);
-                $doctrine->getEntityManager()->flush();
+                $em->flush();
                 $updater->update($package, $repository);
             }
         }
@@ -137,7 +135,7 @@ class ApiController extends Controller
      */
     public function trackDownloadAction(Request $request, $name)
     {
-        $result = $this->getDoctrine()->getConnection()->fetchAssoc(
+        $result = $this->get('doctrine.dbal.default_connection')->fetchAssoc(
             'SELECT p.id, v.id vid
             FROM package p
             LEFT JOIN package_version v ON p.id = v.package_id

+ 1 - 1
src/Packagist/WebBundle/Controller/WebController.php

@@ -326,7 +326,7 @@ class WebController extends Controller
 
             if ($update) {
                 set_time_limit(3600);
-                $updater = new Updater($doctrine);
+                $updater = $this->get('packagist.package_updater');
 
                 $config = Factory::createConfig();
                 $repository = new VcsRepository(array('url' => $package->getRepository()), new NullIO, $config);

+ 11 - 1
src/Packagist/WebBundle/Resources/config/services.yml

@@ -12,4 +12,14 @@ services:
     packagist.user_provider:
         class: Packagist\WebBundle\Security\Provider\UserProvider
         public: false
-        arguments: ["@fos_user.user_manager"]
+        arguments: ["@fos_user.user_manager"]
+
+    packagist.user_repository:
+        class: Packagist\WebBundle\Entity\UserRepository
+        factory_service: doctrine
+        factory_method: getRepository
+        arguments: ["PackagistWebBundle:User"]
+
+    packagist.package_updater:
+        class: Packagist\WebBundle\Package\Updater
+        arguments: [@doctrine]

+ 30 - 2
src/Packagist/WebBundle/Tests/Controller/ApiControllerTest.php

@@ -3,7 +3,7 @@
 namespace Packagist\WebBundle\Tests\Controller;
 
 use Packagist\WebBundle\Entity\User;
-
+use Packagist\WebBundle\Entity\Package;
 use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
 
 class ApiControllerTest extends WebTestCase
@@ -19,7 +19,7 @@ class ApiControllerTest extends WebTestCase
     public function testGithubFailsCorrectly()
     {
         $client = self::createClient();
-        
+
         $client->request('GET', '/api/github');
         $this->assertEquals(405, $client->getResponse()->getStatusCode(), 'GET method should not be allowed for GitHub Post-Receive URL');
 
@@ -27,4 +27,32 @@ class ApiControllerTest extends WebTestCase
         $client->request('POST', '/api/github?username=INVALID_USER&apiToken=INVALID_TOKEN', array('payload' => $payload,));
         $this->assertEquals(403, $client->getResponse()->getStatusCode(), 'POST method should return 403 "Forbidden" if invalid username and API Token are sent');
     }
+
+    public function testGithubApi()
+    {
+        $client = self::createClient();
+
+        $package = new Package;
+        $package->setRepository('http://github.com/composer/composer.git');
+
+        $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());
+    }
 }