@@ -593,6 +593,160 @@ async def produces_a_payload_per_subscription_event():
593
593
with raises (StopAsyncIteration ):
594
594
assert await anext (subscription )
595
595
596
+ @mark .asyncio
597
+ async def produces_a_payload_when_there_are_multiple_events ():
598
+ pubsub = EventEmitter ()
599
+ send_important_email , subscription = await create_subscription (pubsub )
600
+ payload = anext (subscription )
601
+
602
+ # A new email arrives!
603
+ assert (
604
+ send_important_email (
605
+ {
606
+ "from" : "yuzhi@graphql.org" ,
607
+ "subject" : "Alright" ,
608
+ "message" : "Tests are good" ,
609
+ "unread" : True ,
610
+ }
611
+ )
612
+ is True
613
+ )
614
+
615
+ assert await payload == (
616
+ {
617
+ "importantEmail" : {
618
+ "email" : {"from" : "yuzhi@graphql.org" , "subject" : "Alright" },
619
+ "inbox" : {"unread" : 1 , "total" : 2 },
620
+ }
621
+ },
622
+ None ,
623
+ )
624
+
625
+ payload = anext (subscription )
626
+
627
+ # A new email arrives!
628
+ assert (
629
+ send_important_email (
630
+ {
631
+ "from" : "yuzhi@graphql.org" ,
632
+ "subject" : "Alright 2" ,
633
+ "message" : "Tests are good 2" ,
634
+ "unread" : True ,
635
+ }
636
+ )
637
+ is True
638
+ )
639
+
640
+ assert await payload == (
641
+ {
642
+ "importantEmail" : {
643
+ "email" : {"from" : "yuzhi@graphql.org" , "subject" : "Alright 2" },
644
+ "inbox" : {"unread" : 2 , "total" : 3 },
645
+ }
646
+ },
647
+ None ,
648
+ )
649
+
650
+ @mark .asyncio
651
+ async def should_not_trigger_when_subscription_is_already_done ():
652
+ pubsub = EventEmitter ()
653
+ send_important_email , subscription = await create_subscription (pubsub )
654
+ payload = anext (subscription )
655
+
656
+ # A new email arrives!
657
+ assert (
658
+ send_important_email (
659
+ {
660
+ "from" : "yuzhi@graphql.org" ,
661
+ "subject" : "Alright" ,
662
+ "message" : "Tests are good" ,
663
+ "unread" : True ,
664
+ }
665
+ )
666
+ is True
667
+ )
668
+
669
+ assert await payload == (
670
+ {
671
+ "importantEmail" : {
672
+ "email" : {"from" : "yuzhi@graphql.org" , "subject" : "Alright" },
673
+ "inbox" : {"unread" : 1 , "total" : 2 },
674
+ }
675
+ },
676
+ None ,
677
+ )
678
+
679
+ payload = anext (subscription )
680
+ await subscription .aclose ()
681
+
682
+ # A new email arrives!
683
+ assert (
684
+ send_important_email (
685
+ {
686
+ "from" : "yuzhi@graphql.org" ,
687
+ "subject" : "Alright 2" ,
688
+ "message" : "Tests are good 2" ,
689
+ "unread" : True ,
690
+ }
691
+ )
692
+ is False
693
+ )
694
+
695
+ with raises (StopAsyncIteration ):
696
+ await payload
697
+
698
+ @mark .asyncio
699
+ async def should_not_trigger_when_subscription_is_thrown ():
700
+ pubsub = EventEmitter ()
701
+ send_important_email , subscription = await create_subscription (pubsub )
702
+ payload = anext (subscription )
703
+
704
+ # A new email arrives!
705
+ assert (
706
+ send_important_email (
707
+ {
708
+ "from" : "yuzhi@graphql.org" ,
709
+ "subject" : "Alright" ,
710
+ "message" : "Tests are good" ,
711
+ "unread" : True ,
712
+ }
713
+ )
714
+ is True
715
+ )
716
+
717
+ assert await payload == (
718
+ {
719
+ "importantEmail" : {
720
+ "email" : {"from" : "yuzhi@graphql.org" , "subject" : "Alright" },
721
+ "inbox" : {"unread" : 1 , "total" : 2 },
722
+ }
723
+ },
724
+ None ,
725
+ )
726
+
727
+ payload = anext (subscription )
728
+
729
+ # Throw error
730
+ with raises (RuntimeError ) as exc_info :
731
+ await subscription .athrow (RuntimeError ("ouch" ))
732
+ assert str (exc_info .value ) == "ouch"
733
+
734
+ # A new email arrives!
735
+ assert (
736
+ send_important_email (
737
+ {
738
+ "from" : "yuzhi@graphql.org" ,
739
+ "subject" : "Alright 2" ,
740
+ "message" : "Tests are good 2" ,
741
+ "unread" : True ,
742
+ }
743
+ )
744
+ is False
745
+ )
746
+
747
+ with raises (StopAsyncIteration ):
748
+ await payload
749
+
596
750
@mark .asyncio
597
751
async def event_order_is_correct_for_multiple_publishes ():
598
752
pubsub = EventEmitter ()
0 commit comments