Refine tests for bills, multiple bills

This commit is contained in:
Nico Schottelius 2020-08-09 12:34:25 +02:00
commit ef02cb61fd
5 changed files with 177 additions and 48 deletions

View file

@ -72,6 +72,15 @@ class BillingAddressTestCase(TestCase):
email='jane.random@domain.tld')
def test_user_no_address(self):
"""
Raise an error, when there is no address
"""
self.assertRaises(uncloud_pay.models.BillingAddress.DoesNotExist,
BillingAddress.get_address_for,
self.user)
def test_user_only_inactive_address(self):
"""
Raise an error, when there is no active address
@ -89,7 +98,7 @@ class BillingAddressTestCase(TestCase):
BillingAddress.get_address_for,
self.user)
def test_user_only_active_address(self):
def test_find_active_address(self):
"""
Find the active address
"""
@ -105,7 +114,7 @@ class BillingAddressTestCase(TestCase):
self.assertEqual(BillingAddress.get_address_for(self.user), ba)
def test_multiple_addresses(self):
def test_find_right_address_with_multiple_addresses(self):
"""
Find the active address only, skip inactive
"""
@ -129,6 +138,35 @@ class BillingAddressTestCase(TestCase):
self.assertEqual(BillingAddress.get_address_for(self.user), ba)
def test_change_addresses(self):
"""
Switch the active address
"""
ba = BillingAddress.objects.create(
owner=self.user,
organization = 'Test org',
street="unknown",
city="unknown",
postal_code="unknown",
active=True)
self.assertEqual(BillingAddress.get_address_for(self.user), ba)
ba.active=False
ba.save()
ba2 = BillingAddress.objects.create(
owner=self.user,
organization = 'Test org',
street="unknown",
city="unknown",
postal_code="somewhere else",
active=True)
self.assertEqual(BillingAddress.get_address_for(self.user), ba2)
class BillAndOrderTestCase(TestCase):
def setUp(self):
@ -144,7 +182,7 @@ class BillAndOrderTestCase(TestCase):
username='recurrent_product_user',
email='jane.doe@domain.tld')
BillingAddress.objects.create(
self.user_addr = BillingAddress.objects.create(
owner=self.user,
organization = 'Test org',
street="unknown",
@ -152,7 +190,7 @@ class BillAndOrderTestCase(TestCase):
postal_code="unknown",
active=True)
BillingAddress.objects.create(
self.recurring_user_addr = BillingAddress.objects.create(
owner=self.recurring_user,
organization = 'Test org',
street="Somewhere",
@ -194,12 +232,13 @@ class BillAndOrderTestCase(TestCase):
]
def test_bill_one_time_one_bill_record(self):
"""
Ensure there is only 1 bill record per order
"""
bill = Bill.create_next_bill_for_user(self.user)
bill = Bill.create_next_bill_for_user_address(self.user, self.user_addr)
self.assertEqual(self.one_time_order.billrecord_set.count(), 1)
@ -208,7 +247,7 @@ class BillAndOrderTestCase(TestCase):
Check the bill sum for a single one time order
"""
bill = Bill.create_next_bill_for_user(self.user)
bill = Bill.create_next_bill_for_user_address(self.user, self.user_addr)
self.assertEqual(bill.sum, self.order_meta[1]['price'])
@ -217,7 +256,8 @@ class BillAndOrderTestCase(TestCase):
Ensure there is only 1 bill record per order
"""
bill = Bill.create_next_bill_for_user(self.recurring_user)
bill = Bill.create_next_bill_for_user_address(self.recurring_user,
self.recurring_user_addr)
self.assertEqual(self.recurring_order.billrecord_set.count(), 1)
self.assertEqual(bill.billrecord_set.count(), 1)
@ -230,13 +270,65 @@ class BillAndOrderTestCase(TestCase):
"""
for ending_date in self.bill_dates:
b = Bill.create_next_bill_for_user(self.recurring_user, ending_date)
b = Bill.create_next_bill_for_user_address(self.recurring_user, self.recurring_user_addr, ending_date)
b.close()
bill_count = Bill.objects.filter(owner=self.recurring_user).count()
self.assertEqual(len(self.bill_dates), bill_count)
def test_multi_addr_multi_bill(self):
"""
Ensure multiple bills are created if orders exist with different billing addresses
"""
username="lotsofplaces"
multi_addr_user = get_user_model().objects.create(
username=username,
email=f"{username}@example.org")
user_addr1 = BillingAddress.objects.create(
owner=multi_addr_user,
organization = 'Test org',
street="unknown",
city="unknown",
postal_code="unknown",
active=True)
order1 = Order.objects.create(
owner=multi_addr_user,
starting_date=self.order_meta[1]['starting_date'],
ending_date=self.order_meta[1]['ending_date'],
recurring_period=RecurringPeriod.ONE_TIME,
price=self.order_meta[1]['price'],
description=self.order_meta[1]['description'],
billing_address=BillingAddress.get_address_for(self.user))
# Make this address inactive
user_addr1.active = False
user_addr1.save()
user_addr2 = BillingAddress.objects.create(
owner=multi_addr_user,
organization = 'Test2 org',
street="unknown2",
city="unknown2",
postal_code="unknown2",
active=True)
order2 = Order.objects.create(
owner=multi_addr_user,
starting_date=self.order_meta[1]['starting_date'],
ending_date=self.order_meta[1]['ending_date'],
recurring_period=RecurringPeriod.ONE_TIME,
price=self.order_meta[1]['price'],
description=self.order_meta[1]['description'],
billing_address=BillingAddress.get_address_for(self.user))
bills = Bill.create_next_bills_for_user(multi_addr_user)
self.assertEqual(len(bills), 2)
# class NotABillingTC(TestCase):
# #class BillingTestCase(TestCase):