Skip to content

Commit

Permalink
PluginList tests
Browse files Browse the repository at this point in the history
  • Loading branch information
weirdan committed Jul 17, 2018
1 parent dbca2bd commit 13c67cc
Show file tree
Hide file tree
Showing 2 changed files with 179 additions and 1 deletion.
1 change: 0 additions & 1 deletion src/Psalm/PluginManager/PluginList.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ public function getEnabled(): array
$this->enabled_plugins = [];
foreach ($this->config_file->getConfig()->getPluginClasses() as $plugin_entry) {
$plugin_class = $plugin_entry['class'];
$plugin_config = $plugin_entry['config'];
$this->enabled_plugins[$plugin_class] = $this->findPluginPackage($plugin_class);
}
}
Expand Down
179 changes: 179 additions & 0 deletions tests/PluginManager.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
<?php
namespace Psalm\Tests;

use Prophecy\Prophecy\ObjectProphecy;
use Psalm\Config;
use Psalm\PluginManager\ComposerLock;
use Psalm\PluginManager\ConfigFile;
use Psalm\PluginManager\PluginList;

class PluginManagerTest extends TestCase
{
/** @var ObjectProphecy */
private $config_file;
/** @var ObjectProphecy */
private $config;
/** @var ObjectProphecy */
private $composer_lock;

public function setUp()
{
$this->config = $this->prophesize(Config::class);
/** @psalm-suppress TooManyArguments willReturn is old-school variadic, see vimeo/psalm#605 */
$this->config->getPluginClasses()->willReturn([]);

$this->config_file = $this->prophesize(ConfigFile::class);
/** @psalm-suppress TooManyArguments willReturn is old-school variadic, see vimeo/psalm#605 */
$this->config_file->getConfig()->willReturn($this->config->reveal());

$this->composer_lock = $this->prophesize(ComposerLock::class);
/** @psalm-suppress TooManyArguments willReturn is old-school variadic, see vimeo/psalm#605 */
$this->composer_lock->getPlugins()->willReturn([]);
}

/**
* @return void
* @test
*/
public function pluginsPresentInConfigAreEnabled()
{
/** @psalm-suppress TooManyArguments willReturn is old-school variadic, see vimeo/psalm#605 */
$this->config->getPluginClasses()->willReturn([
['class' => 'a\b\c', 'config' => null],
['class' => 'c\d\e', 'config' => null],
]);

$plugin_list = new PluginList($this->config_file->reveal(), $this->composer_lock->reveal());

$this->assertEquals([
'a\b\c' => null,
'c\d\e' => null,
], $plugin_list->getEnabled());
}

/**
* @return void
* @test
*/
public function pluginsPresentInPackageLockOnlyAreAvailable()
{
/** @psalm-suppress TooManyArguments willReturn is old-school variadic, see vimeo/psalm#605 */
$this->config->getPluginClasses()->willReturn([
['class' => 'a\b\c', 'config' => null],
]);

/** @psalm-suppress TooManyArguments willReturn is old-school variadic, see vimeo/psalm#605 */
$this->composer_lock->getPlugins()->willReturn([
'vendor/package' => 'a\b\c',
'another-vendor/another-package' => 'c\d\e',
]);

$plugin_list = new PluginList($this->config_file->reveal(), $this->composer_lock->reveal());

$this->assertEquals([
'c\d\e' => 'another-vendor/another-package',
], $plugin_list->getAvailable());
}

/**
* @return void
* @test
*/
public function pluginsPresentInPackageLockAndConfigHavePluginPackageName()
{
/** @psalm-suppress TooManyArguments willReturn is old-school variadic, see vimeo/psalm#605 */
$this->config->getPluginClasses()->willReturn([
['class' => 'a\b\c', 'config' => null],
]);

/** @psalm-suppress TooManyArguments willReturn is old-school variadic, see vimeo/psalm#605 */
$this->composer_lock->getPlugins()->willReturn([
'vendor/package' => 'a\b\c',
]);

$plugin_list = new PluginList($this->config_file->reveal(), $this->composer_lock->reveal());

$this->assertEquals([
'a\b\c' => 'vendor/package',
], $plugin_list->getEnabled());
}

/**
* @return void
* @test
*/
public function canFindPluginClassByClassName()
{
$plugin_list = new PluginList($this->config_file->reveal(), $this->composer_lock->reveal());
$this->assertEquals('a\b\c', $plugin_list->resolvePluginClass('a\b\c'));
}

/**
* @return void
* @test
*/
public function canFindPluginClassByPackageName()
{
/** @psalm-suppress TooManyArguments willReturn is old-school variadic, see vimeo/psalm#605 */
$this->composer_lock->getPlugins()->willReturn([
'vendor/package' => 'a\b\c',
]);

$plugin_list = new PluginList($this->config_file->reveal(), $this->composer_lock->reveal());
$this->assertEquals('a\b\c', $plugin_list->resolvePluginClass('vendor/package'));
}

/**
* @return void
* @test
*/
public function enabledPackageIsEnabled()
{
/** @psalm-suppress TooManyArguments willReturn is old-school variadic, see vimeo/psalm#605 */
$this->config->getPluginClasses()->willReturn([
['class' => 'a\b\c', 'config' => null],
]);

$plugin_list = new PluginList($this->config_file->reveal(), $this->composer_lock->reveal());

$this->assertTrue($plugin_list->isEnabled('a\b\c'));
}

/**
* @return void
* @test
*/
public function errorsOutWhenTryingToResolveUnknownPlugin()
{
$plugin_list = new PluginList($this->config_file->reveal(), $this->composer_lock->reveal());
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessageRegExp('/unknown plugin/i');
$plugin_list->resolvePluginClass('vendor/package');
}

/**
* @return void
* @test
*/
public function pluginsAreEnabledInConfigFile()
{
$plugin_list = new PluginList($this->config_file->reveal(), $this->composer_lock->reveal());

$this->config_file->addPlugin('a\b\c')->shouldBeCalled();

$plugin_list->enable('a\b\c');
}

/**
* @return void
* @test
*/
public function pluginsAreDisabledInConfigFile()
{
$plugin_list = new PluginList($this->config_file->reveal(), $this->composer_lock->reveal());

$this->config_file->removePlugin('a\b\c')->shouldBeCalled();

$plugin_list->disable('a\b\c');
}
}

0 comments on commit 13c67cc

Please sign in to comment.