@@ -264,3 +264,119 @@ def test_produces_a_payload_for_multiple_subscribe_in_same_subscription():
264264
265265 assert payload1 [0 ].data == expected_payload
266266 assert payload2 [0 ].data == expected_payload
267+
268+
269+ # Subscription Publish Phase
270+ def test_produces_a_payload_per_subscription_event ():
271+ stream = Subject ()
272+ send_important_email , subscription = create_subscription (stream )
273+
274+ payload = []
275+
276+ subscription .subscribe (payload .append )
277+ send_important_email (Email (
278+ from_ = 'yuzhi@graphql.org' ,
279+ subject = 'Alright' ,
280+ message = 'Tests are good' ,
281+ unread = True ,
282+ ))
283+ expected_payload = {
284+ 'importantEmail' : {
285+ 'email' : {
286+ 'from' : 'yuzhi@graphql.org' ,
287+ 'subject' : 'Alright' ,
288+ },
289+ 'inbox' : {
290+ 'unread' : 1 ,
291+ 'total' : 2 ,
292+ },
293+ }
294+ }
295+
296+ assert len (payload ) == 1
297+ assert payload [0 ].data == expected_payload
298+
299+ send_important_email (Email (
300+ from_ = 'hyo@graphql.org' ,
301+ subject = 'Tools' ,
302+ message = 'I <3 making things' ,
303+ unread = True ,
304+ ))
305+ expected_payload = {
306+ 'importantEmail' : {
307+ 'email' : {
308+ 'from' : 'hyo@graphql.org' ,
309+ 'subject' : 'Tools' ,
310+ },
311+ 'inbox' : {
312+ 'unread' : 2 ,
313+ 'total' : 3 ,
314+ },
315+ }
316+ }
317+
318+ assert len (payload ) == 2
319+ assert payload [- 1 ].data == expected_payload
320+
321+ # The client decides to disconnect
322+ stream .on_completed ()
323+
324+ send_important_email (Email (
325+ from_ = 'adam@graphql.org' ,
326+ subject = 'Important' ,
327+ message = 'Read me please' ,
328+ unread = True ,
329+ ))
330+
331+ assert len (payload ) == 2
332+
333+
334+ def test_event_order_is_correct_for_multiple_publishes ():
335+ stream = Subject ()
336+ send_important_email , subscription = create_subscription (stream )
337+
338+ payload = []
339+
340+ subscription .subscribe (payload .append )
341+ send_important_email (Email (
342+ from_ = 'yuzhi@graphql.org' ,
343+ subject = 'Message' ,
344+ message = 'Tests are good' ,
345+ unread = True ,
346+ ))
347+ send_important_email (Email (
348+ from_ = 'yuzhi@graphql.org' ,
349+ subject = 'Message 2' ,
350+ message = 'Tests are good 2' ,
351+ unread = True ,
352+ ))
353+
354+ expected_payload1 = {
355+ 'importantEmail' : {
356+ 'email' : {
357+ 'from' : 'yuzhi@graphql.org' ,
358+ 'subject' : 'Message' ,
359+ },
360+ 'inbox' : {
361+ 'unread' : 1 ,
362+ 'total' : 2 ,
363+ },
364+ }
365+ }
366+
367+ expected_payload2 = {
368+ 'importantEmail' : {
369+ 'email' : {
370+ 'from' : 'yuzhi@graphql.org' ,
371+ 'subject' : 'Message 2' ,
372+ },
373+ 'inbox' : {
374+ 'unread' : 2 ,
375+ 'total' : 3 ,
376+ },
377+ }
378+ }
379+
380+ assert len (payload ) == 2
381+ assert payload [0 ].data == expected_payload1
382+ assert payload [1 ].data == expected_payload2
0 commit comments