From a15645ad88870c9511fd49e8314a74fb421c184c Mon Sep 17 00:00:00 2001 From: Benjamin Nussbaum Date: Wed, 14 Jan 2026 23:59:00 +0100 Subject: [PATCH] refactor: upgrade to Livewire 4 --- app/Providers/VoltServiceProvider.php | 28 ------ bootstrap/providers.php | 2 - composer.json | 3 +- composer.lock | 85 ++----------------- .../views/components/layouts/auth.blade.php | 3 - .../{components => }/layouts/app.blade.php | 4 +- .../layouts/app/header.blade.php | 0 resources/views/layouts/auth.blade.php | 3 + .../layouts/auth/card.blade.php | 0 .../layouts/auth/simple.blade.php | 0 .../layouts/auth/split.blade.php | 0 .../livewire/auth/confirm-password.blade.php | 4 +- .../livewire/auth/forgot-password.blade.php | 4 +- resources/views/livewire/auth/login.blade.php | 12 +-- .../views/livewire/auth/register.blade.php | 4 +- .../livewire/auth/reset-password.blade.php | 4 +- .../livewire/auth/verify-email.blade.php | 4 +- .../views/livewire/catalog/index.blade.php | 2 +- .../views/livewire/catalog/trmnl.blade.php | 2 +- resources/views/livewire/codemirror.blade.php | 6 +- .../views/livewire/device-dashboard.blade.php | 2 +- .../livewire/device-models/index.blade.php | 2 +- .../livewire/device-palettes/index.blade.php | 2 +- .../livewire/devices/configure.blade.php | 2 +- .../views/livewire/devices/logs.blade.php | 2 +- .../views/livewire/devices/manage.blade.php | 2 +- .../views/livewire/playlists/index.blade.php | 2 +- .../views/livewire/plugins/api.blade.php | 2 +- .../livewire/plugins/config-modal.blade.php | 2 +- .../plugins/image-webhook-instance.blade.php | 8 +- .../livewire/plugins/image-webhook.blade.php | 4 +- .../views/livewire/plugins/index.blade.php | 2 +- .../views/livewire/plugins/markup.blade.php | 2 +- .../views/livewire/plugins/recipe.blade.php | 2 +- .../plugins/recipes/settings.blade.php | 2 +- .../livewire/settings/appearance.blade.php | 2 +- .../settings/delete-user-form.blade.php | 2 +- .../livewire/settings/password.blade.php | 2 +- .../livewire/settings/preferences.blade.php | 2 +- .../views/livewire/settings/profile.blade.php | 2 +- .../views/livewire/settings/support.blade.php | 5 ++ resources/views/welcome.blade.php | 6 +- routes/auth.php | 13 ++- routes/web.php | 37 ++++---- tests/Feature/Auth/AuthenticationTest.php | 3 +- .../Feature/Auth/PasswordConfirmationTest.php | 5 +- tests/Feature/Auth/PasswordResetTest.php | 9 +- tests/Feature/Auth/RegistrationTest.php | 4 +- tests/Feature/Devices/ManageTest.php | 11 ++- tests/Feature/Livewire/Catalog/IndexTest.php | 13 ++- .../Livewire/Plugins/ConfigModalTest.php | 11 ++- .../Livewire/Plugins/RecipeSettingsTest.php | 11 ++- tests/Feature/Settings/PasswordUpdateTest.php | 5 +- tests/Feature/Settings/ProfileUpdateTest.php | 9 +- tests/Feature/Volt/CatalogTrmnlTest.php | 19 ++--- tests/Feature/Volt/DevicePalettesTest.php | 65 +++++++------- 56 files changed, 166 insertions(+), 278 deletions(-) delete mode 100644 app/Providers/VoltServiceProvider.php delete mode 100644 resources/views/components/layouts/auth.blade.php rename resources/views/{components => }/layouts/app.blade.php (51%) rename resources/views/{components => }/layouts/app/header.blade.php (100%) create mode 100644 resources/views/layouts/auth.blade.php rename resources/views/{components => }/layouts/auth/card.blade.php (100%) rename resources/views/{components => }/layouts/auth/simple.blade.php (100%) rename resources/views/{components => }/layouts/auth/split.blade.php (100%) diff --git a/app/Providers/VoltServiceProvider.php b/app/Providers/VoltServiceProvider.php deleted file mode 100644 index e61d984..0000000 --- a/app/Providers/VoltServiceProvider.php +++ /dev/null @@ -1,28 +0,0 @@ - - {{ $slot }} - diff --git a/resources/views/components/layouts/app.blade.php b/resources/views/layouts/app.blade.php similarity index 51% rename from resources/views/components/layouts/app.blade.php rename to resources/views/layouts/app.blade.php index ec0ebf7..e20d56b 100644 --- a/resources/views/components/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -1,5 +1,5 @@ - + {{ $slot }} - + diff --git a/resources/views/components/layouts/app/header.blade.php b/resources/views/layouts/app/header.blade.php similarity index 100% rename from resources/views/components/layouts/app/header.blade.php rename to resources/views/layouts/app/header.blade.php diff --git a/resources/views/layouts/auth.blade.php b/resources/views/layouts/auth.blade.php new file mode 100644 index 0000000..86a1249 --- /dev/null +++ b/resources/views/layouts/auth.blade.php @@ -0,0 +1,3 @@ + + {{ $slot }} + diff --git a/resources/views/components/layouts/auth/card.blade.php b/resources/views/layouts/auth/card.blade.php similarity index 100% rename from resources/views/components/layouts/auth/card.blade.php rename to resources/views/layouts/auth/card.blade.php diff --git a/resources/views/components/layouts/auth/simple.blade.php b/resources/views/layouts/auth/simple.blade.php similarity index 100% rename from resources/views/components/layouts/auth/simple.blade.php rename to resources/views/layouts/auth/simple.blade.php diff --git a/resources/views/components/layouts/auth/split.blade.php b/resources/views/layouts/auth/split.blade.php similarity index 100% rename from resources/views/components/layouts/auth/split.blade.php rename to resources/views/layouts/auth/split.blade.php diff --git a/resources/views/livewire/auth/confirm-password.blade.php b/resources/views/livewire/auth/confirm-password.blade.php index 62a86d8..faa24e5 100644 --- a/resources/views/livewire/auth/confirm-password.blade.php +++ b/resources/views/livewire/auth/confirm-password.blade.php @@ -3,9 +3,9 @@ use Illuminate\Support\Facades\Auth; use Illuminate\Validation\ValidationException; use Livewire\Attributes\Layout; -use Livewire\Volt\Component; +use Livewire\Component; -new #[Layout('components.layouts.auth')] class extends Component { +new #[Layout('layouts.auth')] class extends Component { public string $password = ''; /** diff --git a/resources/views/livewire/auth/forgot-password.blade.php b/resources/views/livewire/auth/forgot-password.blade.php index f31727b..158c3fc 100644 --- a/resources/views/livewire/auth/forgot-password.blade.php +++ b/resources/views/livewire/auth/forgot-password.blade.php @@ -2,9 +2,9 @@ use Illuminate\Support\Facades\Password; use Livewire\Attributes\Layout; -use Livewire\Volt\Component; +use Livewire\Component; -new #[Layout('components.layouts.auth')] class extends Component { +new #[Layout('layouts.auth')] class extends Component { public string $email = ''; /** diff --git a/resources/views/livewire/auth/login.blade.php b/resources/views/livewire/auth/login.blade.php index 6f8488a..645b866 100644 --- a/resources/views/livewire/auth/login.blade.php +++ b/resources/views/livewire/auth/login.blade.php @@ -8,9 +8,9 @@ use Illuminate\Support\Str; use Illuminate\Validation\ValidationException; use Livewire\Attributes\Layout; use Livewire\Attributes\Validate; -use Livewire\Volt\Component; +use Livewire\Component; -new #[Layout('components.layouts.auth')] class extends Component { +new #[Layout('layouts.auth')] class extends Component { #[Validate('required|string|email')] public string $email = ''; @@ -131,10 +131,10 @@ new #[Layout('components.layouts.auth')] class extends Component {
- {{ __('Continue with OIDC') }} diff --git a/resources/views/livewire/auth/register.blade.php b/resources/views/livewire/auth/register.blade.php index 59964a5..e98a4e1 100644 --- a/resources/views/livewire/auth/register.blade.php +++ b/resources/views/livewire/auth/register.blade.php @@ -6,9 +6,9 @@ use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Validation\Rules; use Livewire\Attributes\Layout; -use Livewire\Volt\Component; +use Livewire\Component; -new #[Layout('components.layouts.auth')] class extends Component { +new #[Layout('layouts.auth')] class extends Component { public string $name = ''; public string $email = ''; public string $password = ''; diff --git a/resources/views/livewire/auth/reset-password.blade.php b/resources/views/livewire/auth/reset-password.blade.php index d7d9605..a58fd31 100644 --- a/resources/views/livewire/auth/reset-password.blade.php +++ b/resources/views/livewire/auth/reset-password.blade.php @@ -8,9 +8,9 @@ use Illuminate\Support\Str; use Illuminate\Validation\Rules; use Livewire\Attributes\Layout; use Livewire\Attributes\Locked; -use Livewire\Volt\Component; +use Livewire\Component; -new #[Layout('components.layouts.auth')] class extends Component { +new #[Layout('layouts.auth')] class extends Component { #[Locked] public string $token = ''; public string $email = ''; diff --git a/resources/views/livewire/auth/verify-email.blade.php b/resources/views/livewire/auth/verify-email.blade.php index f1ad9e0..c05e3c4 100644 --- a/resources/views/livewire/auth/verify-email.blade.php +++ b/resources/views/livewire/auth/verify-email.blade.php @@ -4,9 +4,9 @@ use App\Livewire\Actions\Logout; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Session; use Livewire\Attributes\Layout; -use Livewire\Volt\Component; +use Livewire\Component; -new #[Layout('components.layouts.auth')] class extends Component { +new #[Layout('layouts.auth')] class extends Component { /** * Send an email verification notification to the user. */ diff --git a/resources/views/livewire/catalog/index.blade.php b/resources/views/livewire/catalog/index.blade.php index 29738ab..71de121 100644 --- a/resources/views/livewire/catalog/index.blade.php +++ b/resources/views/livewire/catalog/index.blade.php @@ -6,7 +6,7 @@ use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; use Livewire\Attributes\Lazy; -use Livewire\Volt\Component; +use Livewire\Component; use Symfony\Component\Yaml\Yaml; new diff --git a/resources/views/livewire/catalog/trmnl.blade.php b/resources/views/livewire/catalog/trmnl.blade.php index cc8b070..5ab5224 100644 --- a/resources/views/livewire/catalog/trmnl.blade.php +++ b/resources/views/livewire/catalog/trmnl.blade.php @@ -5,7 +5,7 @@ use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; use Livewire\Attributes\Lazy; -use Livewire\Volt\Component; +use Livewire\Component; new #[Lazy] diff --git a/resources/views/livewire/codemirror.blade.php b/resources/views/livewire/codemirror.blade.php index fad3e53..acd8e2b 100644 --- a/resources/views/livewire/codemirror.blade.php +++ b/resources/views/livewire/codemirror.blade.php @@ -1,6 +1,6 @@ -
Loading editor...
- +
diff --git a/resources/views/livewire/device-dashboard.blade.php b/resources/views/livewire/device-dashboard.blade.php index 7fd48a8..703920c 100644 --- a/resources/views/livewire/device-dashboard.blade.php +++ b/resources/views/livewire/device-dashboard.blade.php @@ -1,6 +1,6 @@ user()->plugins->contains($this->plugin), 403); abort_unless($this->plugin->plugin_type === 'image_webhook', 404); - + $this->name = $this->plugin->name; } @@ -272,11 +272,11 @@ new class extends Component { copyable /> POST an image (PNG or BMP) to this URL to update the displayed image. - + Images must be posted in a format that can directly be read by the device. You need to take care of image format, dithering, and bit-depth. Check device logs if the image is not shown. - + diff --git a/resources/views/livewire/plugins/image-webhook.blade.php b/resources/views/livewire/plugins/image-webhook.blade.php index 3161443..788cbdb 100644 --- a/resources/views/livewire/plugins/image-webhook.blade.php +++ b/resources/views/livewire/plugins/image-webhook.blade.php @@ -1,7 +1,7 @@ user() !== null, 403); - + $plugin = Plugin::where('id', $pluginId) ->where('user_id', auth()->id()) ->where('plugin_type', 'image_webhook') diff --git a/resources/views/livewire/plugins/index.blade.php b/resources/views/livewire/plugins/index.blade.php index d902183..26a7a41 100644 --- a/resources/views/livewire/plugins/index.blade.php +++ b/resources/views/livewire/plugins/index.blade.php @@ -2,7 +2,7 @@ use App\Console\Commands\ExampleRecipesSeederCommand; use App\Services\PluginImportService; -use Livewire\Volt\Component; +use Livewire\Component; use Livewire\WithFileUploads; use Illuminate\Support\Str; diff --git a/resources/views/livewire/plugins/markup.blade.php b/resources/views/livewire/plugins/markup.blade.php index cb7823e..e78f137 100644 --- a/resources/views/livewire/plugins/markup.blade.php +++ b/resources/views/livewire/plugins/markup.blade.php @@ -2,7 +2,7 @@ use App\Jobs\GenerateScreenJob; use Illuminate\Support\Collection; -use Livewire\Volt\Component; +use Livewire\Component; new class extends Component { diff --git a/resources/views/livewire/plugins/recipe.blade.php b/resources/views/livewire/plugins/recipe.blade.php index 0e29e76..6e13dfb 100644 --- a/resources/views/livewire/plugins/recipe.blade.php +++ b/resources/views/livewire/plugins/recipe.blade.php @@ -5,7 +5,7 @@ use App\Models\Plugin; use App\Models\DeviceModel; use Illuminate\Support\Carbon; use Keepsuit\Liquid\Exceptions\LiquidException; -use Livewire\Volt\Component; +use Livewire\Component; use Illuminate\Support\Facades\Blade; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Http; diff --git a/resources/views/livewire/plugins/recipes/settings.blade.php b/resources/views/livewire/plugins/recipes/settings.blade.php index 8ae3d6f..e87ad78 100644 --- a/resources/views/livewire/plugins/recipes/settings.blade.php +++ b/resources/views/livewire/plugins/recipes/settings.blade.php @@ -2,7 +2,7 @@ use App\Models\Plugin; use Illuminate\Validation\Rule; -use Livewire\Volt\Component; +use Livewire\Component; /* * This component contains the TRMNL Plugin Settings modal diff --git a/resources/views/livewire/settings/appearance.blade.php b/resources/views/livewire/settings/appearance.blade.php index d485f7d..af056b0 100644 --- a/resources/views/livewire/settings/appearance.blade.php +++ b/resources/views/livewire/settings/appearance.blade.php @@ -1,6 +1,6 @@ +
@include('partials.settings-heading') diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php index 96fa464..7b4cba9 100644 --- a/resources/views/welcome.blade.php +++ b/resources/views/welcome.blade.php @@ -1,4 +1,4 @@ - +
@@ -50,7 +50,7 @@ return null; }); $latestVersion = Arr::get($response, 'tag_name'); - + if ($latestVersion && version_compare($latestVersion, config('app.version'), '>')) { $newVersion = $latestVersion; } @@ -67,4 +67,4 @@ @endif @endif @endauth -
+ diff --git a/routes/auth.php b/routes/auth.php index 49b2173..4f493e2 100644 --- a/routes/auth.php +++ b/routes/auth.php @@ -3,21 +3,20 @@ use App\Http\Controllers\Auth\OidcController; use App\Http\Controllers\Auth\VerifyEmailController; use Illuminate\Support\Facades\Route; -use Livewire\Volt\Volt; Route::middleware('guest')->group(function () { - Volt::route('login', 'auth.login') + Route::livewire('login', 'auth.login') ->name('login'); if (config('app.registration.enabled')) { - Volt::route('register', 'auth.register') + Route::livewire('register', 'auth.register') ->name('register'); } - Volt::route('forgot-password', 'auth.forgot-password') + Route::livewire('forgot-password', 'auth.forgot-password') ->name('password.request'); - Volt::route('reset-password/{token}', 'auth.reset-password') + Route::livewire('reset-password/{token}', 'auth.reset-password') ->name('password.reset'); // OIDC authentication routes @@ -30,14 +29,14 @@ Route::middleware('guest')->group(function () { }); Route::middleware('auth')->group(function () { - Volt::route('verify-email', 'auth.verify-email') + Route::livewire('verify-email', 'auth.verify-email') ->name('verification.notice'); Route::get('verify-email/{id}/{hash}', VerifyEmailController::class) ->middleware(['signed', 'throttle:6,1']) ->name('verification.verify'); - Volt::route('confirm-password', 'auth.confirm-password') + Route::livewire('confirm-password', 'auth.confirm-password') ->name('password.confirm'); }); diff --git a/routes/web.php b/routes/web.php index b3069bd..d7007e4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -3,7 +3,6 @@ use App\Models\Plugin; use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; -use Livewire\Volt\Volt; Route::get('/', function () { return view('welcome'); @@ -11,29 +10,29 @@ Route::get('/', function () { Route::middleware(['auth'])->group(function () { Route::redirect('settings', 'settings/preferences'); - Volt::route('settings/preferences', 'settings.preferences')->name('settings.preferences'); - Volt::route('settings/profile', 'settings.profile')->name('settings.profile'); - Volt::route('settings/password', 'settings.password')->name('settings.password'); - Volt::route('settings/appearance', 'settings.appearance')->name('settings.appearance'); - Volt::route('settings/support', 'settings.support')->name('settings.support'); + Route::livewire('settings/preferences', 'settings.preferences')->name('settings.preferences'); + Route::livewire('settings/profile', 'settings.profile')->name('settings.profile'); + Route::livewire('settings/password', 'settings.password')->name('settings.password'); + Route::livewire('settings/appearance', 'settings.appearance')->name('settings.appearance'); + Route::livewire('settings/support', 'settings.support')->name('settings.support'); - Volt::route('/dashboard', 'device-dashboard')->name('dashboard'); + Route::livewire('/dashboard', 'device-dashboard')->name('dashboard'); - Volt::route('/devices', 'devices.manage')->name('devices'); - Volt::route('/devices/{device}/configure', 'devices.configure')->name('devices.configure'); - Volt::route('/devices/{device}/logs', 'devices.logs')->name('devices.logs'); + Route::livewire('/devices', 'devices.manage')->name('devices'); + Route::livewire('/devices/{device}/configure', 'devices.configure')->name('devices.configure'); + Route::livewire('/devices/{device}/logs', 'devices.logs')->name('devices.logs'); - Volt::route('/device-models', 'device-models.index')->name('device-models.index'); - Volt::route('/device-palettes', 'device-palettes.index')->name('device-palettes.index'); + Route::livewire('/device-models', 'device-models.index')->name('device-models.index'); + Route::livewire('/device-palettes', 'device-palettes.index')->name('device-palettes.index'); - Volt::route('plugins', 'plugins.index')->name('plugins.index'); + Route::livewire('plugins', 'plugins.index')->name('plugins.index'); - Volt::route('plugins/recipe/{plugin}', 'plugins.recipe')->name('plugins.recipe'); - Volt::route('plugins/markup', 'plugins.markup')->name('plugins.markup'); - Volt::route('plugins/api', 'plugins.api')->name('plugins.api'); - Volt::route('plugins/image-webhook', 'plugins.image-webhook')->name('plugins.image-webhook'); - Volt::route('plugins/image-webhook/{plugin}', 'plugins.image-webhook-instance')->name('plugins.image-webhook-instance'); - Volt::route('playlists', 'playlists.index')->name('playlists.index'); + Route::livewire('plugins/recipe/{plugin}', 'plugins.recipe')->name('plugins.recipe'); + Route::livewire('plugins/markup', 'plugins.markup')->name('plugins.markup'); + Route::livewire('plugins/api', 'plugins.api')->name('plugins.api'); + Route::livewire('plugins/image-webhook', 'plugins.image-webhook')->name('plugins.image-webhook'); + Route::livewire('plugins/image-webhook/{plugin}', 'plugins.image-webhook-instance')->name('plugins.image-webhook-instance'); + Route::livewire('playlists', 'playlists.index')->name('playlists.index'); Route::get('plugin_settings/{trmnlp_id}/edit', function (Request $request, string $trmnlp_id) { $plugin = Plugin::query() diff --git a/tests/Feature/Auth/AuthenticationTest.php b/tests/Feature/Auth/AuthenticationTest.php index 07c1683..68c9648 100644 --- a/tests/Feature/Auth/AuthenticationTest.php +++ b/tests/Feature/Auth/AuthenticationTest.php @@ -1,7 +1,6 @@ create(); - $response = LivewireVolt::test('auth.login') + $response = Livewire::test('auth.login') ->set('email', $user->email) ->set('password', 'password') ->call('login'); diff --git a/tests/Feature/Auth/PasswordConfirmationTest.php b/tests/Feature/Auth/PasswordConfirmationTest.php index 265963a..6896206 100644 --- a/tests/Feature/Auth/PasswordConfirmationTest.php +++ b/tests/Feature/Auth/PasswordConfirmationTest.php @@ -1,7 +1,6 @@ actingAs($user); - $response = Volt::test('auth.confirm-password') + $response = Livewire::test('auth.confirm-password') ->set('password', 'password') ->call('confirmPassword'); @@ -32,7 +31,7 @@ test('password is not confirmed with invalid password', function (): void { $this->actingAs($user); - $response = Volt::test('auth.confirm-password') + $response = Livewire::test('auth.confirm-password') ->set('password', 'wrong-password') ->call('confirmPassword'); diff --git a/tests/Feature/Auth/PasswordResetTest.php b/tests/Feature/Auth/PasswordResetTest.php index 2f38263..b53f103 100644 --- a/tests/Feature/Auth/PasswordResetTest.php +++ b/tests/Feature/Auth/PasswordResetTest.php @@ -3,7 +3,6 @@ use App\Models\User; use Illuminate\Auth\Notifications\ResetPassword; use Illuminate\Support\Facades\Notification; -use Livewire\Volt\Volt; uses(Illuminate\Foundation\Testing\RefreshDatabase::class); @@ -18,7 +17,7 @@ test('reset password link can be requested', function (): void { $user = User::factory()->create(); - Volt::test('auth.forgot-password') + Livewire::test('auth.forgot-password') ->set('email', $user->email) ->call('sendPasswordResetLink'); @@ -30,7 +29,7 @@ test('reset password screen can be rendered', function (): void { $user = User::factory()->create(); - Volt::test('auth.forgot-password') + Livewire::test('auth.forgot-password') ->set('email', $user->email) ->call('sendPasswordResetLink'); @@ -48,12 +47,12 @@ test('password can be reset with valid token', function (): void { $user = User::factory()->create(); - Volt::test('auth.forgot-password') + Livewire::test('auth.forgot-password') ->set('email', $user->email) ->call('sendPasswordResetLink'); Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user): true { - $response = Volt::test('auth.reset-password', ['token' => $notification->token]) + $response = Livewire::test('auth.reset-password', ['token' => $notification->token]) ->set('email', $user->email) ->set('password', 'password') ->set('password_confirmation', 'password') diff --git a/tests/Feature/Auth/RegistrationTest.php b/tests/Feature/Auth/RegistrationTest.php index 45bc39b..2f931be 100644 --- a/tests/Feature/Auth/RegistrationTest.php +++ b/tests/Feature/Auth/RegistrationTest.php @@ -1,7 +1,5 @@ set('name', 'Test User') ->set('email', 'test@example.com') ->set('password', 'password') diff --git a/tests/Feature/Devices/ManageTest.php b/tests/Feature/Devices/ManageTest.php index fbfd2f2..0e9e594 100644 --- a/tests/Feature/Devices/ManageTest.php +++ b/tests/Feature/Devices/ManageTest.php @@ -2,7 +2,6 @@ use App\Models\Device; use App\Models\User; -use Livewire\Volt\Volt; uses(Illuminate\Foundation\Testing\RefreshDatabase::class); @@ -27,7 +26,7 @@ test('user can create a new device', function (): void { 'friendly_id' => 'test-device-1', ]; - $response = Volt::test('devices.manage') + $response = Livewire::test('devices.manage') ->set('name', $deviceData['name']) ->set('mac_address', $deviceData['mac_address']) ->set('api_key', $deviceData['api_key']) @@ -52,7 +51,7 @@ test('device creation requires required fields', function (): void { $user = User::factory()->create(); $this->actingAs($user); - $response = Volt::test('devices.manage') + $response = Livewire::test('devices.manage') ->set('name', '') ->set('mac_address', '') ->set('api_key', '') @@ -75,14 +74,14 @@ test('user can toggle proxy cloud for their device', function (): void { 'proxy_cloud' => false, ]); - $response = Volt::test('devices.manage') + $response = Livewire::test('devices.manage') ->call('toggleProxyCloud', $device); $response->assertHasNoErrors(); expect($device->fresh()->proxy_cloud)->toBeTrue(); // Toggle back to false - $response = Volt::test('devices.manage') + $response = Livewire::test('devices.manage') ->call('toggleProxyCloud', $device); expect($device->fresh()->proxy_cloud)->toBeFalse(); @@ -98,7 +97,7 @@ test('user cannot toggle proxy cloud for other users devices', function (): void 'proxy_cloud' => false, ]); - $response = Volt::test('devices.manage') + $response = Livewire::test('devices.manage') ->call('toggleProxyCloud', $device); $response->assertStatus(403); diff --git a/tests/Feature/Livewire/Catalog/IndexTest.php b/tests/Feature/Livewire/Catalog/IndexTest.php index 1b2efba..0551ccc 100644 --- a/tests/Feature/Livewire/Catalog/IndexTest.php +++ b/tests/Feature/Livewire/Catalog/IndexTest.php @@ -4,7 +4,6 @@ use App\Models\User; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Http; use Livewire\Livewire; -use Livewire\Volt\Volt; use Symfony\Component\Yaml\Yaml; beforeEach(function (): void { @@ -19,7 +18,7 @@ it('can render catalog component', function (): void { Livewire::withoutLazyLoading(); - $component = Volt::test('catalog.index'); + $component = Livewire::test('catalog.index'); $component->assertSee('No plugins available'); }); @@ -59,7 +58,7 @@ it('loads plugins from catalog URL', function (): void { Livewire::withoutLazyLoading(); - $component = Volt::test('catalog.index'); + $component = Livewire::test('catalog.index'); $component->assertSee('Test Plugin'); $component->assertSee('testuser'); @@ -102,7 +101,7 @@ it('hides preview button when screenshot_url is missing', function (): void { Livewire::withoutLazyLoading(); - Volt::test('catalog.index') + Livewire::test('catalog.index') ->assertSee('Test Plugin Without Screenshot') ->assertDontSeeHtml('variant="subtle" icon="eye"'); }); @@ -114,7 +113,7 @@ it('shows error when plugin not found', function (): void { Livewire::withoutLazyLoading(); - $component = Volt::test('catalog.index'); + $component = Livewire::test('catalog.index'); $component->call('installPlugin', 'non-existent-plugin'); @@ -146,7 +145,7 @@ it('shows error when zip_url is missing', function (): void { Livewire::withoutLazyLoading(); - $component = Volt::test('catalog.index'); + $component = Livewire::test('catalog.index'); $component->call('installPlugin', 'test-plugin'); @@ -189,7 +188,7 @@ it('can preview a plugin', function (): void { Livewire::withoutLazyLoading(); - Volt::test('catalog.index') + Livewire::test('catalog.index') ->assertSee('Test Plugin') ->call('previewPlugin', 'test-plugin') ->assertSet('previewingPlugin', 'test-plugin') diff --git a/tests/Feature/Livewire/Plugins/ConfigModalTest.php b/tests/Feature/Livewire/Plugins/ConfigModalTest.php index 4372991..0807d8e 100644 --- a/tests/Feature/Livewire/Plugins/ConfigModalTest.php +++ b/tests/Feature/Livewire/Plugins/ConfigModalTest.php @@ -3,7 +3,6 @@ use App\Models\Plugin; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; -use Livewire\Volt\Volt; use Illuminate\Support\Str; uses(RefreshDatabase::class); @@ -28,7 +27,7 @@ test('config modal correctly loads multi_string defaults into UI boxes', functio 'configuration' => ['tags' => 'alpha,beta'] ]); - Volt::test('plugins.config-modal', ['plugin' => $plugin]) + Livewire::test('plugins.config-modal', ['plugin' => $plugin]) ->assertSet('multiValues.tags', ['alpha', 'beta']); }); @@ -50,7 +49,7 @@ test('config modal validates against commas in multi_string boxes', function (): ] ]); - Volt::test('plugins.config-modal', ['plugin' => $plugin]) + Livewire::test('plugins.config-modal', ['plugin' => $plugin]) ->set('multiValues.tags.0', 'no,commas,allowed') ->call('saveConfiguration') ->assertHasErrors(['multiValues.tags.0' => 'regex']); @@ -78,7 +77,7 @@ test('config modal merges multi_string boxes into a single CSV string on save', 'configuration' => [] ]); - Volt::test('plugins.config-modal', ['plugin' => $plugin]) + Livewire::test('plugins.config-modal', ['plugin' => $plugin]) ->set('multiValues.items.0', 'First') ->call('addMultiItem', 'items') ->set('multiValues.items.1', 'Second') @@ -100,7 +99,7 @@ test('config modal resetForm clears dirty state and increments resetIndex', func 'configuration' => ['simple_key' => 'original_value'] ]); - Volt::test('plugins.config-modal', ['plugin' => $plugin]) + Livewire::test('plugins.config-modal', ['plugin' => $plugin]) ->set('configuration.simple_key', 'dirty_value') ->call('resetForm') ->assertSet('configuration.simple_key', 'original_value') @@ -118,7 +117,7 @@ test('config modal dispatches update event for parent warning refresh', function 'data_strategy' => 'static' ]); - Volt::test('plugins.config-modal', ['plugin' => $plugin]) + Livewire::test('plugins.config-modal', ['plugin' => $plugin]) ->call('saveConfiguration') ->assertDispatched('config-updated'); }); diff --git a/tests/Feature/Livewire/Plugins/RecipeSettingsTest.php b/tests/Feature/Livewire/Plugins/RecipeSettingsTest.php index a04815f..c625262 100644 --- a/tests/Feature/Livewire/Plugins/RecipeSettingsTest.php +++ b/tests/Feature/Livewire/Plugins/RecipeSettingsTest.php @@ -6,7 +6,6 @@ use App\Models\Plugin; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Str; -use Livewire\Volt\Volt; uses(RefreshDatabase::class); @@ -21,7 +20,7 @@ test('recipe settings can save trmnlp_id', function (): void { $trmnlpId = (string) Str::uuid(); - Volt::test('plugins.recipes.settings', ['plugin' => $plugin]) + Livewire::test('plugins.recipes.settings', ['plugin' => $plugin]) ->set('trmnlp_id', $trmnlpId) ->call('saveTrmnlpId') ->assertHasNoErrors(); @@ -43,7 +42,7 @@ test('recipe settings validates trmnlp_id is unique per user', function (): void 'trmnlp_id' => null, ]); - Volt::test('plugins.recipes.settings', ['plugin' => $newPlugin]) + Livewire::test('plugins.recipes.settings', ['plugin' => $newPlugin]) ->set('trmnlp_id', 'existing-id-123') ->call('saveTrmnlpId') ->assertHasErrors(['trmnlp_id' => 'unique']); @@ -67,7 +66,7 @@ test('recipe settings allows same trmnlp_id for different users', function (): v $this->actingAs($user2); - Volt::test('plugins.recipes.settings', ['plugin' => $plugin2]) + Livewire::test('plugins.recipes.settings', ['plugin' => $plugin2]) ->set('trmnlp_id', 'shared-id-123') ->call('saveTrmnlpId') ->assertHasNoErrors(); @@ -86,7 +85,7 @@ test('recipe settings allows same trmnlp_id for the same plugin', function (): v 'trmnlp_id' => $trmnlpId, ]); - Volt::test('plugins.recipes.settings', ['plugin' => $plugin]) + Livewire::test('plugins.recipes.settings', ['plugin' => $plugin]) ->set('trmnlp_id', $trmnlpId) ->call('saveTrmnlpId') ->assertHasNoErrors(); @@ -103,7 +102,7 @@ test('recipe settings can clear trmnlp_id', function (): void { 'trmnlp_id' => 'some-id', ]); - Volt::test('plugins.recipes.settings', ['plugin' => $plugin]) + Livewire::test('plugins.recipes.settings', ['plugin' => $plugin]) ->set('trmnlp_id', '') ->call('saveTrmnlpId') ->assertHasNoErrors(); diff --git a/tests/Feature/Settings/PasswordUpdateTest.php b/tests/Feature/Settings/PasswordUpdateTest.php index 0e33955..0c40594 100644 --- a/tests/Feature/Settings/PasswordUpdateTest.php +++ b/tests/Feature/Settings/PasswordUpdateTest.php @@ -2,7 +2,6 @@ use App\Models\User; use Illuminate\Support\Facades\Hash; -use Livewire\Volt\Volt; uses(Illuminate\Foundation\Testing\RefreshDatabase::class); @@ -13,7 +12,7 @@ test('password can be updated', function (): void { $this->actingAs($user); - $response = Volt::test('settings.password') + $response = Livewire::test('settings.password') ->set('current_password', 'password') ->set('password', 'new-password') ->set('password_confirmation', 'new-password') @@ -31,7 +30,7 @@ test('correct password must be provided to update password', function (): void { $this->actingAs($user); - $response = Volt::test('settings.password') + $response = Livewire::test('settings.password') ->set('current_password', 'wrong-password') ->set('password', 'new-password') ->set('password_confirmation', 'new-password') diff --git a/tests/Feature/Settings/ProfileUpdateTest.php b/tests/Feature/Settings/ProfileUpdateTest.php index cbf424c..8bb21af 100644 --- a/tests/Feature/Settings/ProfileUpdateTest.php +++ b/tests/Feature/Settings/ProfileUpdateTest.php @@ -1,7 +1,6 @@ actingAs($user); - $response = Volt::test('settings.profile') + $response = Livewire::test('settings.profile') ->set('name', 'Test User') ->set('email', 'test@example.com') ->call('updateProfileInformation'); @@ -35,7 +34,7 @@ test('email verification status is unchanged when email address is unchanged', f $this->actingAs($user); - $response = Volt::test('settings.profile') + $response = Livewire::test('settings.profile') ->set('name', 'Test User') ->set('email', $user->email) ->call('updateProfileInformation'); @@ -50,7 +49,7 @@ test('user can delete their account', function (): void { $this->actingAs($user); - $response = Volt::test('settings.delete-user-form') + $response = Livewire::test('settings.delete-user-form') ->set('password', 'password') ->call('deleteUser'); @@ -67,7 +66,7 @@ test('correct password must be provided to delete account', function (): void { $this->actingAs($user); - $response = Volt::test('settings.delete-user-form') + $response = Livewire::test('settings.delete-user-form') ->set('password', 'wrong-password') ->call('deleteUser'); diff --git a/tests/Feature/Volt/CatalogTrmnlTest.php b/tests/Feature/Volt/CatalogTrmnlTest.php index a80c63a..536f6ad 100644 --- a/tests/Feature/Volt/CatalogTrmnlTest.php +++ b/tests/Feature/Volt/CatalogTrmnlTest.php @@ -5,7 +5,6 @@ declare(strict_types=1); use App\Models\User; use Illuminate\Support\Facades\Http; use Livewire\Livewire; -use Livewire\Volt\Volt; it('loads newest TRMNL recipes on mount', function (): void { Http::fake([ @@ -25,7 +24,7 @@ it('loads newest TRMNL recipes on mount', function (): void { Livewire::withoutLazyLoading(); - Volt::test('catalog.trmnl') + Livewire::test('catalog.trmnl') ->assertSee('Weather Chum') ->assertSee('Install') ->assertDontSeeHtml('variant="subtle" icon="eye"') @@ -50,7 +49,7 @@ it('shows preview button when screenshot_url is provided', function (): void { Livewire::withoutLazyLoading(); - Volt::test('catalog.trmnl') + Livewire::test('catalog.trmnl') ->assertSee('Weather Chum') ->assertSee('Preview'); }); @@ -88,7 +87,7 @@ it('searches TRMNL recipes when search term is provided', function (): void { Livewire::withoutLazyLoading(); - Volt::test('catalog.trmnl') + Livewire::test('catalog.trmnl') ->assertSee('Initial Recipe') ->set('search', 'weather') ->assertSee('Weather Search Result') @@ -118,7 +117,7 @@ it('installs plugin successfully when user is authenticated', function (): void Livewire::withoutLazyLoading(); - Volt::test('catalog.trmnl') + Livewire::test('catalog.trmnl') ->assertSee('Weather Chum') ->call('installPlugin', '123') ->assertSee('Error installing plugin'); // This will fail because we don't have a real zip file @@ -142,7 +141,7 @@ it('shows error when user is not authenticated', function (): void { Livewire::withoutLazyLoading(); - Volt::test('catalog.trmnl') + Livewire::test('catalog.trmnl') ->assertSee('Weather Chum') ->call('installPlugin', '123') ->assertStatus(403); // This will return 403 because user is not authenticated @@ -171,7 +170,7 @@ it('shows error when plugin installation fails', function (): void { Livewire::withoutLazyLoading(); - Volt::test('catalog.trmnl') + Livewire::test('catalog.trmnl') ->assertSee('Weather Chum') ->call('installPlugin', '123') ->assertSee('Error installing plugin'); // This will fail because the zip content is invalid @@ -205,7 +204,7 @@ it('previews a recipe with async fetch', function (): void { Livewire::withoutLazyLoading(); - Volt::test('catalog.trmnl') + Livewire::test('catalog.trmnl') ->assertSee('Weather Chum') ->call('previewRecipe', '123') ->assertSet('previewingRecipe', '123') @@ -247,7 +246,7 @@ it('supports pagination and loading more recipes', function (): void { Livewire::withoutLazyLoading(); - Volt::test('catalog.trmnl') + Livewire::test('catalog.trmnl') ->assertSee('Recipe Page 1') ->assertDontSee('Recipe Page 2') ->assertSee('Load next page') @@ -276,7 +275,7 @@ it('resets pagination when search term changes', function (): void { Livewire::withoutLazyLoading(); - Volt::test('catalog.trmnl') + Livewire::test('catalog.trmnl') ->assertSee('Initial 1') ->call('loadMore') ->set('search', 'weather') diff --git a/tests/Feature/Volt/DevicePalettesTest.php b/tests/Feature/Volt/DevicePalettesTest.php index 376a4a6..f94708e 100644 --- a/tests/Feature/Volt/DevicePalettesTest.php +++ b/tests/Feature/Volt/DevicePalettesTest.php @@ -4,7 +4,6 @@ declare(strict_types=1); use App\Models\DevicePalette; use App\Models\User; -use Livewire\Volt\Volt; uses(Illuminate\Foundation\Testing\RefreshDatabase::class); @@ -25,7 +24,7 @@ test('component loads all device palettes on mount', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index'); + $component = Livewire::test('device-palettes.index'); $palettes = $component->get('devicePalettes'); expect($palettes)->toHaveCount($initialCount + 3); @@ -36,7 +35,7 @@ test('can open modal to create new device palette', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->call('openDevicePaletteModal'); $component @@ -51,7 +50,7 @@ test('can create a new device palette', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('name', 'test-palette') ->set('description', 'Test Palette Description') ->set('grays', 16) @@ -76,7 +75,7 @@ test('can create a grayscale-only palette without colors', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('name', 'grayscale-palette') ->set('grays', 256) ->set('colors', []) @@ -102,7 +101,7 @@ test('can open modal to edit existing device palette', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->call('openDevicePaletteModal', $palette->id); $component @@ -125,7 +124,7 @@ test('can update an existing device palette', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->call('openDevicePaletteModal', $palette->id) ->set('name', 'updated-palette') ->set('description', 'Updated Description') @@ -153,7 +152,7 @@ test('can delete a device palette', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->call('deleteDevicePalette', $palette->id); expect(DevicePalette::find($palette->id))->toBeNull(); @@ -175,7 +174,7 @@ test('can duplicate a device palette', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->call('duplicateDevicePalette', $palette->id); $component @@ -192,7 +191,7 @@ test('can add a color to the colors array', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('colorInput', '#FF0000') ->call('addColor'); @@ -207,7 +206,7 @@ test('cannot add duplicate colors', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('colors', ['#FF0000']) ->set('colorInput', '#FF0000') ->call('addColor'); @@ -222,7 +221,7 @@ test('can add multiple colors', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('colorInput', '#FF0000') ->call('addColor') ->set('colorInput', '#00FF00') @@ -239,7 +238,7 @@ test('can remove a color from the colors array', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('colors', ['#FF0000', '#00FF00', '#0000FF']) ->call('removeColor', 1); @@ -251,7 +250,7 @@ test('removing color reindexes array', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('colors', ['#FF0000', '#00FF00', '#0000FF']) ->call('removeColor', 0); @@ -271,7 +270,7 @@ test('can open modal in view-only mode for api-sourced palette', function (): vo $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->call('openDevicePaletteModal', $palette->id, true); $component @@ -284,7 +283,7 @@ test('name is required when creating device palette', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('grays', 16) ->call('saveDevicePalette'); @@ -301,7 +300,7 @@ test('name must be unique when creating device palette', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('name', 'existing-name') ->set('grays', 16) ->call('saveDevicePalette'); @@ -320,7 +319,7 @@ test('name can be same when updating device palette', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->call('openDevicePaletteModal', $palette->id) ->set('grays', 16) ->call('saveDevicePalette'); @@ -333,7 +332,7 @@ test('grays is required when creating device palette', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('name', 'test-palette') ->set('grays', null) ->call('saveDevicePalette'); @@ -346,7 +345,7 @@ test('grays must be at least 1', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('name', 'test-palette') ->set('grays', 0) ->call('saveDevicePalette'); @@ -359,7 +358,7 @@ test('grays must be at most 256', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('name', 'test-palette') ->set('grays', 257) ->call('saveDevicePalette'); @@ -372,7 +371,7 @@ test('colors must be valid hex format', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('name', 'test-palette') ->set('grays', 16) ->set('colors', ['invalid-color', '#FF0000']) @@ -386,7 +385,7 @@ test('color input must be valid hex format when adding color', function (): void $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('colorInput', 'invalid-color') ->call('addColor'); @@ -398,7 +397,7 @@ test('color input accepts valid hex format', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('colorInput', '#FF0000') ->call('addColor'); @@ -410,7 +409,7 @@ test('color input accepts lowercase hex format', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('colorInput', '#ff0000') ->call('addColor'); @@ -422,7 +421,7 @@ test('description can be null', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('name', 'test-palette') ->set('grays', 16) ->set('description', null) @@ -439,7 +438,7 @@ test('framework class can be empty string', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('name', 'test-palette') ->set('grays', 16) ->set('framework_class', '') @@ -456,7 +455,7 @@ test('empty colors array is saved as null', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('name', 'test-palette') ->set('grays', 16) ->set('colors', []) @@ -473,7 +472,7 @@ test('component resets form after saving', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('name', 'test-palette') ->set('description', 'Test Description') ->set('grays', 16) @@ -503,7 +502,7 @@ test('component handles palette with null colors when editing', function (): voi $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->call('openDevicePaletteModal', $palette->id); $component->assertSet('colors', []); @@ -524,7 +523,7 @@ test('component handles palette with string colors when editing', function (): v $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->call('openDevicePaletteModal', $palette->id); $component->assertSet('colors', ['#FF0000', '#00FF00']); @@ -538,7 +537,7 @@ test('component refreshes palette list after creating', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->set('name', 'new-palette') ->set('grays', 16) ->call('saveDevicePalette'); @@ -566,7 +565,7 @@ test('component refreshes palette list after deleting', function (): void { $this->actingAs($user); - $component = Volt::test('device-palettes.index') + $component = Livewire::test('device-palettes.index') ->call('deleteDevicePalette', $palette1->id); $palettes = $component->get('devicePalettes');