def test_airtime_trigger_event(self, mock_response): flow = self.get_flow('airtime') ruleset = RuleSet.objects.get(flow=flow) org = flow.org # disconnect transferTo account org.remove_transferto_account(self.admin) mock_response.side_effect = [MockResponse(200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=5,10,20,30\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n")] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertEqual(airtime.contact, self.contact) self.assertEqual(airtime.message, "Error transferring airtime: No transferTo Account connected to " "this organization") # we never call TransferTo API if no account is connected self.assertEqual(mock_response.call_count, 0) mock_response.reset_mock() # now have an account connected org.connect_transferto('mylogin', 'api_token', self.admin) mock_response.side_effect = [MockResponse(200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=5,10,20,30\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n")] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.SUCCESS) self.assertEqual(airtime.contact, self.contact) self.assertEqual(airtime.message, "Airtime Transferred Successfully") self.assertEqual(mock_response.call_count, 3) self.assertTrue(({'action': 'msisdn_info', 'destination_msisdn': '+12065552020'},) in mock_response.call_args_list) self.assertTrue(({'action': 'reserve_id'},) in mock_response.call_args_list) self.assertTrue(({'action': 'topup', 'reserved_id': '234', 'msisdn': '', 'destination_msisdn': '+12065552020', 'product': float('10')},) in mock_response.call_args_list) mock_response.reset_mock() mock_response.side_effect = [MockResponse(200, "error_code=0\r\nerror_txt=\r\ncountry=Rwanda\r\n" "product_list=5,10,20,30\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n")] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertEqual(airtime.message, "Error transferring airtime: Failed by invalid amount " "configuration or missing amount configuration for Rwanda") self.assertTrue(({'action': 'msisdn_info', 'destination_msisdn': '+12065552020'},) in mock_response.call_args_list) self.assertEqual(mock_response.call_count, 1) mock_response.reset_mock() # first error code not 0 mock_response.side_effect = [MockResponse(200, "error_code=1\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=5,10,20,30\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n")] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertTrue(({'action': 'msisdn_info', 'destination_msisdn': '+12065552020'},) in mock_response.call_args_list) self.assertEqual(mock_response.call_count, 1) mock_response.reset_mock() # second error code not 0 mock_response.side_effect = [MockResponse(200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=5,10,20,30\r\n"), MockResponse(200, "error_code=1\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n")] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertTrue(({'action': 'msisdn_info', 'destination_msisdn': '+12065552020'},) in mock_response.call_args_list) self.assertTrue(({'action': 'reserve_id'},) in mock_response.call_args_list) self.assertEqual(mock_response.call_count, 2) mock_response.reset_mock() # third error code not 0 mock_response.side_effect = [MockResponse(200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=5,10,20,30\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=1\r\nerror_txt=\r\n")] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertTrue(({'action': 'msisdn_info', 'destination_msisdn': '+12065552020'},) in mock_response.call_args_list) self.assertTrue(({'action': 'reserve_id'},) in mock_response.call_args_list) self.assertTrue(({'action': 'topup', 'reserved_id': '234', 'msisdn': '', 'destination_msisdn': '+12065552020', 'product': float('10')},) in mock_response.call_args_list) self.assertEqual(mock_response.call_count, 3) mock_response.reset_mock()
def test_airtime_trigger_event(self, mock_response, mock_post_api_response): flow = self.get_flow("airtime") ruleset = RuleSet.objects.get(flow=flow) org = flow.org # disconnect transferTo account org.remove_transferto_account(self.admin) mock_response.side_effect = [ MockResponse( 200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=0.25,0.5,1,1.5\r\n" "local_info_value_list=5,10,20,30\r\n", ), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n"), ] mock_post_api_response.return_value = MockResponse(200, "error_code=0\r\ncurrency=USD\r\n") airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertEqual(airtime.contact, self.contact) self.assertEqual( airtime.message, "Error transferring airtime: No transferTo Account connected to " "this organization" ) # we never call TransferTo API if no account is connected self.assertEqual(mock_response.call_count, 0) mock_response.reset_mock() # now have an account connected org.connect_transferto("mylogin", "api_token", self.admin) mock_response.side_effect = [ MockResponse( 200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=0.25,0.5,1,1.5\r\n" "local_info_value_list=5,10,20,30\r\n", ), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n"), ] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.SUCCESS) self.assertEqual(airtime.contact, self.contact) self.assertEqual(airtime.message, "Airtime Transferred Successfully") self.assertEqual(mock_response.call_count, 3) self.assertTrue( ( { "action": "msisdn_info", "currency": "USD", "destination_msisdn": "+12065552020", "delivered_amount_info": "1", }, ) in mock_response.call_args_list ) self.assertTrue(({"action": "reserve_id"},) in mock_response.call_args_list) self.assertTrue( ( { "action": "topup", "reserved_id": "234", "msisdn": "", "destination_msisdn": "+12065552020", "currency": "USD", "product": "0.5", }, ) in mock_response.call_args_list ) mock_response.reset_mock() mock_response.side_effect = [ MockResponse( 200, "error_code=0\r\nerror_txt=\r\ncountry=Rwanda\r\n" "product_list=0.25,0.5,1,1.5\r\n" "local_info_value_list=5,10,20,30\r\n", ), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n"), ] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertEqual( airtime.message, "Error transferring airtime: Failed by invalid amount " "configuration or missing amount configuration for Rwanda", ) self.assertTrue( ( { "action": "msisdn_info", "currency": "USD", "destination_msisdn": "+12065552020", "delivered_amount_info": "1", }, ) in mock_response.call_args_list ) self.assertEqual(mock_response.call_count, 1) mock_response.reset_mock() # first error code not 0 mock_response.side_effect = [ MockResponse( 200, "error_code=1\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=0.25,0.5,1,1.5\r\n" "local_info_value_list=5,10,20,30\r\n", ), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n"), ] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertTrue( ( { "action": "msisdn_info", "currency": "USD", "destination_msisdn": "+12065552020", "delivered_amount_info": "1", }, ) in mock_response.call_args_list ) self.assertEqual(mock_response.call_count, 1) mock_response.reset_mock() # second error code not 0 mock_response.side_effect = [ MockResponse( 200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=0.25,0.5,1,1.5\r\n" "local_info_value_list=5,10,20,30\r\n", ), MockResponse(200, "error_code=1\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n"), ] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertTrue( ( { "action": "msisdn_info", "currency": "USD", "destination_msisdn": "+12065552020", "delivered_amount_info": "1", }, ) in mock_response.call_args_list ) self.assertTrue(({"action": "reserve_id"},) in mock_response.call_args_list) self.assertEqual(mock_response.call_count, 2) mock_response.reset_mock() # third error code not 0 mock_response.side_effect = [ MockResponse( 200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=0.25,0.5,1,1.5\r\n" "local_info_value_list=5,10,20,30\r\n", ), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=1\r\nerror_txt=\r\n"), ] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertTrue( ( { "action": "msisdn_info", "currency": "USD", "destination_msisdn": "+12065552020", "delivered_amount_info": "1", }, ) in mock_response.call_args_list ) self.assertTrue(({"action": "reserve_id"},) in mock_response.call_args_list) self.assertTrue( ( { "action": "topup", "reserved_id": "234", "msisdn": "", "destination_msisdn": "+12065552020", "currency": "USD", "product": "0.5", }, ) in mock_response.call_args_list ) self.assertEqual(mock_response.call_count, 3) mock_response.reset_mock() # when we need to include skuid mock_response.side_effect = [ MockResponse( 200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=0.25,0.5,1,1.5\r\n" "skuid_list=1625,9805,4561,9715\r\n" "local_info_value_list=5,10,20,30\r\n", ), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n"), ] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.SUCCESS) self.assertEqual(airtime.contact, self.contact) self.assertEqual(airtime.message, "Airtime Transferred Successfully") self.assertEqual(mock_response.call_count, 3) self.assertTrue( ( { "action": "msisdn_info", "currency": "USD", "destination_msisdn": "+12065552020", "delivered_amount_info": "1", }, ) in mock_response.call_args_list ) self.assertTrue(({"action": "reserve_id"},) in mock_response.call_args_list) self.assertTrue( ( { "action": "topup", "reserved_id": "234", "msisdn": "", "skuid": "9805", "destination_msisdn": "+12065552020", "currency": "USD", "product": "0.5", }, ) in mock_response.call_args_list ) mock_response.reset_mock() # when product_list, skuid_list, ... are not parsed as lists in the case of a single value mock_response.side_effect = [ MockResponse( 200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=0.5\r\n" "skuid_list=5505\r\n" "local_info_value_list=10\r\n", ), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n"), ] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.SUCCESS) self.assertEqual(airtime.contact, self.contact) self.assertEqual(airtime.message, "Airtime Transferred Successfully") self.assertEqual(mock_response.call_count, 3) self.assertTrue( ( { "action": "msisdn_info", "currency": "USD", "destination_msisdn": "+12065552020", "delivered_amount_info": "1", }, ) in mock_response.call_args_list ) self.assertTrue(({"action": "reserve_id"},) in mock_response.call_args_list) self.assertTrue( ( { "action": "topup", "reserved_id": "234", "msisdn": "", "skuid": "5505", "destination_msisdn": "+12065552020", "currency": "USD", "product": "0.5", }, ) in mock_response.call_args_list ) mock_response.reset_mock() # for open range only, no product_list, no skuid_list, # just a skuid we just have to pass the amount as denomination mock_response.side_effect = [ MockResponse( 200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "open_range_minimum_amount_local_currency=5\r\n" "open_range_maximum_amount_local_currency=100\r\n" "open_range_minimum_amount_requested_currency=0.25\r\n" "open_range_maximum_amount_requested_currency=5\r\n" "skuid=9940\r\n", ), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n"), ] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.SUCCESS) self.assertEqual(airtime.contact, self.contact) self.assertEqual(airtime.message, "Airtime Transferred Successfully") self.assertEqual(mock_response.call_count, 3) self.assertTrue( ( { "action": "msisdn_info", "currency": "USD", "destination_msisdn": "+12065552020", "delivered_amount_info": "1", }, ) in mock_response.call_args_list ) self.assertTrue(({"action": "reserve_id"},) in mock_response.call_args_list) self.assertTrue( ( { "action": "topup", "reserved_id": "234", "msisdn": "", "skuid": "9940", "destination_msisdn": "+12065552020", "currency": "USD", "product": "0.5", }, ) in mock_response.call_args_list ) mock_response.reset_mock()
def test_airtime_trigger_event(self, mock_response, mock_post_api_response): flow = self.get_flow('airtime') ruleset = RuleSet.objects.get(flow=flow) org = flow.org # disconnect transferTo account org.remove_transferto_account(self.admin) mock_response.side_effect = [MockResponse(200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=5,10,20,30\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n")] mock_post_api_response.return_value = MockResponse(200, "error_code=0\r\ncurrency=USD\r\n") airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertEqual(airtime.contact, self.contact) self.assertEqual(airtime.message, "Error transferring airtime: No transferTo Account connected to " "this organization") # we never call TransferTo API if no account is connected self.assertEqual(mock_response.call_count, 0) mock_response.reset_mock() # now have an account connected org.connect_transferto('mylogin', 'api_token', self.admin) mock_response.side_effect = [MockResponse(200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=5,10,20,30\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n")] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.SUCCESS) self.assertEqual(airtime.contact, self.contact) self.assertEqual(airtime.message, "Airtime Transferred Successfully") self.assertEqual(mock_response.call_count, 3) self.assertTrue(({'action': 'msisdn_info', 'currency': 'USD', 'destination_msisdn': '+12065552020'},) in mock_response.call_args_list) self.assertTrue(({'action': 'reserve_id'},) in mock_response.call_args_list) self.assertTrue(({'action': 'topup', 'reserved_id': '234', 'msisdn': '', 'destination_msisdn': '+12065552020', 'product': float('10')},) in mock_response.call_args_list) mock_response.reset_mock() mock_response.side_effect = [MockResponse(200, "error_code=0\r\nerror_txt=\r\ncountry=Rwanda\r\n" "product_list=5,10,20,30\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n")] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertEqual(airtime.message, "Error transferring airtime: Failed by invalid amount " "configuration or missing amount configuration for Rwanda") self.assertTrue(({'action': 'msisdn_info', 'currency': 'USD', 'destination_msisdn': '+12065552020'},) in mock_response.call_args_list) self.assertEqual(mock_response.call_count, 1) mock_response.reset_mock() # first error code not 0 mock_response.side_effect = [MockResponse(200, "error_code=1\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=5,10,20,30\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n")] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertTrue(({'action': 'msisdn_info', 'currency': 'USD', 'destination_msisdn': '+12065552020'},) in mock_response.call_args_list) self.assertEqual(mock_response.call_count, 1) mock_response.reset_mock() # second error code not 0 mock_response.side_effect = [MockResponse(200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=5,10,20,30\r\n"), MockResponse(200, "error_code=1\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\n")] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertTrue(({'action': 'msisdn_info', 'currency': 'USD', 'destination_msisdn': '+12065552020'},) in mock_response.call_args_list) self.assertTrue(({'action': 'reserve_id'},) in mock_response.call_args_list) self.assertEqual(mock_response.call_count, 2) mock_response.reset_mock() # third error code not 0 mock_response.side_effect = [MockResponse(200, "error_code=0\r\nerror_txt=\r\ncountry=United States\r\n" "product_list=5,10,20,30\r\n"), MockResponse(200, "error_code=0\r\nerror_txt=\r\nreserved_id=234\r\n"), MockResponse(200, "error_code=1\r\nerror_txt=\r\n")] airtime = AirtimeTransfer.trigger_airtime_event(org, ruleset, self.contact, None) self.assertEqual(airtime.status, AirtimeTransfer.FAILED) self.assertTrue(({'action': 'msisdn_info', 'currency': 'USD', 'destination_msisdn': '+12065552020'},) in mock_response.call_args_list) self.assertTrue(({'action': 'reserve_id'},) in mock_response.call_args_list) self.assertTrue(({'action': 'topup', 'reserved_id': '234', 'msisdn': '', 'destination_msisdn': '+12065552020', 'product': float('10')},) in mock_response.call_args_list) self.assertEqual(mock_response.call_count, 3) mock_response.reset_mock()