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([]);
});