Initial commit: CloudOps infrastructure platform
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace MauticPlugin\MauticFocusBundle\Tests\Functional\Controller;
|
||||
|
||||
use Mautic\CoreBundle\Test\MauticMysqlTestCase;
|
||||
use Mautic\ProjectBundle\Entity\Project;
|
||||
use MauticPlugin\MauticFocusBundle\Entity\Focus;
|
||||
use PHPUnit\Framework\Assert;
|
||||
|
||||
class FocusControllerTest extends MauticMysqlTestCase
|
||||
{
|
||||
public function testFocusWithProject(): void
|
||||
{
|
||||
$focus = new Focus();
|
||||
$focus->setName('Test Focus');
|
||||
$focus->setType('notice');
|
||||
$focus->setStyle('bar');
|
||||
$this->em->persist($focus);
|
||||
|
||||
$project = new Project();
|
||||
$project->setName('Test Project');
|
||||
$this->em->persist($project);
|
||||
|
||||
$this->em->flush();
|
||||
$this->em->clear();
|
||||
|
||||
$crawler = $this->client->request('GET', '/s/focus/edit/'.$focus->getId());
|
||||
$form = $crawler->selectButton('Save')->form();
|
||||
$form['focus[projects]']->setValue((string) $project->getId());
|
||||
|
||||
$this->client->submit($form);
|
||||
|
||||
$this->assertResponseIsSuccessful();
|
||||
|
||||
$savedFocus = $this->em->find(Focus::class, $focus->getId());
|
||||
Assert::assertSame($project->getId(), $savedFocus->getProjects()->first()->getId());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace MauticPlugin\MauticFocusBundle\Tests\Functional\Controller;
|
||||
|
||||
use Mautic\ProjectBundle\Tests\Functional\AbstractProjectSearchTestCase;
|
||||
use MauticPlugin\MauticFocusBundle\Entity\Focus;
|
||||
|
||||
final class FocusProjectSearchFunctionalTest extends AbstractProjectSearchTestCase
|
||||
{
|
||||
#[\PHPUnit\Framework\Attributes\DataProvider('searchDataProvider')]
|
||||
public function testProjectSearch(string $searchTerm, array $expectedEntities, array $unexpectedEntities): void
|
||||
{
|
||||
$projectOne = $this->createProject('Project One');
|
||||
$projectTwo = $this->createProject('Project Two');
|
||||
$projectThree = $this->createProject('Project Three');
|
||||
|
||||
$focusAlpha = $this->createFocus('Focus Alpha');
|
||||
$focusBeta = $this->createFocus('Focus Beta');
|
||||
$this->createFocus('Focus Gamma');
|
||||
$this->createFocus('Focus Delta');
|
||||
|
||||
$focusAlpha->addProject($projectOne);
|
||||
$focusAlpha->addProject($projectTwo);
|
||||
$focusBeta->addProject($projectTwo);
|
||||
$focusBeta->addProject($projectThree);
|
||||
|
||||
$this->em->flush();
|
||||
$this->em->clear();
|
||||
|
||||
$this->searchAndAssert($searchTerm, $expectedEntities, $unexpectedEntities, ['/api/focus', '/s/focus']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Generator<string, array{searchTerm: string, expectedEntities: array<string>, unexpectedEntities: array<string>}>
|
||||
*/
|
||||
public static function searchDataProvider(): \Generator
|
||||
{
|
||||
yield 'search by one project' => [
|
||||
'searchTerm' => 'project:"Project Two"',
|
||||
'expectedEntities' => ['Focus Alpha', 'Focus Beta'],
|
||||
'unexpectedEntities' => ['Focus Gamma', 'Focus Delta'],
|
||||
];
|
||||
|
||||
yield 'search by one project AND focus name' => [
|
||||
'searchTerm' => 'project:"Project Two" AND Beta',
|
||||
'expectedEntities' => ['Focus Beta'],
|
||||
'unexpectedEntities' => ['Focus Alpha', 'Focus Gamma', 'Focus Delta'],
|
||||
];
|
||||
|
||||
yield 'search by one project OR focus name' => [
|
||||
'searchTerm' => 'project:"Project Two" OR Gamma',
|
||||
'expectedEntities' => ['Focus Alpha', 'Focus Beta', 'Focus Gamma'],
|
||||
'unexpectedEntities' => ['Focus Delta'],
|
||||
];
|
||||
|
||||
yield 'search by NOT one project' => [
|
||||
'searchTerm' => '!project:"Project Two"',
|
||||
'expectedEntities' => ['Focus Gamma', 'Focus Delta'],
|
||||
'unexpectedEntities' => ['Focus Alpha', 'Focus Beta'],
|
||||
];
|
||||
|
||||
yield 'search by two projects with AND' => [
|
||||
'searchTerm' => 'project:"Project Two" AND project:"Project Three"',
|
||||
'expectedEntities' => ['Focus Beta'],
|
||||
'unexpectedEntities' => ['Focus Alpha', 'Focus Gamma', 'Focus Delta'],
|
||||
];
|
||||
|
||||
yield 'search by two projects with NOT AND' => [
|
||||
'searchTerm' => '!project:"Project Two" AND !project:"Project Three"',
|
||||
'expectedEntities' => ['Focus Gamma', 'Focus Delta'],
|
||||
'unexpectedEntities' => ['Focus Alpha', 'Focus Beta'],
|
||||
];
|
||||
|
||||
yield 'search by two projects with OR' => [
|
||||
'searchTerm' => 'project:"Project Two" OR project:"Project Three"',
|
||||
'expectedEntities' => ['Focus Alpha', 'Focus Beta'],
|
||||
'unexpectedEntities' => ['Focus Gamma', 'Focus Delta'],
|
||||
];
|
||||
|
||||
yield 'search by two projects with NOT OR' => [
|
||||
'searchTerm' => '!project:"Project Two" OR !project:"Project Three"',
|
||||
'expectedEntities' => ['Focus Alpha', 'Focus Gamma', 'Focus Delta'],
|
||||
'unexpectedEntities' => ['Focus Beta'],
|
||||
];
|
||||
}
|
||||
|
||||
private function createFocus(string $name): Focus
|
||||
{
|
||||
$focus = new Focus();
|
||||
$focus->setName($name);
|
||||
$focus->setType('notice');
|
||||
$focus->setStyle('bar');
|
||||
$this->em->persist($focus);
|
||||
|
||||
return $focus;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace MauticPlugin\MauticFocusBundle\Tests\Functional\Controller;
|
||||
|
||||
use Mautic\CoreBundle\Test\MauticMysqlTestCase;
|
||||
use Mautic\PageBundle\Entity\Redirect;
|
||||
use MauticPlugin\MauticFocusBundle\Entity\Focus;
|
||||
use PHPUnit\Framework\Assert;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
|
||||
class PublicControllerTest extends MauticMysqlTestCase
|
||||
{
|
||||
#[\PHPUnit\Framework\Attributes\PreserveGlobalState(false)]
|
||||
#[\PHPUnit\Framework\Attributes\RunInSeparateProcess]
|
||||
public function testGenerateActionWithContactTokenInLinkUrl(): void
|
||||
{
|
||||
$linkUrl = 'https://{contactfield=site_url}/tour';
|
||||
$focus = new Focus();
|
||||
$focus->setName('Test');
|
||||
$focus->setType('link');
|
||||
$focus->setStyle('modal');
|
||||
$focus->setProperties([
|
||||
'content' => [
|
||||
'headline' => '',
|
||||
'link_text' => 'Link text',
|
||||
'link_url' => $linkUrl,
|
||||
'font' => 'Arial, Helvetica, sans-serif',
|
||||
'link_new_window' => 1,
|
||||
],
|
||||
'when' => 'immediately',
|
||||
'modal' => [
|
||||
'placement' => 'top',
|
||||
],
|
||||
'frequency' => 'everypage',
|
||||
'colors' => [
|
||||
'primary' => '#4e5d9d',
|
||||
'text' => '#000000',
|
||||
'button' => '#fdb933',
|
||||
'button_text' => '#ffffff',
|
||||
],
|
||||
]);
|
||||
$this->em->persist($focus);
|
||||
$this->em->flush();
|
||||
$this->em->clear();
|
||||
|
||||
$this->client->request(Request::METHOD_GET, sprintf('/focus/%s.js', $focus->getId()));
|
||||
$content = $this->client->getResponse()->getContent();
|
||||
|
||||
$redirects = $this->em->getRepository(Redirect::class)->findAll();
|
||||
Assert::assertCount(1, $redirects);
|
||||
|
||||
/** @var Redirect $redirect */
|
||||
$redirect = reset($redirects);
|
||||
Assert::assertSame($linkUrl, $redirect->getUrl());
|
||||
|
||||
$url = $this->router->generate('mautic_url_redirect', ['redirectId' => $redirect->getRedirectId()], UrlGeneratorInterface::ABSOLUTE_URL);
|
||||
$twig = $this->getContainer()->get('twig');
|
||||
if (!$twig->hasExtension(\Twig\Extension\EscaperExtension::class)) {
|
||||
$twig->addExtension(new \Twig\Extension\EscaperExtension());
|
||||
}
|
||||
$url = $twig->getRuntime(\Twig\Runtime\EscaperRuntime::class)->escape($url, 'js');
|
||||
Assert::assertStringContainsString($url, $content);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user