Browse Source

Testing

Added functional tests for feed.
Fixed race condition in buildResponse.
Rafael Dohms 12 years ago
parent
commit
1c5ac4728f

+ 6 - 3
src/Packagist/WebBundle/Controller/FeedController.php

@@ -164,7 +164,7 @@ class FeedController extends Controller
 
     /**
      * Creates a HTTP Response and exports feed
-     * 
+     *
      * @param \Zend\Feed\Writer\Feed $feed
      * @param string $format
      *
@@ -173,13 +173,16 @@ class FeedController extends Controller
     protected function buildResponse($feed, $format)
     {
         $content = $feed->export($format);
-        $lastContent = $feed->getEntry(0);
+
         $etag = md5($content);
 
         $response = new Response($content, 200, array('Content-Type' => "application/$format+xml"));
         $response->setEtag($etag);
-        $response->setLastModified($lastContent->getDateModified());
 
+        if ($feed->count() > 0) {
+            $response->setLastModified($feed->getEntry(0)->getDateModified());
+        }
+        
         return $response;
     }
 }

+ 28 - 8
src/Packagist/WebBundle/Tests/Controller/FeedControllerTest.php

@@ -6,20 +6,40 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
 
 class FeedControllerTest extends WebTestCase
 {
-    public function testLatest()
+    /**
+     * @param $feed
+     * @param $format
+     *
+     * @dataProvider provideForFeed
+     */
+    public function testFeedAction($feed, $format, $filter = null)
     {
         $client = self::createClient();
 
-        $crawler = $client->request('GET', '/feed/latest.rss');
-        $this->assertContains('rss', $client->getResponse()->getContent());
+        $filterExtra = ($filter !== null)? ".$filter":'';
+
+        $crawler = $client->request('GET', "/feed/$feed$filterExtra.$format");
+
+        var_dump($client->getResponse()->getContent());
+        $this->assertEquals(200, $client->getResponse()->getStatusCode());
+        $this->assertContains($format, $client->getResponse()->getContent());
+
+        if ($filter !== null) {
+            $this->assertContains($filter, $client->getResponse()->getContent());
+        }
     }
 
-    public function testLatestAtom()
-    {
-        $client = self::createClient();
 
-        $crawler = $client->request('GET', '/feed/latest.atom');
-        $this->assertContains('Atom', $client->getResponse()->getContent());
+    public function provideForFeed()
+    {
+        return array(
+            array('latest', 'rss'),
+            array('latest', 'atom'),
+            array('newest', 'rss'),
+            array('newest', 'atom'),
+            array('vendor', 'rss', 'symfony'),
+            array('vendor', 'atom', 'symfony'),
+        );
     }
 
 }