@@ -86,8 +86,8 @@ public function the_response_supports_triggering_multiple_events()
8686 Route::get (
8787 'test ' ,
8888 fn () => with (new HtmxResponse ())
89- ->addTrigger ('htmx:abort ' )
90- ->addTrigger ('htmx:load ' )
89+ ->addTrigger ('htmx:abort ' )
90+ ->addTrigger ('htmx:load ' )
9191 );
9292
9393 $ response = $ this ->get ('test ' );
@@ -96,6 +96,35 @@ public function the_response_supports_triggering_multiple_events()
9696 $ response ->assertHeader ('HX-Trigger ' , 'htmx:abort,htmx:load ' );
9797 }
9898
99+ /** @test */
100+ public function adding_the_same_trigger_to_the_response_multiple_times_will_return_the_event_only_once ()
101+ {
102+ Route::get (
103+ 'test ' ,
104+ fn () => with (new HtmxResponse ())
105+ ->addTrigger ('htmx:abort ' )
106+ ->addTrigger ('htmx:abort ' )
107+ );
108+
109+ $ response = $ this ->get ('test ' );
110+
111+ $ response ->assertOk ();
112+ $ response ->assertHeader ('HX-Trigger ' , 'htmx:abort ' );
113+ }
114+
115+ /** @test */
116+ public function the_hx_trigger_header_should_json_encode_complex_events ()
117+ {
118+ Route::get ('test ' , fn () => with (new HtmxResponse ())
119+ ->addTrigger ('htmx:load ' )
120+ ->addTrigger ('showMessage ' , 'Here Is A Message ' ));
121+
122+ $ response = $ this ->get ('test ' );
123+
124+ $ response ->assertOk ();
125+ $ response ->assertHeader ('HX-Trigger ' , '{"htmx:load":null,"showMessage":"Here Is A Message"} ' );
126+ }
127+
99128 /** @test */
100129 public function the_response_should_trigger_a_client_side_event_after_the_settling_step_by_setting_the_hx_trigger_after_settle_header ()
101130 {
@@ -108,7 +137,7 @@ public function the_response_should_trigger_a_client_side_event_after_the_settli
108137 }
109138
110139 /** @test */
111- public function the_response_supports_triggering_after_settle_multiple_events ()
140+ public function the_response_supports_triggering_after_settle_multiple_times ()
112141 {
113142 Route::get (
114143 'test ' ,
@@ -123,6 +152,35 @@ public function the_response_supports_triggering_after_settle_multiple_events()
123152 $ response ->assertHeader ('HX-Trigger-After-Settle ' , 'htmx:abort,htmx:load ' );
124153 }
125154
155+ /** @test */
156+ public function adding_the_same_trigger_after_settle_to_the_response_multiple_times_will_return_the_event_only_once ()
157+ {
158+ Route::get (
159+ 'test ' ,
160+ fn () => with (new HtmxResponse ())
161+ ->addTriggerAfterSettle ('htmx:abort ' )
162+ ->addTriggerAfterSettle ('htmx:abort ' )
163+ );
164+
165+ $ response = $ this ->get ('test ' );
166+
167+ $ response ->assertOk ();
168+ $ response ->assertHeader ('HX-Trigger-After-Settle ' , 'htmx:abort ' );
169+ }
170+
171+ /** @test */
172+ public function the_hx_trigger_after_settle_header_should_json_encode_complex_events ()
173+ {
174+ Route::get ('test ' , fn () => with (new HtmxResponse ())
175+ ->addTriggerAfterSettle ('htmx:load ' )
176+ ->addTriggerAfterSettle ('showMessage ' , 'Here Is A Message ' ));
177+
178+ $ response = $ this ->get ('test ' );
179+
180+ $ response ->assertOk ();
181+ $ response ->assertHeader ('HX-Trigger-After-Settle ' , '{"htmx:load":null,"showMessage":"Here Is A Message"} ' );
182+ }
183+
126184 /** @test */
127185 public function the_response_should_trigger_a_client_side_event_after_the_swap_step_by_setting_the_hx_trigger_after_swap_header ()
128186 {
@@ -135,7 +193,7 @@ public function the_response_should_trigger_a_client_side_event_after_the_swap_s
135193 }
136194
137195 /** @test */
138- public function the_response_supports_triggering_after_swap_multiple_multiple_events ()
196+ public function the_response_supports_triggering_after_swap_multiple_times ()
139197 {
140198 Route::get (
141199 'test ' ,
@@ -150,6 +208,35 @@ public function the_response_supports_triggering_after_swap_multiple_multiple_ev
150208 $ response ->assertHeader ('HX-Trigger-After-Swap ' , 'htmx:abort,htmx:load ' );
151209 }
152210
211+ /** @test */
212+ public function adding_the_same_trigger_after_swap_to_the_response_multiple_times_will_return_the_event_only_once ()
213+ {
214+ Route::get (
215+ 'test ' ,
216+ fn () => with (new HtmxResponse ())
217+ ->addTriggerAfterSwap ('htmx:abort ' )
218+ ->addTriggerAfterSwap ('htmx:abort ' )
219+ );
220+
221+ $ response = $ this ->get ('test ' );
222+
223+ $ response ->assertOk ();
224+ $ response ->assertHeader ('HX-Trigger-After-Swap ' , 'htmx:abort ' );
225+ }
226+
227+ /** @test */
228+ public function the_hx_trigger_after_swap_header_should_json_encode_complex_events ()
229+ {
230+ Route::get ('test ' , fn () => with (new HtmxResponse ())
231+ ->addTriggerAfterSwap ('htmx:load ' )
232+ ->addTriggerAfterSwap ('showMessage ' , 'Here Is A Message ' ));
233+
234+ $ response = $ this ->get ('test ' );
235+
236+ $ response ->assertOk ();
237+ $ response ->assertHeader ('HX-Trigger-After-Swap ' , '{"htmx:load":null,"showMessage":"Here Is A Message"} ' );
238+ }
239+
153240 /** @test */
154241 public function the_response_renders_a_single_fragment ()
155242 {
0 commit comments