@@ -263,6 +263,92 @@ def test_messagebird_webhook_sms_pricing(cli, sync_db: SyncDb, dummy_server, wor
263263 assert msg ['cost' ] == 0.07
264264
265265
266+ def test_messagebird_webhook_carrier_failed (cli , sync_db : SyncDb , dummy_server , worker , loop ):
267+ data = {
268+ 'uid' : str (uuid4 ()),
269+ 'company_code' : 'webhook-test' ,
270+ 'method' : 'sms-messagebird' ,
271+ 'main_template' : 'this is a message' ,
272+ 'recipients' : [{'first_name' : 'John' , 'last_name' : 'Doe' , 'user_link' : 4321 , 'number' : '07801234567' }],
273+ }
274+
275+ r = cli .post ('/send/sms/' , json = data , headers = {'Authorization' : 'testing-key' })
276+ assert r .status_code == 201 , r .text
277+ assert worker .test_run () == 1
278+
279+ msg = sync_db .fetchrow_b ('select * from messages join message_groups g on g.id = messages.id' )
280+ assert msg ['status' ] == 'send'
281+ assert msg ['to_first_name' ] == 'John'
282+ assert msg ['to_last_name' ] == 'Doe'
283+ assert msg ['to_user_link' ] == '4321'
284+ assert msg ['to_address' ] == '+44 7801 234567'
285+ assert msg ['from_name' ] == 'Morpheus'
286+ assert msg ['body' ] == 'this is a message'
287+ assert msg ['cost' ] is None
288+ assert len (msg ['tags' ]) == 1 # just group_id
289+
290+ url_args = {
291+ 'id' : msg ['external_id' ],
292+ 'reference' : 'morpheus' ,
293+ 'recipient' : '447801234567' ,
294+ 'status' : 'delivery_failed' ,
295+ 'statusDatetime' : '2032-06-06T12:00:00' ,
296+ 'statusReason' : 'carrier+rejected' ,
297+ 'statusErrorCode' : 104 ,
298+ }
299+
300+ r = cli .get (f'/webhook/messagebird/?{ urlencode (url_args )} ' )
301+ assert r .status_code == 200 , r .text
302+ assert worker .test_run () == 2
303+
304+ msg = sync_db .fetchrow_b ('select * from messages' )
305+ assert msg ['status' ] == 'delivery_failed'
306+ assert msg ['cost' ] is None
307+
308+
309+ def test_messagebird_webhook_other_delivery_failed (cli , sync_db : SyncDb , dummy_server , worker , loop ):
310+ data = {
311+ 'uid' : str (uuid4 ()),
312+ 'company_code' : 'webhook-test' ,
313+ 'method' : 'sms-messagebird' ,
314+ 'main_template' : 'this is a message' ,
315+ 'recipients' : [{'first_name' : 'John' , 'last_name' : 'Doe' , 'user_link' : 4321 , 'number' : '07801234567' }],
316+ }
317+
318+ r = cli .post ('/send/sms/' , json = data , headers = {'Authorization' : 'testing-key' })
319+ assert r .status_code == 201 , r .text
320+ assert worker .test_run () == 1
321+
322+ msg = sync_db .fetchrow_b ('select * from messages join message_groups g on g.id = messages.id' )
323+ assert msg ['status' ] == 'send'
324+ assert msg ['to_first_name' ] == 'John'
325+ assert msg ['to_last_name' ] == 'Doe'
326+ assert msg ['to_user_link' ] == '4321'
327+ assert msg ['to_address' ] == '+44 7801 234567'
328+ assert msg ['from_name' ] == 'Morpheus'
329+ assert msg ['body' ] == 'this is a message'
330+ assert msg ['cost' ] is None
331+ assert len (msg ['tags' ]) == 1 # just group_id
332+
333+ url_args = {
334+ 'id' : msg ['external_id' ],
335+ 'reference' : 'morpheus' ,
336+ 'recipient' : '447801234567' ,
337+ 'status' : 'delivery_failed' ,
338+ 'statusDatetime' : '2032-06-06T12:00:00' ,
339+ 'statusReason' : 'unknown+subscriber' ,
340+ 'statusErrorCode' : 27 ,
341+ }
342+
343+ r = cli .get (f'/webhook/messagebird/?{ urlencode (url_args )} ' )
344+ assert r .status_code == 200 , r .text
345+ assert worker .test_run () == 2
346+
347+ msg = sync_db .fetchrow_b ('select * from messages' )
348+ assert msg ['status' ] == 'delivery_failed'
349+ assert msg ['cost' ] is None
350+
351+
266352def test_failed_render (cli , tmpdir , sync_db : SyncDb , worker , loop ):
267353 data = {
268354 'uid' : str (uuid4 ()),
0 commit comments