def test_twilio_multipart_usage_charge(self): self.apply_direction_fee() twilio_backend = SQLTwilioBackend.objects.create( name='TWILIO', is_global=True, hq_api_id=SQLTwilioBackend.get_api_id(), couch_id='global_backend', ) twilio_backend.set_extra_fields( account_sid='sid', auth_token='token', ) twilio_backend.save() messages = generator.arbitrary_messages_by_backend_and_direction( {twilio_backend.hq_api_id: twilio_backend.couch_id} ) for message in messages: FakeTwilioMessageFactory.add_num_segments_for_message(message.backend_message_id, randint(1, 10)) FakeTwilioMessageFactory.add_price_for_message(message.backend_message_id, generator.arbitrary_fee()) for message in messages: multipart_count = randint(1, 10) # Should be ignored billable = SmsBillable.create(message, multipart_count=multipart_count) self.assertIsNotNone(billable) self.assertEqual( billable.usage_charge, ( self.least_specific_fees[message.direction] * FakeTwilioMessageFactory.get_num_segments_for_message( message.backend_message_id ) ) )
def test_prefix_fees(self): self.create_prefix_gateway_fees() for phone_number, prefix in generator.arbitrary_phone_numbers_and_prefixes( self.country_code_and_prefixes ): messages = generator.arbitrary_messages_by_backend_and_direction( { random_key: self.backend_ids[random_key] for random_key in [choice(self.backend_ids.keys())] }, phone_number=phone_number, ) for msg_log in messages: billable = SmsBillable.create(msg_log) self.assertIsNotNone(billable) try: self.assertEqual( billable.gateway_charge, self.prefix_fees [billable.direction] [billable.gateway_fee.criteria.backend_api_id] [phone_number[:-10]] [prefix] [msg_log.backend_id] ) except AssertionError: raise Exception( "Phone number: %s, " % phone_number + "given prefix: %s, " % prefix + "found prefix: %s" % billable.gateway_fee.criteria.prefix )
def test_only_direction(self): self.apply_direction_fee() messages = generator.arbitrary_messages_by_backend_and_direction( self.backend_ids) for message in messages: billable = SmsBillable.create(message) self.assertIsNotNone(billable) self.assertEqual(billable.usage_fee.amount, self.least_specific_fees[message.direction])
def test_only_direction(self): self.apply_direction_fee() messages = generator.arbitrary_messages_by_backend_and_direction(self.backend_ids) for message in messages: billable = SmsBillable.create(message) self.assertIsNotNone(billable) self.assertEqual( billable.usage_fee.amount, self.least_specific_fees[message.direction] )
def test_log_no_usage_fee(self): self.apply_direction_fee() self.apply_direction_and_domain_fee() for direction, domain_fee in self.most_specific_fees.items(): for domain in domain_fee: messages = generator.arbitrary_messages_by_backend_and_direction(generator.arbitrary_backend_ids(), domain=domain, directions=['X', 'Y']) for message in messages: billable = SmsBillable.create(message) self.assertIsNotNone(billable) self.assertIsNone(billable.usage_fee)
def test_no_matching_fee(self): self.create_least_specific_gateway_fees() self.create_country_code_gateway_fees() self.create_instance_gateway_fees() self.create_most_specific_gateway_fees() phone_numbers = [generator.arbitrary_phone_number() for i in range(10)] for phone_number in phone_numbers: messages = generator.arbitrary_messages_by_backend_and_direction(self.backend_ids, phone_number=phone_number, directions=['X', 'Y']) for msg_log in messages: billable = SmsBillable.create(msg_log) self.assertIsNotNone(billable) self.assertIsNone(billable.gateway_fee)
def test_domain_and_direction(self): self.apply_direction_fee() self.apply_direction_and_domain_fee() for direction, domain_fee in self.most_specific_fees.items(): for domain in domain_fee: messages = generator.arbitrary_messages_by_backend_and_direction(generator.arbitrary_backend_ids(), domain=domain) for message in messages: billable = SmsBillable.create(message) self.assertIsNotNone(billable) self.assertEqual( billable.usage_fee.amount, self.most_specific_fees[message.direction][domain] )
def test_country_code_fees(self): self.create_least_specific_gateway_fees() self.create_country_code_gateway_fees() phone_numbers = [generator.arbitrary_phone_number() for i in range(10)] for phone_number in phone_numbers: messages = generator.arbitrary_messages_by_backend_and_direction( self.backend_ids, phone_number=phone_number) for msg_log in messages: billable = SmsBillable.create(msg_log) self.assertIsNotNone(billable) self.assertEqual( billable.gateway_charge, self.country_code_fees[billable.direction][ billable.gateway_fee.criteria.backend_api_id][int( phone_number[:-10])])
def setUp(self): self.currency_usd, _ = Currency.objects.get_or_create( code=settings.DEFAULT_CURRENCY, name="Default Currency", symbol="$", rate_to_default=Decimal('1.0') ) self.available_backends = get_available_backends().values() self.backend_ids = generator.arbitrary_backend_ids() self.message_logs = generator.arbitrary_messages_by_backend_and_direction(self.backend_ids) self.least_specific_fees = generator.arbitrary_fees_by_direction_and_backend() self.country_code_fees = generator.arbitrary_fees_by_country() self.instance_fees = generator.arbitrary_fees_by_backend_instance(self.backend_ids) self.most_specific_fees = generator.arbitrary_fees_by_all(self.backend_ids)
def setUp(self): SmsGatewayFee.objects.all().delete() SmsGatewayFeeCriteria.objects.all().delete() self.currency_usd = init_default_currency() self.backend_ids = generator.arbitrary_backend_ids() self.message_logs = generator.arbitrary_messages_by_backend_and_direction(self.backend_ids) self.least_specific_fees = generator.arbitrary_fees_by_direction_and_backend() self.country_code_fees = generator.arbitrary_fees_by_country() self.instance_fees = generator.arbitrary_fees_by_backend_instance(self.backend_ids) self.most_specific_fees = generator.arbitrary_fees_by_all(self.backend_ids) self.country_code_and_prefixes = generator.arbitrary_country_code_and_prefixes(3, 3) self.prefix_fees = generator.arbitrary_fees_by_prefix(self.backend_ids, self.country_code_and_prefixes) self.other_currency = generator.arbitrary_currency()
def test_country_code_fees(self): self.create_least_specific_gateway_fees() self.create_country_code_gateway_fees() phone_numbers = [generator.arbitrary_phone_number() for i in range(10)] for phone_number in phone_numbers: messages = generator.arbitrary_messages_by_backend_and_direction(self.backend_ids, phone_number=phone_number) for msg_log in messages: billable = SmsBillable.create(msg_log) self.assertIsNotNone(billable) self.assertEqual( billable.gateway_charge, self.country_code_fees[billable.direction] [billable.gateway_fee.criteria.backend_api_id] [int(phone_number[:-10])] )
def test_multipart_usage_charge(self): self.apply_direction_fee() self.apply_direction_and_domain_fee() for direction, domain_fee in self.most_specific_fees.items(): for domain in domain_fee: messages = generator.arbitrary_messages_by_backend_and_direction( self.backend_ids, domain=domain, ) for message in messages: multipart_count = randint(1, 10) billable = SmsBillable.create(message, multipart_count=multipart_count) self.assertIsNotNone(billable) self.assertEqual( billable.usage_charge, self.most_specific_fees[message.direction][domain] * multipart_count )
def test_prefix_fees(self): self.create_prefix_gateway_fees() for phone_number, prefix in generator.arbitrary_phone_numbers_and_prefixes( self.country_code_and_prefixes): messages = generator.arbitrary_messages_by_backend_and_direction( self.backend_ids, phone_number=phone_number, ) for msg_log in messages: billable = SmsBillable.create(msg_log) self.assertIsNotNone(billable) try: self.assertEqual( billable.gateway_charge, self.prefix_fees[billable.direction] [billable.gateway_fee.criteria.backend_api_id][ phone_number[:-10]][prefix][msg_log.backend_id]) except AssertionError: raise Exception("Phone number: %s, " % phone_number + "given prefix: %s, " % prefix + "found prefix: %s" % billable.gateway_fee.criteria.prefix)
def setUp(self): SmsGatewayFee.objects.all().delete() SmsGatewayFeeCriteria.objects.all().delete() self.currency_usd = init_default_currency() self.available_backends = get_available_backends().values() self.backend_ids = generator.arbitrary_backend_ids() self.message_logs = generator.arbitrary_messages_by_backend_and_direction( self.backend_ids) self.least_specific_fees = generator.arbitrary_fees_by_direction_and_backend( ) self.country_code_fees = generator.arbitrary_fees_by_country() self.instance_fees = generator.arbitrary_fees_by_backend_instance( self.backend_ids) self.most_specific_fees = generator.arbitrary_fees_by_all( self.backend_ids) self.country_code_and_prefixes = generator.arbitrary_country_code_and_prefixes( ) self.prefix_fees = generator.arbitrary_fees_by_prefix( self.backend_ids, self.country_code_and_prefixes) self.other_currency = generator.arbitrary_currency()