update migration seeder email template

This commit is contained in:
baodev0
2026-10-22 12:23:05 +07:00
parent 0fef417dcb
commit 54c14c41d8
6 changed files with 208 additions and 13 deletions
+64 -1
View File
@@ -2,10 +2,12 @@
namespace Tests\Feature;
use App\Models\Customer;
use App\Models\Template;
use App\Services\Email\EmailTemplateRenderer;
use App\Services\Email\EmailTemplateService;
use App\Support\EmailScenarioRegistry;
use App\Support\MailGlobals;
use App\Support\MailPlaceholders;
use Database\Seeders\EmailTemplates\TemplateVariables;
use Database\Seeders\EmailTemplates\ServiceLifecycleTemplates;
@@ -43,7 +45,7 @@ class TemplateSeederTest extends TestCase
public function test_service_lifecycle_templates_are_seeded_once_as_marketing(): void
{
$items = ServiceLifecycleTemplates::all();
$this->assertCount(27, $items);
$this->assertCount(37, $items);
$this->seed(TemplateSeeder::class);
$this->seed(TemplateSeeder::class);
@@ -56,6 +58,67 @@ class TemplateSeederTest extends TestCase
}
}
public function test_generic_new_service_template_fills_customer_email_and_hides_empty_access_rows(): void
{
$this->seed(TemplateSeeder::class);
$template = Template::where('name', 'Dịch vụ — Cấp mới dịch vụ (chưa có tài khoản)')->firstOrFail();
$customer = new Customer(['fullname' => 'Nguyễn Văn A', 'email' => 'nva@example.com']);
$values = collect($template->variables())->map(fn ($definition) => $definition['example'] ?? '')
->merge(MailGlobals::values())
->merge(MailPlaceholders::recipientValues($customer, $customer->email))
->merge(['account_pass' => 'Pass#2026'])
->all();
$html = app(EmailTemplateRenderer::class)->render($template, $values)['html'];
$this->assertStringContainsString('nva@example.com', $html);
$this->assertStringContainsString('Pass#2026', $html);
$this->assertStringContainsString(MailGlobals::values()['login_url'], $html);
$this->assertStringNotContainsString('IP / Host', $html);
}
public function test_cloud_vps_new_service_templates_include_service_and_customer_account(): void
{
$this->seed(TemplateSeeder::class);
$customer = new Customer(['fullname' => 'Nguyễn Văn A', 'email' => 'nva@example.com']);
foreach (['đã có tài khoản' => false, 'chưa có tài khoản' => true] as $suffix => $showsPassword) {
$template = Template::where('name', "Cloud VPS — Cấp mới dịch vụ (khách hàng {$suffix})")->firstOrFail();
$values = collect($template->variables())->map(fn ($definition) => $definition['example'] ?? '')
->merge(MailGlobals::values())
->merge(MailPlaceholders::recipientValues($customer, $customer->email))
->merge(['account_pass' => 'Pass#2026', 'service_host' => '203.0.113.99'])
->all();
$html = app(EmailTemplateRenderer::class)->render($template, $values)['html'];
$this->assertStringContainsString('nva@example.com', $html, $suffix);
$this->assertStringContainsString('203.0.113.99', $html, $suffix);
$this->assertStringContainsString('Hệ điều hành', $html, $suffix);
$this->assertSame($showsPassword, str_contains($html, 'Pass#2026'), $suffix);
}
}
public function test_every_service_has_new_service_templates_by_account_state(): void
{
$this->seed(TemplateSeeder::class);
$customer = new Customer(['fullname' => 'Nguyễn Văn A', 'email' => 'nva@example.com']);
foreach (['SSL', 'Tên miền', 'Hosting', 'Cloud VPS'] as $label) {
foreach (['đã có tài khoản', 'chưa có tài khoản'] as $suffix) {
$template = Template::where('name', "{$label} — Cấp mới dịch vụ (khách hàng {$suffix})")->firstOrFail();
$values = collect($template->variables())->map(fn ($definition) => $definition['example'] ?? '')
->merge(MailGlobals::values())
->merge(MailPlaceholders::recipientValues($customer, $customer->email))
->all();
$html = app(EmailTemplateRenderer::class)->render($template, $values)['html'];
$this->assertStringContainsString('nva@example.com', $html, "{$label} {$suffix}");
$this->assertStringContainsString(MailGlobals::values()['login_url'], $html, "{$label} {$suffix}");
$this->assertStringNotContainsString('eKYC', $html, "{$label} {$suffix}");
}
}
}
public function test_every_placeholder_has_a_variable_definition(): void
{
foreach ([...TemplateSeeder::templates(), ...TemplateSeeder::legacyTemplates()] as $item) {