diff --git a/src/Codeception/Module/Symfony.php b/src/Codeception/Module/Symfony.php index bba8d3b1..2b96f4dd 100644 --- a/src/Codeception/Module/Symfony.php +++ b/src/Codeception/Module/Symfony.php @@ -23,6 +23,7 @@ use Codeception\Module\Symfony\SecurityAssertionsTrait; use Codeception\Module\Symfony\ServicesAssertionsTrait; use Codeception\Module\Symfony\SessionAssertionsTrait; +use Codeception\Module\Symfony\TwigAssertionsTrait; use Codeception\TestInterface; use Exception; use ReflectionClass; @@ -153,7 +154,8 @@ class Symfony extends Framework implements DoctrineProvider, PartedModule RouterAssertionsTrait, SecurityAssertionsTrait, ServicesAssertionsTrait, - SessionAssertionsTrait + SessionAssertionsTrait, + TwigAssertionsTrait ; private static $possibleKernelClasses = [ diff --git a/src/Codeception/Module/Symfony/TwigAssertionsTrait.php b/src/Codeception/Module/Symfony/TwigAssertionsTrait.php new file mode 100644 index 00000000..80ac4c29 --- /dev/null +++ b/src/Codeception/Module/Symfony/TwigAssertionsTrait.php @@ -0,0 +1,87 @@ +dontSeeRenderedTemplate('home.html.twig'); + * ``` + * + * @param string $template + */ + public function dontSeeRenderedTemplate(string $template): void + { + $twigCollector = $this->grabTwigCollector(__FUNCTION__); + + $templates = (array) $twigCollector->getTemplates(); + + $this->assertArrayNotHasKey( + $template, + $templates, + "Template {$template} was rendered." + ); + } + + /** + * Asserts that the current template matches the expected template. + * + * ```php + * seeCurrentTemplateIs('home.html.twig'); + * ``` + * + * @param string $expectedTemplate + */ + public function seeCurrentTemplateIs(string $expectedTemplate): void + { + $twigCollector = $this->grabTwigCollector(__FUNCTION__); + + $templates = (array) $twigCollector->getTemplates(); + $actualTemplate = array_key_first($templates); + + $this->assertEquals( + $expectedTemplate, + $actualTemplate, + "Actual template {$actualTemplate} does not match expected template {$expectedTemplate}." + ); + } + + /** + * Asserts that a template was rendered in the response. + * That includes templates built with [inheritance](https://twig.symfony.com/doc/3.x/templates.html#template-inheritance). + * + * ```php + * seeRenderedTemplate('home.html.twig'); + * $I->seeRenderedTemplate('layout.html.twig'); + * ``` + * + * @param string $template + */ + public function seeRenderedTemplate(string $template): void + { + $twigCollector = $this->grabTwigCollector(__FUNCTION__); + + $templates = (array) $twigCollector->getTemplates(); + + $this->assertArrayHasKey( + $template, + $templates, + "Template {$template} was not rendered." + ); + } + + protected function grabTwigCollector(string $function): TwigDataCollector + { + return $this->grabCollector('twig', $function); + } +} \ No newline at end of file