/
BrowserTest.php
131 lines (114 loc) · 4.16 KB
/
BrowserTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
namespace Livewire\Features\SupportDataBinding;
use Tests\BrowserTestCase;
use Livewire\Livewire;
use Livewire\Component;
use Livewire\Attributes\Computed;
class BrowserTest extends BrowserTestCase
{
function test_can_use_wire_dirty()
{
Livewire::visit(new class extends Component {
public $prop = false;
public function render()
{
return <<<'BLADE'
<div>
<input dusk="checkbox" type="checkbox" wire:model="prop" value="true" />
<div wire:dirty>Unsaved changes...</div>
<div wire:dirty.remove>The data is in-sync...</div>
</div>
BLADE;
}
})
->assertSee('The data is in-sync...')
->check('@checkbox')
->assertDontSee('The data is in-sync')
->assertSee('Unsaved changes...')
->uncheck('@checkbox')
->assertSee('The data is in-sync...')
->assertDontSee('Unsaved changes...')
;
}
function test_can_update_bound_value_from_lifecyle_hook()
{
Livewire::visit(new class extends Component {
public $foo = null;
public $bar = null;
public function updatedFoo(): void
{
$this->bar = null;
}
public function render()
{
return <<<'BLADE'
<div>
<select wire:model.live="foo" dusk="fooSelect">
<option value=""></option>
<option value="one">One</option>
<option value="two">Two</option>
<option value="three">Three</option>
</select>
<select wire:model="bar" dusk="barSelect">
<option value=""></option>
<option value="one">One</option>
<option value="two">Two</option>
<option value="three">Three</option>
</select>
</div>
BLADE;
}
})
->select('@barSelect', 'one')
->waitForLivewire()->select('@fooSelect', 'one')
->assertSelected('@barSelect', '')
;
}
public function updates_dependent_select_options_correctly_when_wire_key_is_applied()
{
Livewire::visit(new class extends Component {
public $parent = 'foo';
public $child = 'bar';
protected $options = [
'foo' => [
'bar',
],
'baz' => [
'qux',
],
];
#[Computed]
public function parentOptions(): array
{
return array_keys($this->options);
}
#[Computed]
public function childOptions(): array
{
return $this->options[$this->parent];
}
public function render(): string
{
return <<<'blade'
<div>
<select wire:model.live="parent" dusk="parent">
@foreach($this->parentOptions as $value)
<option value="{{ $value }}">{{ $value }}</option>
@endforeach
</select>
<select wire:model="child" dusk="child" wire:key="{{ $parent }}">
<option value>Select</option>
@foreach($this->childOptions as $value)
<option value="{{ $value }}">{{ $value }}</option>
@endforeach
</select>
</div>
blade;
}
})
->waitForLivewire()->select('@parent', 'baz')
->assertSelected('@child', '')
->waitForLivewire()->select('@parent', 'foo')
->assertSelected('@child', 'bar');
}
}