Package views now write <x-livewire-material::button>, so a configured prefix (which Blade spells <x-m::button>) and an application component of the same name can no longer break or shadow them. The showcase rewrites its examples to the configured prefix. Adds the README, and waits for the adaptive rail to hear a resize before the navigation tests press its menu button. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V9NnLxnPp8vaaurb3Z1MFy
56 lines
2.4 KiB
PHP
56 lines
2.4 KiB
PHP
<?php
|
|
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\Blade;
|
|
use Illuminate\Support\Facades\File;
|
|
use Illuminate\Support\ServiceProvider;
|
|
use NoNameWeb\LivewireMaterial\LivewireMaterialServiceProvider;
|
|
|
|
/**
|
|
* The anonymous component paths Blade holds for this package's components.
|
|
*
|
|
* @return Collection<int, array{path: string, prefix: ?string, prefixHash: string}>
|
|
*/
|
|
function packageComponentPaths(): Collection
|
|
{
|
|
$components = realpath(__DIR__.'/../../resources/views/components');
|
|
|
|
return collect(Blade::getAnonymousComponentPaths())
|
|
->filter(fn (array $entry): bool => realpath($entry['path']) === $components)
|
|
->values();
|
|
}
|
|
|
|
it('registers the components without a prefix', function () {
|
|
expect(packageComponentPaths())->toHaveCount(1)
|
|
->and(packageComponentPaths()->first()['prefix'])->toBeNull();
|
|
});
|
|
|
|
it('registers the components under a configured prefix', function () {
|
|
config(['livewire-material.prefix' => 'm']);
|
|
|
|
$provider = app()->getProvider(LivewireMaterialServiceProvider::class);
|
|
(fn () => $this->registerComponents())->call($provider);
|
|
|
|
expect(packageComponentPaths()->last()['prefix'])->toBe('m');
|
|
});
|
|
|
|
it('keeps blade-icons from registering an <x-icon> that would shadow ours', function () {
|
|
expect(Blade::getClassComponentAliases())->not->toHaveKey('icon');
|
|
});
|
|
|
|
it('publishes the error pages into the application\'s errors folder', function () {
|
|
expect(ServiceProvider::pathsToPublish(LivewireMaterialServiceProvider::class, 'livewire-material-errors'))->toBe([
|
|
LivewireMaterialServiceProvider::errorViewPath().'/errors' => resource_path('views/errors'),
|
|
]);
|
|
});
|
|
|
|
it('publishes the mail components where Laravel looks for them', function () {
|
|
expect(ServiceProvider::pathsToPublish(LivewireMaterialServiceProvider::class, 'livewire-material-mail'))->toBe([
|
|
LivewireMaterialServiceProvider::mailComponentPath().'/html' => resource_path('views/vendor/mail/html'),
|
|
LivewireMaterialServiceProvider::mailComponentPath().'/text' => resource_path('views/vendor/mail/text'),
|
|
])->and(config('mail.markdown.paths'))->toContain(resource_path('views/vendor/mail'));
|
|
|
|
expect(File::files(LivewireMaterialServiceProvider::mailComponentPath().'/html'))->not->toBeEmpty()
|
|
->and(File::files(LivewireMaterialServiceProvider::mailComponentPath().'/text'))->not->toBeEmpty();
|
|
});
|