Skip to content

Commit 31c78af

Browse files
Respect broadcast suppressions on before/after actions (#770)
* Respect broadcast suppressions in before/after actions * Correct typo in broadcast suppression test helper function * Call correct method when testing _render_later_to suppression * Pass name of explicit stream targets in broadcast suppression assertions Broadcast methods ending with `_to` accept a target stream name as positional arguments. Other methods target call `#to_gid_param` to choose a stream name. The prior tests assumed that only those default stream names would be used. As a result, tests on broadcasts with explicitly targeted streams were never caught by the assertions. (broadcast_remove_to 'foobar' targets 'foobar', so we would never find a broadcast on `@message.to_gid_param`) The false positives caused missing suppression checks in `broadcast_before_to` and `broadcast_after_to` to go unnoticed.
1 parent 16f7613 commit 31c78af

File tree

2 files changed

+30
-32
lines changed

2 files changed

+30
-32
lines changed

app/models/concerns/turbo/broadcastable.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ def broadcast_update(**rendering)
311311
def broadcast_before_to(*streamables, target: nil, targets: nil, **rendering)
312312
raise ArgumentError, "at least one of target or targets is required" unless target || targets
313313

314-
Turbo::StreamsChannel.broadcast_before_to(*streamables, **extract_options_and_add_target(rendering.merge(target: target, targets: targets)))
314+
Turbo::StreamsChannel.broadcast_before_to(*streamables, **extract_options_and_add_target(rendering.merge(target: target, targets: targets))) unless suppressed_turbo_broadcasts?
315315
end
316316

317317
# Insert a rendering of this broadcastable model after the target identified by it's dom id passed as <tt>target</tt>
@@ -329,7 +329,7 @@ def broadcast_before_to(*streamables, target: nil, targets: nil, **rendering)
329329
def broadcast_after_to(*streamables, target: nil, targets: nil, **rendering)
330330
raise ArgumentError, "at least one of target or targets is required" unless target || targets
331331

332-
Turbo::StreamsChannel.broadcast_after_to(*streamables, **extract_options_and_add_target(rendering.merge(target: target, targets: targets)))
332+
Turbo::StreamsChannel.broadcast_after_to(*streamables, **extract_options_and_add_target(rendering.merge(target: target, targets: targets))) unless suppressed_turbo_broadcasts?
333333
end
334334

335335
# Append a rendering of this broadcastable model to the target identified by it's dom id passed as <tt>target</tt>

test/streams/broadcastable_test.rb

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@ class Turbo::SuppressingBroadcastsTest < ActionCable::Channel::TestCase
525525
setup { @message = Message.new(id: 1, content: "Hello!") }
526526

527527
test "suppressing broadcasting remove to stream now" do
528-
assert_no_broadcasts_when_suppressing do
528+
assert_no_broadcasts_when_suppressing "stream" do
529529
@message.broadcast_remove_to "stream"
530530
end
531531
end
@@ -537,13 +537,13 @@ class Turbo::SuppressingBroadcastsTest < ActionCable::Channel::TestCase
537537
end
538538

539539
test "suppressing broadcasting replace to stream now" do
540-
assert_no_broadcasts_when_suppressing do
540+
assert_no_broadcasts_when_suppressing "stream" do
541541
@message.broadcast_replace_to "stream"
542542
end
543543
end
544544

545545
test "suppressing broadcasting replace to stream later" do
546-
assert_no_broadcasts_later_when_supressing do
546+
assert_no_broadcasts_later_when_suppressing "stream" do
547547
@message.broadcast_replace_later_to "stream"
548548
end
549549
end
@@ -555,19 +555,19 @@ class Turbo::SuppressingBroadcastsTest < ActionCable::Channel::TestCase
555555
end
556556

557557
test "suppressing broadcasting replace later" do
558-
assert_no_broadcasts_later_when_supressing do
558+
assert_no_broadcasts_later_when_suppressing do
559559
@message.broadcast_replace_later
560560
end
561561
end
562562

563563
test "suppressing broadcasting update to stream now" do
564-
assert_no_broadcasts_when_suppressing do
564+
assert_no_broadcasts_when_suppressing "stream" do
565565
@message.broadcast_update_to "stream"
566566
end
567567
end
568568

569569
test "suppressing broadcasting update to stream later" do
570-
assert_no_broadcasts_later_when_supressing do
570+
assert_no_broadcasts_later_when_suppressing "stream" do
571571
@message.broadcast_update_later_to "stream"
572572
end
573573
end
@@ -579,31 +579,31 @@ class Turbo::SuppressingBroadcastsTest < ActionCable::Channel::TestCase
579579
end
580580

581581
test "suppressing broadcasting update later" do
582-
assert_no_broadcasts_later_when_supressing do
582+
assert_no_broadcasts_later_when_suppressing do
583583
@message.broadcast_update_later
584584
end
585585
end
586586

587587
test "suppressing broadcasting before to stream now" do
588-
assert_no_broadcasts_when_suppressing do
588+
assert_no_broadcasts_when_suppressing "stream" do
589589
@message.broadcast_before_to "stream", target: "message_1"
590590
end
591591
end
592592

593593
test "suppressing broadcasting after to stream now" do
594-
assert_no_broadcasts_when_suppressing do
594+
assert_no_broadcasts_when_suppressing "stream" do
595595
@message.broadcast_after_to "stream", target: "message_1"
596596
end
597597
end
598598

599599
test "suppressing broadcasting append to stream now" do
600-
assert_no_broadcasts_when_suppressing do
600+
assert_no_broadcasts_when_suppressing "stream" do
601601
@message.broadcast_append_to "stream"
602602
end
603603
end
604604

605605
test "suppressing broadcasting append to stream later" do
606-
assert_no_broadcasts_later_when_supressing do
606+
assert_no_broadcasts_later_when_suppressing "stream" do
607607
@message.broadcast_append_later_to "stream"
608608
end
609609
end
@@ -615,31 +615,31 @@ class Turbo::SuppressingBroadcastsTest < ActionCable::Channel::TestCase
615615
end
616616

617617
test "suppressing broadcasting append later" do
618-
assert_no_broadcasts_later_when_supressing do
618+
assert_no_broadcasts_later_when_suppressing do
619619
@message.broadcast_append_later
620620
end
621621
end
622622

623623
test "suppressing broadcasting prepend to stream now" do
624-
assert_no_broadcasts_when_suppressing do
624+
assert_no_broadcasts_when_suppressing "stream" do
625625
@message.broadcast_prepend_to "stream"
626626
end
627627
end
628628

629629
test "suppressing broadcasting prepend to stream later" do
630-
assert_no_broadcasts_later_when_supressing do
630+
assert_no_broadcasts_later_when_suppressing "stream" do
631631
@message.broadcast_prepend_later_to "stream"
632632
end
633633
end
634634

635635
test "suppressing broadcasting refresh to stream now" do
636-
assert_no_broadcasts_when_suppressing do
636+
assert_no_broadcasts_when_suppressing "stream" do
637637
@message.broadcast_refresh_to "stream"
638638
end
639639
end
640640

641641
test "suppressing broadcasting refresh to stream later" do
642-
assert_no_broadcasts_later_when_supressing do
642+
assert_no_broadcasts_later_when_suppressing "stream" do
643643
@message.broadcast_refresh_later_to "stream"
644644
end
645645
end
@@ -651,19 +651,19 @@ class Turbo::SuppressingBroadcastsTest < ActionCable::Channel::TestCase
651651
end
652652

653653
test "suppressing broadcasting prepend later" do
654-
assert_no_broadcasts_later_when_supressing do
654+
assert_no_broadcasts_later_when_suppressing do
655655
@message.broadcast_prepend_later
656656
end
657657
end
658658

659659
test "suppressing broadcasting action to stream now" do
660-
assert_no_broadcasts_when_suppressing do
660+
assert_no_broadcasts_when_suppressing "stream" do
661661
@message.broadcast_action_to "stream", action: "prepend"
662662
end
663663
end
664664

665665
test "suppressing broadcasting action to stream later" do
666-
assert_no_broadcasts_later_when_supressing do
666+
assert_no_broadcasts_later_when_suppressing "stream" do
667667
@message.broadcast_action_later_to "stream", action: "prepend"
668668
end
669669
end
@@ -675,7 +675,7 @@ class Turbo::SuppressingBroadcastsTest < ActionCable::Channel::TestCase
675675
end
676676

677677
test "suppressing broadcasting action later" do
678-
assert_no_broadcasts_later_when_supressing do
678+
assert_no_broadcasts_later_when_suppressing do
679679
@message.broadcast_action_later action: "prepend"
680680
end
681681
end
@@ -687,36 +687,34 @@ class Turbo::SuppressingBroadcastsTest < ActionCable::Channel::TestCase
687687
end
688688

689689
test "suppressing broadcast render later" do
690-
assert_no_broadcasts_later_when_supressing do
690+
assert_no_broadcasts_later_when_suppressing do
691691
@message.broadcast_render_later
692692
end
693693
end
694694

695695
test "suppressing broadcast render to stream now" do
696-
@profile = Users::Profile.new(id: 1, name: "Ryan")
697696
assert_no_broadcasts_when_suppressing do
698-
@message.broadcast_render_to @profile
697+
@message.broadcast_render_to "stream"
699698
end
700699
end
701700

702701
test "suppressing broadcast render to stream later" do
703-
@profile = Users::Profile.new(id: 1, name: "Ryan")
704-
assert_no_broadcasts_later_when_supressing do
705-
@message.broadcast_render_to @profile
702+
assert_no_broadcasts_later_when_suppressing do
703+
@message.broadcast_render_later_to "stream"
706704
end
707705
end
708706

709707
private
710-
def assert_no_broadcasts_when_suppressing
711-
assert_no_broadcasts @message.to_gid_param do
708+
def assert_no_broadcasts_when_suppressing(stream = @message.to_gid_param)
709+
assert_no_broadcasts stream do
712710
Message.suppressing_turbo_broadcasts do
713711
yield
714712
end
715713
end
716714
end
717715

718-
def assert_no_broadcasts_later_when_supressing
719-
assert_no_broadcasts_when_suppressing do
716+
def assert_no_broadcasts_later_when_suppressing(stream = @message.to_gid_param)
717+
assert_no_broadcasts_when_suppressing stream do
720718
assert_no_enqueued_jobs do
721719
yield
722720
end

0 commit comments

Comments
 (0)