231 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| namespace Consolidation\SiteAlias;
 | |
| 
 | |
| use Consolidation\SiteAlias\Util\YamlDataFileLoader;
 | |
| use PHPUnit\Framework\TestCase;
 | |
| use Symfony\Component\Yaml\Yaml;
 | |
| 
 | |
| class SiteAliasManagerTest extends TestCase
 | |
| {
 | |
|     use FixtureFactory;
 | |
| 
 | |
|     protected $manager;
 | |
| 
 | |
|     /**
 | |
|      * Set up for tests
 | |
|      */
 | |
|     public function setUp(): void
 | |
|     {
 | |
|         $root = $this->siteDir();
 | |
|         $referenceData = [];
 | |
|         $siteAliasFixtures = $this->fixturesDir() . '/sitealiases/sites';
 | |
| 
 | |
|         $aliasLoader = new SiteAliasFileLoader();
 | |
|         $ymlLoader = new YamlDataFileLoader();
 | |
|         $aliasLoader->addLoader('yml', $ymlLoader);
 | |
| 
 | |
|         $this->manager = new SiteAliasManager($aliasLoader, $root);
 | |
|         $this->manager
 | |
|             ->setReferenceData($referenceData)
 | |
|             ->addSearchLocation($siteAliasFixtures);
 | |
|     }
 | |
| 
 | |
|     public function managerGetTestValues()
 | |
|     {
 | |
|         return [
 | |
|             [
 | |
|                 '@single.other', false,
 | |
|             ],
 | |
| 
 | |
|             [
 | |
|                 '@other.single.other', false,
 | |
|             ],
 | |
| 
 | |
|             [
 | |
|                 '@single.dev', 'foo: bar
 | |
| root: /path/to/single',
 | |
|             ],
 | |
| 
 | |
|         ];
 | |
|     }
 | |
| 
 | |
|     public function managerGetWithOtherLocationTestValues()
 | |
|     {
 | |
|         return [
 | |
|             [
 | |
|                 '@single.other', false,
 | |
|             ],
 | |
| 
 | |
|             [
 | |
|                 '@other.single.other', 'foo: baz
 | |
| root: /other/other/path/to/single',
 | |
|             ],
 | |
| 
 | |
|             [
 | |
|                 '@single.dev', 'foo: bar
 | |
| root: /path/to/single',
 | |
|             ],
 | |
| 
 | |
|         ];
 | |
|     }
 | |
| 
 | |
|     public function managerGetWithDupLocationsTestValues()
 | |
|     {
 | |
|         return [
 | |
|             [
 | |
|                 '@single.dev', 'foo: bar
 | |
| root: /path/to/single',
 | |
|             ],
 | |
| 
 | |
|             [
 | |
|                 '@other.single.dev', 'foo: baz
 | |
| root: /other/path/to/single',
 | |
|             ],
 | |
| 
 | |
|             [
 | |
|                 '@dup.single.dev', 'foo: dup
 | |
| root: /dup/path/to/single',
 | |
|             ],
 | |
| 
 | |
|         ];
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * This test is just to ensure that our fixture data is being loaded
 | |
|      * accurately so that we can start writing tests. Its okay to remove
 | |
|      * rather than maintain this test once the suite is mature.
 | |
|      */
 | |
|     public function testGetMultiple()
 | |
|     {
 | |
|         // First set of tests: get all aliases in the default location
 | |
| 
 | |
|         $all = $this->manager->getMultiple();
 | |
|         $allNames = array_keys($all);
 | |
|         sort($allNames);
 | |
| 
 | |
|         $this->assertEquals('@single.alternate,@single.dev,@single.empty,@wild.*,@wild.dev', implode(',', $allNames));
 | |
| 
 | |
|         $all = $this->manager->getMultiple('@single');
 | |
|         $allNames = array_keys($all);
 | |
|         sort($allNames);
 | |
| 
 | |
|         $this->assertEquals('@single.alternate,@single.dev,@single.empty', implode(',', $allNames));
 | |
| 
 | |
|         // Next set of tests: Get all aliases in the 'other' location
 | |
| 
 | |
|         $this->addAlternateLocation('other');
 | |
| 
 | |
|         $all = $this->manager->getMultiple();
 | |
|         $allNames = array_keys($all);
 | |
|         sort($allNames);
 | |
| 
 | |
|         $this->assertEquals('@other.bob.dev,@other.bob.other,@other.fred.dev,@other.fred.other,@other.single.dev,@other.single.other,@single.alternate,@single.dev,@single.empty,@wild.*,@wild.dev', implode(',', $allNames));
 | |
| 
 | |
|         $all = $this->manager->getMultiple('@other');
 | |
|         $allNames = array_keys($all);
 | |
|         sort($allNames);
 | |
| 
 | |
|         $this->assertEquals('@other.bob.dev,@other.bob.other,@other.fred.dev,@other.fred.other,@other.single.dev,@other.single.other', implode(',', $allNames));
 | |
| 
 | |
|         // Add the 'dup' location and do some more tests
 | |
| 
 | |
|         $this->addAlternateLocation('dup');
 | |
| 
 | |
|         $all = $this->manager->getMultiple();
 | |
|         $allNames = array_keys($all);
 | |
|         sort($allNames);
 | |
| 
 | |
|         $this->assertEquals('@dup.bob.dev,@dup.bob.other,@dup.fred.dev,@dup.fred.other,@dup.single.alternate,@dup.single.dev,@other.bob.dev,@other.bob.other,@other.fred.dev,@other.fred.other,@other.single.dev,@other.single.other,@single.alternate,@single.dev,@single.empty,@wild.*,@wild.dev', implode(',', $allNames));
 | |
| 
 | |
|         $all = $this->manager->getMultiple('@dup');
 | |
|         $allNames = array_keys($all);
 | |
|         sort($allNames);
 | |
| 
 | |
|         $this->assertEquals('@dup.bob.dev,@dup.bob.other,@dup.fred.dev,@dup.fred.other,@dup.single.alternate,@dup.single.dev', implode(',', $allNames));
 | |
| 
 | |
|         $all = $this->manager->getMultiple('@other');
 | |
|         $allNames = array_keys($all);
 | |
|         sort($allNames);
 | |
| 
 | |
|         $this->assertEquals('@other.bob.dev,@other.bob.other,@other.fred.dev,@other.fred.other,@other.single.dev,@other.single.other', implode(',', $allNames));
 | |
| 
 | |
|         $all = $this->manager->getMultiple('@dup.single');
 | |
|         $allNames = array_keys($all);
 | |
|         sort($allNames);
 | |
| 
 | |
|         $this->assertEquals('@dup.single.alternate,@dup.single.dev', implode(',', $allNames));
 | |
| 
 | |
|         $all = $this->manager->getMultiple('@other.single');
 | |
|         $allNames = array_keys($all);
 | |
|         sort($allNames);
 | |
| 
 | |
|         $this->assertEquals('@other.single.dev,@other.single.other', implode(',', $allNames));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @covers \Consolidation\SiteAlias\SiteAlias::root()
 | |
|      */
 | |
|     public function testGetRoot() {
 | |
|         /* @var SiteAlias $alias */
 | |
|         $alias = $this->manager->get('@single');
 | |
|         $this->assertEquals($alias->root(), '/path/to/single');
 | |
|         /* @var SiteAlias $alias */
 | |
|         $alias = $this->manager->get('@single.common');
 | |
|         // Ensure that when root is not specified in the alias, an Exception is
 | |
|         // thrown.
 | |
|         $this->expectExceptionMessage('Site alias @single.common does not specify a root.');
 | |
|         $alias->root();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dataProvider managerGetTestValues
 | |
|      */
 | |
|     public function testGet(
 | |
|         $aliasName,
 | |
|         $expected)
 | |
|     {
 | |
|         $alias = $this->manager->get($aliasName);
 | |
|         $actual = $this->renderAlias($alias);
 | |
|         $this->assertEquals(str_replace("\r", '', $expected), $actual);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dataProvider managerGetWithOtherLocationTestValues
 | |
|      */
 | |
|     public function testGetWithOtherLocation(
 | |
|         $aliasName,
 | |
|         $expected)
 | |
|     {
 | |
|         $this->addAlternateLocation('other');
 | |
|         $this->testGet($aliasName, $expected);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dataProvider managerGetWithDupLocationsTestValues
 | |
|      */
 | |
|     public function testGetWithDupLocations(
 | |
|         $aliasName,
 | |
|         $expected)
 | |
|     {
 | |
|         $this->addAlternateLocation('dup');
 | |
|         $this->testGetWithOtherLocation($aliasName, $expected);
 | |
|     }
 | |
| 
 | |
|     protected function addAlternateLocation($fixtureDirName)
 | |
|     {
 | |
|         // Add another search location IN ADDITION to the one
 | |
|         // already added in the setup() mehtod.
 | |
|         $siteAliasFixtures = $this->fixturesDir() . '/sitealiases/' . $fixtureDirName;
 | |
|         $this->manager->addSearchLocation($siteAliasFixtures);
 | |
|     }
 | |
| 
 | |
|     protected function renderAlias($alias)
 | |
|     {
 | |
|         if (!$alias) {
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         return trim(Yaml::Dump($alias->export()));
 | |
|     }
 | |
| }
 |