diff --git a/tests/E2E/EmailTemplatesTest.php b/tests/E2E/EmailTemplatesTest.php new file mode 100644 index 0000000..cd0e112 --- /dev/null +++ b/tests/E2E/EmailTemplatesTest.php @@ -0,0 +1,361 @@ + + + + + + Welcome to Our Service! + + + + Thank you for signing up. We are excited to have you on board. + + + Get Started + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Welcome to Our Service!'); + expect($html)->toContain('Get Started'); + expect($html)->toContain('https://example.com/get-started'); + }); + + it('renders a newsletter with images and dividers', function () { + $mjml = <<<'MJML' + + + + + + + Monthly Newsletter + + + + + + + + Here are this month highlights + + + + Read More + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Company Logo'); + expect($html)->toContain('Monthly Newsletter'); + expect($html)->toContain('Read More'); + }); + + it('renders a promotional email with hero image', function () { + $mjml = <<<'MJML' + + + + + Summer Sale + + + Up to 50% Off + + + Shop Now + + + + + + Limited time offer + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Summer Sale'); + expect($html)->toContain('Shop Now'); + }); + + it('renders a transactional email with table data', function () { + $mjml = <<<'MJML' + + + + + + Order Confirmation + + + Order #12345 + + + Your order has been confirmed and will ship soon. + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Order Confirmation'); + expect($html)->toContain('Order #12345'); + expect($html)->toContain('will ship soon'); + }); + + it('renders a multi-column layout', function () { + $mjml = <<<'MJML' + + + + + + + Fast Delivery + + + Get your order in 2 days + + + + + + Free Returns + + + 30-day return policy + + + + + + 24/7 Support + + + We are here to help + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Fast Delivery'); + expect($html)->toContain('Free Returns'); + expect($html)->toContain('24/7 Support'); + }); + + it('renders email with wrapper for full-width background', function () { + $mjml = <<<'MJML' + + + + + + + Full Width Background Section + + + This section has a full-width colored background + + + + + + + + Regular content continues here + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Full Width Background Section'); + expect($html)->toContain('Regular content continues here'); + }); + + it('renders email with group for mobile layout control', function () { + $mjml = <<<'MJML' + + + + + + + Column 1 - Stays side-by-side + + + + + Column 2 - Stays side-by-side + + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Column 1'); + expect($html)->toContain('Column 2'); + }); + + it('renders email with raw HTML content', function () { + $mjml = <<<'MJML' + + + + + + Above content + + + Below content + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Above content'); + expect($html)->toContain('Below content'); + }); + + it('renders a complex email with multiple sections', function () { + $mjml = <<<'MJML' + + + + + + + + + + + + Welcome Back! + + + Here is what you missed this week + + + + + + + + Article Title 1 + Brief description of the article + Read More + + + + Article Title 2 + Brief description of the article + Read More + + + + + + + 2025 Company Name. All rights reserved. + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Welcome Back!'); + expect($html)->toContain('Article Title 1'); + expect($html)->toContain('Article Title 2'); + expect($html)->toContain('2025 Company Name'); + }); + + it('validates basic rendering structure', function () { + $mjml = <<<'MJML' + + + + + Test content + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + // Check that content is rendered + expect($html)->toContain('Test content'); + expect($html)->not->toBeEmpty(); + }); +}); diff --git a/tests/E2E/InteractiveEmailsTest.php b/tests/E2E/InteractiveEmailsTest.php new file mode 100644 index 0000000..4342650 --- /dev/null +++ b/tests/E2E/InteractiveEmailsTest.php @@ -0,0 +1,284 @@ + + + + + + Frequently Asked Questions + + + What is your return policy? + + + We offer a 30-day return policy on all items. + + + How long does shipping take? + + + Standard shipping takes 3-5 business days. + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Frequently Asked Questions'); + expect($html)->toContain('What is your return policy?'); + expect($html)->toContain('30-day return policy'); + expect($html)->toContain('How long does shipping take?'); + }); + + it('renders email with carousel for product showcase', function () { + $mjml = <<<'MJML' + + + + + + Featured Products + + + + + + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Featured Products'); + expect($html)->toContain('product1.jpg'); + expect($html)->toContain('product2.jpg'); + expect($html)->toContain('product3.jpg'); + }); + + it('renders email with navbar for navigation', function () { + $mjml = <<<'MJML' + + + + + + + Home + + + Products + + + About + + + Contact + + + + + + + + Email content goes here + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Home'); + expect($html)->toContain('Products'); + expect($html)->toContain('About'); + expect($html)->toContain('Contact'); + }); + + it('renders comprehensive marketing email with interactive elements', function () { + $mjml = <<<'MJML' + + + + + + + Home + + + Shop + + + Blog + + + + + + + + New Collection + + + Explore Now + + + + + + + Browse Our Products + + + + + + + + + + + + + Common Questions + + Shipping Information + Free shipping on orders over $50 + Returns + 30-day return policy + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('New Collection'); + expect($html)->toContain('Browse Our Products'); + expect($html)->toContain('Common Questions'); + }); + + it('renders email with styled content sections', function () { + $mjml = <<<'MJML' + + + + + + Question 1 + + + Answer to question 1 with detailed explanation. + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Question 1'); + expect($html)->toContain('Answer to question 1'); + }); + + it('renders email with multiple carousels', function () { + $mjml = <<<'MJML' + + + + + + Men Collection + + + + + + + + + + + Women Collection + + + + + + + + + +MJML; + + $renderer = new MjmlRenderer(); + $html = $renderer->render($mjml); + + expect($html)->toContain('Men Collection'); + expect($html)->toContain('Women Collection'); + expect($html)->toContain('mens1.jpg'); + expect($html)->toContain('womens1.jpg'); + }); +});