Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\IntegrationsBundle\Tests\Unit\Command; | |
use Mautic\CoreBundle\Test\IsolatedTestTrait; | |
use Mautic\IntegrationsBundle\Command\SyncCommand; | |
use Mautic\IntegrationsBundle\Sync\DAO\Sync\InputOptionsDAO; | |
use Mautic\IntegrationsBundle\Sync\SyncDataExchange\Internal\Object\Contact; | |
use Mautic\IntegrationsBundle\Sync\SyncService\SyncServiceInterface; | |
use PHPUnit\Framework\TestCase; | |
use Symfony\Component\Console\Application; | |
use Symfony\Component\Console\Input\InputOption; | |
use Symfony\Component\Console\Tester\CommandTester; | |
class SyncCommandTest extends TestCase | |
{ | |
use IsolatedTestTrait; | |
private const INTEGRATION_NAME = 'Test'; | |
/** | |
* @var SyncServiceInterface|\PHPUnit\Framework\MockObject\MockObject | |
*/ | |
private \PHPUnit\Framework\MockObject\MockObject $syncService; | |
private CommandTester $commandTester; | |
public function setUp(): void | |
{ | |
parent::setUp(); | |
$this->syncService = $this->createMock(SyncServiceInterface::class); | |
$application = new Application(); | |
$application->add(new SyncCommand($this->syncService)); | |
// env is global option. Must be defined. | |
$application->getDefinition()->addOption( | |
new InputOption( | |
'--env', | |
'-e', | |
InputOption::VALUE_OPTIONAL, | |
'The environment to operate in.', | |
'DEV' | |
) | |
); | |
$this->commandTester = new CommandTester( | |
$application->find(SyncCommand::NAME) | |
); | |
} | |
public function testExecuteWithoutIntetrationName(): void | |
{ | |
$this->assertSame(1, $this->commandTester->execute([])); | |
} | |
/** | |
* @runInSeparateProcess | |
* | |
* @preserveGlobalState disabled | |
*/ | |
public function testExecuteWithSomeOptions(): void | |
{ | |
$this->syncService->expects($this->once()) | |
->method('processIntegrationSync') | |
->with($this->callback(function (InputOptionsDAO $inputOptionsDAO) { | |
$this->assertSame(self::INTEGRATION_NAME, $inputOptionsDAO->getIntegration()); | |
$this->assertSame(['123', '345'], $inputOptionsDAO->getMauticObjectIds()->getObjectIdsFor(Contact::NAME)); | |
$this->assertNull($inputOptionsDAO->getIntegrationObjectIds()); | |
$this->assertTrue($inputOptionsDAO->pullIsEnabled()); | |
$this->assertFalse($inputOptionsDAO->pushIsEnabled()); | |
return true; | |
})); | |
$code = $this->commandTester->execute([ | |
'integration' => self::INTEGRATION_NAME, | |
'--disable-push' => true, | |
'--mautic-object-id' => ['contact:123', 'contact:345'], | |
]); | |
$this->assertSame(0, $code); | |
} | |
/** | |
* @runInSeparateProcess | |
* | |
* @preserveGlobalState disabled | |
*/ | |
public function testExecuteWhenSyncThrowsException(): void | |
{ | |
$this->syncService->expects($this->once()) | |
->method('processIntegrationSync') | |
->with($this->callback(function (InputOptionsDAO $inputOptionsDAO) { | |
$this->assertSame(self::INTEGRATION_NAME, $inputOptionsDAO->getIntegration()); | |
return true; | |
})) | |
->will($this->throwException(new \Exception())); | |
$code = $this->commandTester->execute(['integration' => self::INTEGRATION_NAME]); | |
$this->assertSame(1, $code); | |
} | |
} | |