Browse Source

Add test covering the new and old repository formats

Chris Smith 12 years ago
parent
commit
7681b4cc85
1 changed files with 96 additions and 0 deletions
  1. 96 0
      tests/Composer/Test/Repository/ComposerRepositoryTest.php

+ 96 - 0
tests/Composer/Test/Repository/ComposerRepositoryTest.php

@@ -0,0 +1,96 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Test\Repository;
+
+use Composer\Repository\ComposerRepository;
+use Composer\IO\NullIO;
+use Composer\Test\Mock\FactoryMock;
+use Composer\Test\TestCase;
+
+class ComposerRepositoryTest extends TestCase
+{
+    /**
+     * @dataProvider loadDataProvider
+     */
+    public function testLoadData(array $expected, array $repoPackages)
+    {
+        $repoConfig = array(
+            'url' => 'file://',
+        );
+
+        $repository = $this->getMock(
+            'Composer\Repository\ComposerRepository',
+            array(
+                'loadRootServerFile',
+                'createPackage',
+            ),
+            array(
+                $repoConfig,
+                new NullIO,
+                FactoryMock::createConfig(),
+            )
+        );
+
+        $repository
+            ->expects($this->once())
+            ->method('loadRootServerFile')
+            ->will($this->returnValue($repoPackages));
+
+        foreach ($expected as $at => $arg) {
+            $stubPackage = $this->getPackage('stub/stub', '1.0.0');
+
+            $repository
+                ->expects($this->at($at + 1))
+                ->method('createPackage')
+                ->with($this->identicalTo($arg), $this->equalTo('Composer\Package\CompletePackage'))
+                ->will($this->returnValue($stubPackage));
+        }
+
+        // Triggers initialization
+        $packages = $repository->getPackages();
+
+        // Final sanity check, ensure the correct number of packages were added.
+        $this->assertCount(count($expected), $packages);
+    }
+
+    public function loadDataProvider()
+    {
+        return array(
+            // Old repository format
+            array(
+                array(
+                    array('name' => 'foo/bar', 'version' => '1.0.0'),
+                ),
+                array('foo/bar' => array(
+                    'name' => 'foo/bar',
+                    'versions' => array(
+                        '1.0.0' => array('name' => 'foo/bar', 'version' => '1.0.0')
+                    )
+                )),
+            ),
+            // New repository format
+            array(
+                array(
+                    array('name' => 'bar/foo', 'version' => '3.14'),
+                    array('name' => 'bar/foo', 'version' => '3.145'),
+                ),
+                array('packages' => array(
+                    'bar/foo' => array(
+                        '3.14'  => array('name' => 'bar/foo', 'version' => '3.14'),
+                        '3.145' => array('name' => 'bar/foo', 'version' => '3.145'),
+                    ),
+                )),
+            ),
+        );
+    }
+}