Files
fotospiel-app/tests/Unit/Services/EventAddonCatalogTest.php
Codex Agent d2808ffa4f
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled
feat(addons): finalize event addon catalog and ai styling upgrade flow
2026-02-07 12:35:07 +01:00

55 lines
1.7 KiB
PHP

<?php
namespace Tests\Unit\Services;
use App\Models\PackageAddon;
use App\Services\Addons\EventAddonCatalog;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Config;
use Tests\TestCase;
class EventAddonCatalogTest extends TestCase
{
use RefreshDatabase;
public function test_prefers_database_addons_over_config(): void
{
Config::set('package-addons', [
'extra_photos_small' => [
'label' => 'Config Photos',
'variant_id' => 'var_config',
'increments' => ['extra_photos' => 100],
],
]);
PackageAddon::create([
'key' => 'extra_photos_small',
'label' => 'DB Photos',
'variant_id' => 'var_db',
'extra_photos' => 200,
'active' => true,
'sort' => 1,
'metadata' => [
'price_eur' => 12,
'scope' => 'feature',
'entitlements' => [
'features' => ['ai_styling'],
],
],
]);
$catalog = $this->app->make(EventAddonCatalog::class);
$addon = $catalog->find('extra_photos_small');
$this->assertNotNull($addon);
$this->assertSame('DB Photos', $addon['label']);
$this->assertSame('var_db', $addon['variant_id']);
$this->assertSame(200, $addon['increments']['extra_photos']);
$this->assertSame(12.0, $addon['price']);
$this->assertSame('EUR', $addon['currency']);
$this->assertSame('feature', $addon['metadata']['scope'] ?? null);
$this->assertSame(['ai_styling'], $addon['metadata']['entitlements']['features'] ?? null);
}
}