Spaces:
No application file
No application file
| namespace Mautic\PluginBundle\Tests\Helper; | |
| use Doctrine\DBAL\Schema\Schema; | |
| use Doctrine\ORM\Mapping\ClassMetadata; | |
| use Mautic\CoreBundle\Factory\MauticFactory; | |
| use Mautic\PluginBundle\Entity\Plugin; | |
| use Mautic\PluginBundle\Event\PluginInstallEvent; | |
| use Mautic\PluginBundle\Event\PluginUpdateEvent; | |
| use Mautic\PluginBundle\Helper\ReloadHelper; | |
| use Mautic\PluginBundle\PluginEvents; | |
| use PHPUnit\Framework\MockObject\MockObject; | |
| use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
| class ReloadHelperTest extends \PHPUnit\Framework\TestCase | |
| { | |
| private MockObject $factoryMock; | |
| private ReloadHelper $helper; | |
| private array $sampleAllPlugins = []; | |
| private array $sampleMetaData = []; | |
| private array $sampleSchemas = []; | |
| /** | |
| * @var MockObject&EventDispatcherInterface | |
| */ | |
| private MockObject $eventDispatcher; | |
| protected function setUp(): void | |
| { | |
| parent::setUp(); | |
| $this->eventDispatcher = $this->createMock(EventDispatcherInterface::class); | |
| $this->factoryMock = $this->createMock(MauticFactory::class); | |
| $this->helper = new ReloadHelper($this->eventDispatcher, $this->factoryMock); | |
| $this->sampleMetaData = [ | |
| 'MauticPlugin\MauticZapierBundle' => [$this->createMock(ClassMetadata::class)], | |
| ]; | |
| $sampleSchema = $this->createMock(Schema::class); | |
| $sampleSchema->method('getTables') | |
| ->willReturn([]); | |
| $this->sampleSchemas = [ | |
| 'MauticPlugin\MauticZapierBundle' => $sampleSchema, | |
| ]; | |
| $this->sampleAllPlugins = [ | |
| 'MauticZapierBundle' => [ | |
| 'isPlugin' => true, | |
| 'base' => 'MauticZapier', | |
| 'bundle' => 'MauticZapierBundle', | |
| 'namespace' => 'MauticPlugin\MauticZapierBundle', | |
| 'symfonyBundleName' => 'MauticZapierBundle', | |
| 'bundleClass' => PluginBundleBaseStub::class, | |
| 'permissionClasses' => [], | |
| 'relative' => 'plugins/MauticZapierBundle', | |
| 'directory' => '/Users/jan/dev/mautic/plugins/MauticZapierBundle', | |
| 'config' => [ | |
| 'name' => 'Zapier Integration', | |
| 'description' => 'Zapier lets you connect Mautic with 1100+ other apps', | |
| 'version' => '1.0', | |
| 'author' => 'Mautic', | |
| ], | |
| ], | |
| ]; | |
| } | |
| public function testDisableMissingPlugins(): void | |
| { | |
| $sampleInstalledPlugins = [ | |
| 'MauticZapierBundle' => $this->createSampleZapierPlugin(), | |
| 'MauticHappierBundle' => $this->createSampleHappierPlugin(), | |
| ]; | |
| $disabledPlugins = $this->helper->disableMissingPlugins($this->sampleAllPlugins, $sampleInstalledPlugins); | |
| $this->assertEquals(1, count($disabledPlugins)); | |
| $this->assertEquals('Happier Integration', $disabledPlugins['MauticHappierBundle']->getName()); | |
| $this->assertTrue($disabledPlugins['MauticHappierBundle']->isMissing()); | |
| } | |
| public function testEnableFoundPlugins(): void | |
| { | |
| $zapierPlugin = $this->createSampleZapierPlugin(); | |
| $zapierPlugin->setIsMissing(true); | |
| $sampleInstalledPlugins = [ | |
| 'MauticZapierBundle' => $zapierPlugin, | |
| ]; | |
| $enabledPlugins = $this->helper->enableFoundPlugins($this->sampleAllPlugins, $sampleInstalledPlugins); | |
| $this->assertEquals(1, count($enabledPlugins)); | |
| $this->assertEquals('Zapier Integration', $enabledPlugins['MauticZapierBundle']->getName()); | |
| $this->assertFalse($enabledPlugins['MauticZapierBundle']->isMissing()); | |
| } | |
| public function testUpdatePlugins(): void | |
| { | |
| $this->sampleAllPlugins['MauticZapierBundle']['config']['version'] = '1.0.1'; | |
| $this->sampleAllPlugins['MauticZapierBundle']['config']['description'] = 'Updated description'; | |
| $sampleInstalledPlugins = [ | |
| 'MauticZapierBundle' => $this->createSampleZapierPlugin(), | |
| 'MauticHappierBundle' => $this->createSampleHappierPlugin(), | |
| ]; | |
| $plugin = $this->createSampleZapierPlugin(); | |
| $plugin->setVersion('1.0.1'); | |
| $plugin->setDescription('Updated description'); | |
| $event = new PluginUpdateEvent($plugin, '1.0'); | |
| $this->eventDispatcher->expects($this->once())->method('dispatch')->with($event, PluginEvents::ON_PLUGIN_UPDATE); | |
| $updatedPlugins = $this->helper->updatePlugins($this->sampleAllPlugins, $sampleInstalledPlugins, $this->sampleMetaData, $this->sampleSchemas); | |
| $this->assertEquals(1, count($updatedPlugins)); | |
| $this->assertEquals('Zapier Integration', $updatedPlugins['MauticZapierBundle']->getName()); | |
| $this->assertEquals('1.0.1', $updatedPlugins['MauticZapierBundle']->getVersion()); | |
| $this->assertEquals('Updated description', $updatedPlugins['MauticZapierBundle']->getDescription()); | |
| } | |
| public function testInstallPlugins(): void | |
| { | |
| $sampleInstalledPlugins = [ | |
| 'MauticHappierBundle' => $this->createSampleHappierPlugin(), | |
| ]; | |
| $event = new PluginInstallEvent($this->createSampleZapierPlugin()); | |
| $this->eventDispatcher->expects($this->once())->method('dispatch')->with($event, PluginEvents::ON_PLUGIN_INSTALL); | |
| $installedPlugins = $this->helper->installPlugins($this->sampleAllPlugins, $sampleInstalledPlugins, $this->sampleMetaData, $this->sampleSchemas); | |
| $this->assertEquals(1, count($installedPlugins)); | |
| $this->assertEquals('Zapier Integration', $installedPlugins['MauticZapierBundle']->getName()); | |
| $this->assertEquals('1.0', $installedPlugins['MauticZapierBundle']->getVersion()); | |
| $this->assertEquals('MauticZapierBundle', $installedPlugins['MauticZapierBundle']->getBundle()); | |
| $this->assertEquals('Mautic', $installedPlugins['MauticZapierBundle']->getAuthor()); | |
| $this->assertEquals('Zapier lets you connect Mautic with 1100+ other apps', $installedPlugins['MauticZapierBundle']->getDescription()); | |
| $this->assertFalse($installedPlugins['MauticZapierBundle']->isMissing()); | |
| } | |
| private function createSampleZapierPlugin() | |
| { | |
| $plugin = new Plugin(); | |
| $plugin->setName('Zapier Integration'); | |
| $plugin->setDescription('Zapier lets you connect Mautic with 1100+ other apps'); | |
| $plugin->isMissing(false); | |
| $plugin->setBundle('MauticZapierBundle'); | |
| $plugin->setVersion('1.0'); | |
| $plugin->setAuthor('Mautic'); | |
| return $plugin; | |
| } | |
| private function createSampleHappierPlugin() | |
| { | |
| $plugin = new Plugin(); | |
| $plugin->setName('Happier Integration'); | |
| $plugin->setDescription('Happier lets you connect Mautic with 1100+ other apps'); | |
| $plugin->isMissing(false); | |
| $plugin->setBundle('MauticHappierBundle'); | |
| $plugin->setVersion('1.0'); | |
| $plugin->setAuthor('Mautic'); | |
| return $plugin; | |
| } | |
| } | |