<?php 
 
namespace Tamtamchik\SimpleFlash\Test; 
 
use PHPUnit\Framework\TestCase; 
use Tamtamchik\SimpleFlash\Exceptions\FlashTemplateNotFoundException; 
use Tamtamchik\SimpleFlash\Flash; 
use Tamtamchik\SimpleFlash\TemplateFactory; 
use Tamtamchik\SimpleFlash\Templates; 
use function Tamtamchik\SimpleFlash\flash; 
 
require_once __DIR__ . '/../vendor/autoload.php'; 
require_once 'BadTemplate.php'; 
 
class FactoryTest extends TestCase 
{ 
    public static function setUpBeforeClass(): void 
    { 
        flash()->clear(); 
    } 
 
    private $templates = []; 
 
    /** 
     * Prepare setup before tests. 
     */ 
    protected function setUp(): void 
    { 
        $templatesReflection = new \ReflectionClass('Tamtamchik\\SimpleFlash\\Templates'); 
        $this->templates = $templatesReflection->getConstants(); 
    } 
 
    /** 
     * Base create function. 
     * 
     * @param $name 
     * @throws FlashTemplateNotFoundException 
     */ 
    private function _testTemplate($name) 
    { 
        $template = TemplateFactory::create($name); 
 
        $flash = new Flash(); 
 
        $flash->setTemplate($template); 
 
        $msg = $template->wrapMessage('Testing templates'); 
        $text = $template->wrapMessages($msg, 'info'); 
 
        $content = $flash->info('Testing templates')->display(); 
 
        $this->assertStringContainsString($text, $content); 
 
        unset($flash); 
    } 
 
    /** 
     * @test 
     * @throws FlashTemplateNotFoundException 
     */ 
    public function testTemplates() 
    { 
        foreach ($this->templates as $template) { 
            $this->_testTemplate($template); 
        } 
        $this->_testTemplate(Templates::BASE); 
    } 
 
    /** 
     * @test 
     * @throws FlashTemplateNotFoundException 
     */ 
    public function testDefaultTemplate() 
    { 
        $template = TemplateFactory::create(); 
        $this->assertEquals('Tamtamchik\SimpleFlash\Templates\BootstrapTemplate', get_class($template)); 
    } 
 
    /** 
     * @test 
     * @throws FlashTemplateNotFoundException 
     */ 
    public function testBootstrapTemplate() 
    { 
        $template = TemplateFactory::create(Templates::BOOTSTRAP); 
        $this->assertEquals('Tamtamchik\SimpleFlash\Templates\BootstrapTemplate', get_class($template)); 
    } 
 
    /** 
     * @test 
     * @throws FlashTemplateNotFoundException 
     */ 
    public function testFoundationTemplate() 
    { 
        $template = TemplateFactory::create(Templates::FOUNDATION); 
        $this->assertEquals('Tamtamchik\SimpleFlash\Templates\FoundationTemplate', get_class($template)); 
    } 
 
    /** 
     * @test 
     * @throws FlashTemplateNotFoundException 
     */ 
    public function testSemanticTemplate() 
    { 
        $template = TemplateFactory::create(Templates::SEMANTIC); 
        $this->assertEquals('Tamtamchik\SimpleFlash\Templates\SemanticTemplate', get_class($template)); 
    } 
 
    /** 
     * @test 
     * @throws FlashTemplateNotFoundException 
     */ 
    public function testUiKitTemplate() 
    { 
        $template = TemplateFactory::create(Templates::UIKIT); 
        $this->assertEquals('Tamtamchik\SimpleFlash\Templates\UikitTemplate', get_class($template)); 
    } 
 
    /** 
     * @test 
     * @throws FlashTemplateNotFoundException 
     */ 
    public function testBulmaTemplate() 
    { 
        $template = TemplateFactory::create(Templates::BULMA); 
        $this->assertEquals('Tamtamchik\SimpleFlash\Templates\BulmaTemplate', get_class($template)); 
    } 
 
    /** 
     * @test 
     * @throws FlashTemplateNotFoundException 
     */ 
    public function testMaterializeTemplate() 
    { 
        $template = TemplateFactory::create(Templates::MATERIALIZE); 
        $this->assertEquals('Tamtamchik\SimpleFlash\Templates\MaterializeTemplate', get_class($template)); 
    } 
 
    /** 
     * @test 
     * @throws FlashTemplateNotFoundException 
     */ 
    public function testSpectreTemplate() 
    { 
        $template = TemplateFactory::create(Templates::SPECTRE); 
        $this->assertEquals('Tamtamchik\SimpleFlash\Templates\SpectreTemplate', get_class($template)); 
    } 
 
    /** 
     * @test 
     * @throws FlashTemplateNotFoundException 
     */ 
    public function testTailwindTemplate() 
    { 
        $template = TemplateFactory::create(Templates::TAILWIND); 
        $this->assertEquals('Tamtamchik\SimpleFlash\Templates\TailwindTemplate', get_class($template)); 
    } 
 
    /** 
     * @test 
     * @throws FlashTemplateNotFoundException 
     */ 
    public function testPrimerTemplate() 
    { 
        $template = TemplateFactory::create(Templates::PRIMER); 
        $this->assertEquals('Tamtamchik\SimpleFlash\Templates\PrimerTemplate', get_class($template)); 
    } 
 
    /** @test */ 
    public function testNotFoundTemplate() 
    { 
        try { 
            TemplateFactory::create('ABCTemplate'); 
        } catch (FlashTemplateNotFoundException $e) { 
            $this->assertStringContainsString('Template "ABCTemplate" not found!', $e->getMessage()); 
        } 
    } 
} 
 
 |