create(['email' => 'vertrag@example.test', 'email_verified_at' => now()]); $customer = Customer::factory()->create([ 'email' => 'vertrag@example.test', 'user_id' => $user->id, 'status' => 'active', ]); $order = Order::factory()->create(['customer_id' => $customer->id, 'plan' => 'team']); $instance = Instance::factory()->create([ 'customer_id' => $customer->id, 'order_id' => $order->id, 'plan' => 'team', 'status' => 'cancellation_scheduled', 'subdomain' => 'vertrag', 'cancel_requested_at' => now()->subDay(), 'service_ends_at' => now()->addDays(20), 'export_wish' => $exportWunsch, ]); return [$user, $instance->refresh()]; } it('verspricht keinen Export, wenn der Kunde gerade Nein gesagt hat', function () { // K2: zwei richtige Bauteile, ein Bildschirm dazwischen, der beiden // widersprach. Der Dialog schreibt korrekt `false` und leitet auf genau // diese Seite um — und das Erste, was der Kunde dort las, war, dass er // den Export bekommt. [$user, $instance] = kundeMitVorgemerkterKuendigung(false); Livewire::actingAs($user)->test(Settings::class, ['tab' => 'contract']) ->assertSee(__('settings.cancel_scheduled_body_no', [ 'date' => $instance->service_ends_at->local()->isoFormat('LL'), ])) ->assertDontSee(__('settings.cancel_scheduled_body_yes', [ 'date' => $instance->service_ends_at->local()->isoFormat('LL'), ])); }); it('nennt den Export nur dem, der ihn wollte', function () { [$user, $instance] = kundeMitVorgemerkterKuendigung(true); Livewire::actingAs($user)->test(Settings::class, ['tab' => 'contract']) ->assertSee(__('settings.cancel_scheduled_body_yes', [ 'date' => $instance->service_ends_at->local()->isoFormat('LL'), ])); }); it('fragt auf der Vertragsseite nach, wenn niemand gefragt wurde', function () { // `null` heißt: vor dieser Ausrollung gekündigt. Der Satz fragt dann, // statt zu versprechen — und sagt, was passiert, wenn die Frage offen // bleibt. [$user, $instance] = kundeMitVorgemerkterKuendigung(null); Livewire::actingAs($user)->test(Settings::class, ['tab' => 'contract']) ->assertSee(__('settings.cancel_scheduled_body_open', [ 'date' => $instance->service_ends_at->local()->isoFormat('LL'), ])) ->assertDontSee(__('settings.cancel_scheduled_body_yes', [ 'date' => $instance->service_ends_at->local()->isoFormat('LL'), ])); }); it('zeigt dem Betreiber, wer einen Export bestellt hat und bis wann', function () { // W1: ohne diesen Abschnitt hatte ein „Ja" in der ganzen Konsole keinen // einzigen Leser — ein grep über app/ und die Konsolenansichten fand // ausserhalb dieses Vorhabens keinen Treffer. Beides muss dastehen: wer, // und wann dessen Laufzeit endet. $customer = Customer::factory()->create(['name' => 'Exportkundin GmbH']); $instance = Instance::factory()->create([ 'customer_id' => $customer->id, 'status' => 'cancellation_scheduled', 'subdomain' => 'exportkundin', 'service_ends_at' => now()->addDays(9), 'export_wish' => true, ]); Livewire::actingAs(admin(), 'operator')->test(AdminInstances::class) ->assertSee(__('admin.export_wish.title')) ->assertSee('Exportkundin GmbH') ->assertSee($instance->service_ends_at->local()->isoFormat('LL')); }); it('fuehrt in der Konsole niemanden auf, der keinen Export wollte', function () { // Ein Nein und ein unbeantwortetes Null sind beide keine Bestellung. Der // Abschnitt erscheint gar nicht erst — ein dauerhaft leerer Kasten wird // nach der zweiten Woche nicht mehr gelesen. Geprüft an der Überschrift // und nicht am Kundennamen: der steht ohnehin in der Instanzliste // darunter, und eine Zusicherung darauf wäre aus dem falschen Grund rot. $customer = Customer::factory()->create(['name' => 'Neinkundin GmbH']); Instance::factory()->create([ 'customer_id' => $customer->id, 'status' => 'cancellation_scheduled', 'subdomain' => 'neinkundin', 'service_ends_at' => now()->addDays(9), 'export_wish' => false, ]); Instance::factory()->create([ 'status' => 'cancellation_scheduled', 'subdomain' => 'niegefragt', 'service_ends_at' => now()->addDays(9), ]); Livewire::actingAs(admin(), 'operator')->test(AdminInstances::class) ->assertDontSee(__('admin.export_wish.title')); });