refreshApplication(); } afterEach(function () { rebootWithShowcase(true); }); it('mounts the showcase when enabled', function () { $this->withoutVite() ->get('/material') ->assertOk() ->assertSee('Livewire Material'); }); it('gives every section a page of its own, linked from the overview and the rail', function () { $overview = $this->withoutVite()->get('/material')->assertOk(); foreach (Sections::all() as $key => $section) { $overview->assertSee(route('livewire-material.section', $key), false); $this->withoutVite() ->get("/material/{$key}") ->assertOk() ->assertSee("{$section['title']} ยท Livewire Material", false) ->assertSee('id="'.$key.'"', false); } $this->get('/material/not-a-section')->assertNotFound(); }); it('does not mount the showcase when disabled', function () { rebootWithShowcase(false); $this->get('/material')->assertNotFound(); }); it('serves a symbol for the icon search', function () { $this->get('/material/symbols/filled/favorite.svg') ->assertOk() ->assertHeader('Content-Type', 'image/svg+xml') ->assertSee('viewBox="0 -960 960 960"', false); }); it('answers 404 for a symbol or style that does not exist', function () { $this->get('/material/symbols/outlined/not_a_symbol_at_all.svg')->assertNotFound(); $this->get('/material/symbols/sharp/favorite.svg')->assertNotFound(); }); it('lists the symbol names for the icon search', function () { $this->getJson('/material/symbols.json') ->assertOk() ->assertJsonFragment(['calendar_month']) ->assertJsonCount(count(SvgFile::symbolNames())); }); it('previews an error page through the exception handler', function () { $this->withoutVite() ->get('/material/errors/404') ->assertNotFound() ->assertSee('Page not found'); $this->get('/material/errors/418')->assertNotFound(); }); it('previews a sample mail in the package theme', function () { $this->get('/material/mail') ->assertOk() ->assertSee('class="button button-primary"', false) ->assertSee('border-radius: 9999px', false) ->assertSee('Unsubscribe'); }); it('shows every component somewhere in the showcase', function () { $showcase = collect(File::allFiles(__DIR__.'/../../resources/views/showcase')) ->map(fn (SplFileInfo $file): string => $file->getContents()) ->implode("\n"); $absent = collect(File::files(__DIR__.'/../../resources/views/components')) ->map(fn (SplFileInfo $file): string => $file->getBasename('.blade.php')) ->reject(fn (string $name): bool => preg_match('/(?:<|<)x-(?:livewire-material::)?'.preg_quote($name, '/').'(?:[\s\/>]|>)/', $showcase) === 1) ->values() ->all(); expect($absent)->toBe([]); });