actingAs(admin(), 'operator') ->get(route('admin.open-work')) ->assertOk() ->assertSee(__('open_work.title')); $html = $this->actingAs(admin(), 'operator')->get(route('admin.open-work'))->getContent(); foreach (OpenWork::all() as $item) { expect($html)->toContain(e($item['title'])); } }); it('nennt zu jedem Punkt wo, was fehlt und was passiert, wenn es so bleibt', function () { // Ohne den dritten Satz ist so eine Liste ein Wunschzettel: er entscheidet // die Reihenfolge, nicht das Gefühl. foreach (OpenWork::all() as $item) { foreach (['title', 'state', 'where', 'missing', 'risk'] as $field) { expect($item[$field] ?? '')->not->toBe('', "„{$item['title']}\" hat kein Feld {$field}."); } // Ein Zustand ohne Übersetzung wäre ein Kasten mit „open_work.state.x". expect(__('open_work.state.'.$item['state']))->not->toBe('open_work.state.'.$item['state']); } }); it('führt die zwei bezahlten Module, die nichts tun, als solche', function () { // Der Anlass für die ganze Seite. Verschwinden sie hier stillschweigend, // ist die Liste wertlos — sie kosten Geld, solange sie offen sind. $sold = collect(OpenWork::all())->where('state', OpenWork::SOLD)->pluck('title')->implode(' '); expect($sold)->toContain('Sicherungsort') ->and($sold)->toContain('Office'); }); it('steht jedem offen, der die Konsole öffnen darf', function () { // Kein eigenes Recht: wer hier arbeitet, soll wissen, worauf er sich // verlassen kann und worauf nicht. $entry = collect(Navigation::console()) ->flatMap(fn (array $g) => $g['items']) ->firstWhere(0, 'admin.open-work'); expect($entry)->not->toBeNull() ->and($entry[3])->toBeNull(); });