Files
amare/tests/Feature/Marketing/WeddingPackageTest.php

66 lines
2.2 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Feature\Marketing;
use App\Domain\Marketing\PackageIconCatalog;
use App\Models\WeddingPackage;
use Database\Seeders\ContentSeeder;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Str;
use Tests\TestCase;
class WeddingPackageTest extends TestCase
{
use RefreshDatabase;
public function test_published_scope_excludes_drafts_and_keeps_cms_order(): void
{
WeddingPackage::factory()->create(['name' => 'Rascunho', 'published_at' => null]);
$second = WeddingPackage::factory()->published()->create(['name' => 'Segundo', 'sort_order' => 20]);
$first = WeddingPackage::factory()->published()->create(['name' => 'Primeiro', 'sort_order' => 10]);
$packages = WeddingPackage::query()->published()->orderBy('sort_order')->get();
$this->assertCount(2, $packages);
$this->assertTrue($packages->first()?->is($first));
$this->assertTrue($packages->last()?->is($second));
}
public function test_content_seeder_creates_official_wedding_modalities(): void
{
$this->app->detectEnvironment(fn (): string => 'testing');
$this->seed(ContentSeeder::class);
$this->assertSame(
['Essenza', 'Conduzione', 'Grand Jour'],
WeddingPackage::query()->published()->orderBy('sort_order')->pluck('name')->all(),
);
}
public function test_factory_generates_a_slug_and_autofills_blank_slug_from_name(): void
{
$package = WeddingPackage::factory()->published()->create();
$this->assertNotEmpty($package->slug);
$this->assertSame(Str::slug($package->name), $package->slug);
$explicit = WeddingPackage::factory()->create(['name' => 'Pacote com nome', 'slug' => null]);
$this->assertSame('pacote-com-nome', $explicit->slug);
}
public function test_package_icon_catalog_accepts_known_keys_and_rejects_unknown(): void
{
foreach (PackageIconCatalog::keys() as $key) {
$this->assertTrue(PackageIconCatalog::isValid($key));
$this->assertNotNull(PackageIconCatalog::labelFor($key));
}
$this->assertFalse(PackageIconCatalog::isValid('paw'));
$this->assertNull(PackageIconCatalog::labelFor('paw'));
}
}