Skip to content
This repository was archived by the owner on Oct 20, 2025. It is now read-only.

Commit a2fc7eb

Browse files
committed
Added additional tests
1 parent 8d53473 commit a2fc7eb

File tree

7 files changed

+133
-41
lines changed

7 files changed

+133
-41
lines changed

app/app/Http/Controllers/FormComponentsController.php

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,35 @@ public function simple()
2828

2929
public function checkboxes()
3030
{
31-
return view('form.components.checkboxes', ['countries' => Arr::only($this->countries(), ['NL', 'BE', 'DE', 'DK', 'AU', 'PT', 'IT'])]);
31+
return view('form.components.checkboxes', [
32+
'countries' => Arr::only($this->countries(), ['NL', 'BE', 'DE', 'DK', 'AU', 'PT', 'IT']),
33+
]);
34+
}
35+
36+
public function submitCheckboxes(Request $request)
37+
{
38+
$request->validate([
39+
'countries' => ['required', 'array', 'min:3'],
40+
'countries.*' => ['required', 'string', Rule::in(array_keys($this->countries()))],
41+
]);
42+
43+
return redirect()->route('navigation.one');
44+
}
45+
46+
public function radios()
47+
{
48+
return view('form.components.radios', [
49+
'countries' => Arr::only($this->countries(), ['NL', 'BE', 'DE', 'DK', 'AU', 'PT', 'IT']),
50+
]);
51+
}
52+
53+
public function submitRadios(Request $request)
54+
{
55+
$request->validate([
56+
'country' => ['required', 'string', Rule::in(array_keys($this->countries()))],
57+
]);
58+
59+
return redirect()->route('navigation.one');
3260
}
3361

3462
public function defaultJson()

app/resources/views/form/components/checkboxes.blade.php

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,7 @@
66

77
<div class="max-w-md mx-auto px-4 flex space-x-12">
88
<x-splade-form class="space-y-4" :default="['countries' => ['BE', 'NL']]">
9-
<x-splade-checkboxes name="countries[]" :options="$countries" label="Select one or more countries" />
10-
<x-splade-submit />
11-
</x-splade-form>
12-
13-
<x-splade-form class="space-y-4" :default="['country' => 'NL']">
14-
<x-splade-radios name="country" :options="$countries" label="Select a country" />
9+
<x-splade-checkboxes name="countries" :options="$countries" label="Select one or more countries" />
1510
<x-splade-submit />
1611
</x-splade-form>
1712
</div>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
@extends('layout')
2+
3+
@section('content')
4+
5+
FormRadios
6+
7+
<div class="max-w-md mx-auto px-4 flex space-x-12">
8+
<x-splade-form class="space-y-4" :default="['country' => 'NL']">
9+
<x-splade-radios name="country" :options="$countries" label="Select a country" />
10+
<x-splade-submit />
11+
</x-splade-form>
12+
</div>
13+
14+
@endsection

app/routes/web.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@
8585

8686
Route::get('form/components/simple', [FormComponentsController::class, 'simple'])->name('form.components.simple');
8787
Route::get('form/components/checkboxes', [FormComponentsController::class, 'checkboxes'])->name('form.components.checkboxes');
88+
Route::post('form/components/checkboxes', [FormComponentsController::class, 'submitCheckboxes'])->name('form.components.submitCheckboxes');
89+
Route::get('form/components/radios', [FormComponentsController::class, 'radios'])->name('form.components.radios');
90+
Route::post('form/components/radios', [FormComponentsController::class, 'submitRadios'])->name('form.components.submitRadios');
8891
Route::get('form/components/libraries', [FormComponentsController::class, 'libraries'])->name('form.components.libraries');
8992
Route::get('form/components/libraryDefaults', [FormComponentsController::class, 'libraryDefaults'])->name('form.components.libraryDefaults');
9093
Route::get('form/components/libraryChange', [FormComponentsController::class, 'libraryChange'])->name('form.components.libraryChange');
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace Tests\Browser\Form;
4+
5+
use Laravel\Dusk\Browser;
6+
use Tests\DuskTestCase;
7+
8+
class ComponentsTest extends DuskTestCase
9+
{
10+
/** @test */
11+
public function it_can_render_multiple_checkboxes_with_an_options_array()
12+
{
13+
$this->browse(function (Browser $browser) {
14+
$browser->visit('form/components/checkboxes')
15+
->waitForText('FormCheckboxes')
16+
->assertChecked('countries[]', 'NL')
17+
->assertChecked('countries[]', 'BE')
18+
->assertNotChecked('countries[]', 'DE')
19+
->press('Submit')
20+
->waitForText('The countries must have at least 3 items.')
21+
->check('countries[]', 'DE')
22+
->press('Submit')
23+
->waitUntilMissing('FormCheckboxes')
24+
->assertRouteIs('navigation.one');
25+
});
26+
}
27+
28+
/** @test */
29+
public function it_can_render_multiple_radios_with_an_options_array()
30+
{
31+
$this->browse(function (Browser $browser) {
32+
$browser->visit('form/components/radios')
33+
->waitForText('FormRadios')
34+
->assertRadioSelected('country', 'NL')
35+
->press('Submit')
36+
->waitUntilMissing('FormCheckboxes')
37+
->assertRouteIs('navigation.one');
38+
});
39+
}
40+
}

app/tests/Browser/FormTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,4 +204,16 @@ public function it_renders_classes_on_the_form_element()
204204
->assertAttribute('fieldset', 'class', 'form-simple');
205205
});
206206
}
207+
208+
/** @test */
209+
public function it_can_submit_to_a_route_that_returns_a_view_instead_of_a_redirect()
210+
{
211+
$this->browse(function (Browser $browser) {
212+
$browser->visit('/form/view')
213+
->waitForText('FormView')
214+
->press('Submit')
215+
->waitForText('NavigationOne')
216+
->assertPathIs('/form/view');
217+
});
218+
}
207219
}

package-lock.json

Lines changed: 34 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)