-
-
Notifications
You must be signed in to change notification settings - Fork 152
Expand file tree
/
Copy pathLivewireModalTest.php
More file actions
93 lines (79 loc) · 3.83 KB
/
LivewireModalTest.php
File metadata and controls
93 lines (79 loc) · 3.83 KB
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
<?php
namespace LivewireUI\Modal\Tests;
use Livewire\Livewire;
use LivewireUI\Modal\Modal;
use LivewireUI\Modal\Tests\Components\DemoModal;
use LivewireUI\Modal\Tests\Components\InvalidModal;
class LivewireModalTest extends TestCase
{
public function testOpenModalEventListener(): void
{
// Demo modal component
Livewire::component('demo-modal', DemoModal::class);
// Event attributes
$component = 'demo-modal';
$arguments = ['user' => 1, 'number' => 42, 'message' => 'Hello World'];
$modalAttributes = ['hello' => 'world', 'closeOnEscape' => true, 'maxWidth' => '2xl', 'maxWidthClass' => 'sm:max-w-md md:max-w-xl lg:max-w-2xl', 'closeOnClickAway' => true, 'closeOnEscapeIsForceful' => true, 'dispatchCloseEvent' => false, 'destroyOnClose' => false];
// Demo modal unique identifier
$id = md5($component.serialize($arguments));
Livewire::test(Modal::class)
->dispatch('openModal', component: $component, arguments: $arguments, modalAttributes: $modalAttributes)
// Verify component is added to $components
->assertSet('components', [
$id => [
'name' => $component,
'arguments' => $arguments,
'attributes' => $arguments, // Deprecated
'modalAttributes' => $modalAttributes,
],
])
// Verify component is set to active
->assertSet('activeComponent', $id)
// Verify event is emitted to client
->assertDispatched('activeModalComponentChanged', id: $id)
// Verif if component attribute 'message' is visible
->assertSee(['Hello World', 1, '42']);
}
public function testDestroyComponentEventListener(): void
{
// Demo modal component
Livewire::component('demo-modal', DemoModal::class);
$component = 'demo-modal';
$arguments = ['message' => 'Foobar'];
$modalAttributes = ['hello' => 'world', 'closeOnEscape' => true, 'maxWidth' => '2xl', 'maxWidthClass' => 'sm:max-w-md md:max-w-xl lg:max-w-2xl', 'closeOnClickAway' => true, 'closeOnEscapeIsForceful' => true, 'dispatchCloseEvent' => false, 'destroyOnClose' => false];
// Demo modal unique identifier
$id = md5($component.serialize($arguments));
Livewire::test(Modal::class)
->dispatch('openModal', component: $component, arguments: $arguments, modalAttributes: $modalAttributes)
->assertSet('components', [
$id => [
'name' => $component,
'arguments' => $arguments,
'attributes' => $arguments, // Deprecated
'modalAttributes' => $modalAttributes,
],
])
->dispatch('destroyComponent', $id)
->assertSet('components', []);
}
public function testModalReset(): void
{
Livewire::component('demo-modal', DemoModal::class);
Livewire::test(Modal::class)
->dispatch('openModal', component: 'demo-modal', arguments: ['message' => 'Test'])
->assertNotSet('activeComponent', null)
->assertNotSet('components', [])
->call('resetState')
// Verify properties are reset
->assertSet('activeComponent', null)
->assertSet('components', []);
}
public function testIfExceptionIsThrownIfModalDoesNotImplementContract(): void
{
$component = InvalidModal::class;
$this->expectException(\Exception::class);
$this->expectExceptionMessage("[{$component}] does not implement [LivewireUI\Modal\Contracts\ModalComponent] interface.");
Livewire::component('invalid-modal', $component);
Livewire::test(Modal::class)->dispatch('openModal', component: 'invalid-modal');
}
}