Skip to content

Commit

Permalink
Fix plugin fixtures in sub-directories not resolving.
Browse files Browse the repository at this point in the history
We need to flip / into \ to correctly generate the namespace for
fixtures in subdirectories.

Refs #10795
  • Loading branch information
markstory committed Jun 20, 2017
1 parent 143bf38 commit 6e63f38
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 4 deletions.
6 changes: 6 additions & 0 deletions src/TestSuite/Fixture/FixtureManager.php
Expand Up @@ -186,6 +186,7 @@ protected function _loadFixtures($test)
$baseNamespace = Configure::read('App.namespace');
} elseif ($type === 'plugin') {
list($plugin, $name) = explode('.', $pathName);
// Flip vendored plugin separators
$path = implode('\\', explode('/', $plugin));
$baseNamespace = Inflector::camelize(str_replace('\\', '\ ', $path));
$additionalPath = null;
Expand All @@ -194,6 +195,11 @@ protected function _loadFixtures($test)
$name = $fixture;
}

// Tweak subdirectory names, so camelize() can make the correct name
if (strpos($name, '/') > 0) {
$name = implode('\\ ', explode('/', $name));
}

$name = Inflector::camelize($name);
$nameSegments = [
$baseNamespace,
Expand Down
29 changes: 25 additions & 4 deletions tests/TestCase/TestSuite/FixtureManagerTest.php
Expand Up @@ -183,7 +183,7 @@ public function testFixturizeCoreConstraint()
}

/**
* Test loading app fixtures.
* Test loading plugin fixtures.
*
* @return void
*/
Expand All @@ -204,11 +204,32 @@ public function testFixturizePlugin()
}

/**
* Test loading app fixtures.
* Test loading plugin fixtures.
*
* @return void
*/
public function testFixturizeCustom()
public function testFixturizePluginSubdirectory()
{
Plugin::load('TestPlugin');

$test = $this->getMockBuilder('Cake\TestSuite\TestCase')->getMock();
$test->fixtures = ['plugin.test_plugin.blog/comments'];
$this->manager->fixturize($test);
$fixtures = $this->manager->loaded();
$this->assertCount(1, $fixtures);
$this->assertArrayHasKey('plugin.test_plugin.blog/comments', $fixtures);
$this->assertInstanceOf(
'TestPlugin\Test\Fixture\Blog\CommentsFixture',
$fixtures['plugin.test_plugin.blog/comments']
);
}

/**
* Test loading plugin fixtures from a vendor namespaced plugin
*
* @return void
*/
public function testFixturizeVendorPlugin()
{
$test = $this->getMockBuilder('Cake\TestSuite\TestCase')->getMock();
$test->fixtures = ['plugin.Company/TestPluginThree.articles'];
Expand All @@ -223,7 +244,7 @@ public function testFixturizeCustom()
}

/**
* Test loading app fixtures.
* Test loading fixtures with fully-qualified namespaces.
*
* @return void
*/
Expand Down

0 comments on commit 6e63f38

Please sign in to comment.