diff --git a/tests/Feature/Admin/PlanAdminTest.php b/tests/Feature/Admin/PlanAdminTest.php index 05234bd..26a3ea0 100644 --- a/tests/Feature/Admin/PlanAdminTest.php +++ b/tests/Feature/Admin/PlanAdminTest.php @@ -385,6 +385,32 @@ it('lists a withdrawn plan as withdrawn, not as missing', function () { ->assertSee(__('plans.withdrawn_badge')); }); +it('shows a normal sellable plan as on sale', function () { + // Der Normalfall — auf den meisten Zeilen der Fall — hatte bisher keinen + // eigenen Test: die drei anderen Zustände sind unten belegt, dieser nicht. + // Bräche $selling oder die erste Bedingung im match(true), verschwände ein + // verkäufliches Paket unbemerkt aus der Liste, und ausgerechnet der + // häufigste Zustand wäre der einzige ungeprüfte. + // + // Business hängt hier nicht zufällig im Verkauf: geprüft wird, dass es + // weder internal noch zurückgezogen ist und tatsächlich in sellable() + // steht — der echte Normalfall, kein Schalter extra dafür umgelegt. + $business = PlanFamily::query()->where('key', 'business')->sole(); + expect($business->internal)->toBeFalse() + ->and($business->sales_enabled)->toBeTrue() + ->and(array_keys(app(PlanCatalogue::class)->sellable()))->toContain('business'); + + $html = Livewire::actingAs(owner(), 'operator')->test(Plans::class)->html(); + + // assertSee(__('plans.on_sale')) allein bewiese nichts: die Spaltenüber- + // schrift ("plans.live_version") übersetzt zufällig auf denselben Satz + // "Im Verkauf" und stünde selbst dann auf der Seite, wenn keine einzige + // Zeile die Plakette zeigte. Die Überschrift kommt genau einmal vor — + // mehr als das beweist, dass mindestens eine Zeile die Plakette selbst + // trägt. + expect(substr_count($html, __('plans.on_sale')))->toBeGreaterThan(1); +}); + it('shows an internal plan as console-only, not as nothing available', function () { // Intern (`test`) ist internal=true mit einer laufenden Version — die // Liste fragte bisher nur "steht die Familie im Verkaufskatalog?" und