refacto tests with self.get_project

This commit is contained in:
Youe Graillot 2021-12-13 01:02:19 +01:00
parent 186d42ce7c
commit 9352ad64dc
4 changed files with 51 additions and 49 deletions

View file

@ -220,7 +220,7 @@ class BudgetTestCase(IhatemoneyTestCase):
self.assertEqual(len(models.Project.query.all()), 1) self.assertEqual(len(models.Project.query.all()), 1)
# Add a second project with the same id # Add a second project with the same id
models.Project.query.get("raclette") self.get_project("raclette")
c.post( c.post(
"/create", "/create",
@ -338,17 +338,17 @@ class BudgetTestCase(IhatemoneyTestCase):
# adds a member to this project # adds a member to this project
self.client.post("/raclette/members/add", data={"name": "zorglub"}) self.client.post("/raclette/members/add", data={"name": "zorglub"})
self.assertEqual(len(models.Project.query.get("raclette").members), 1) self.assertEqual(len(self.get_project("raclette").members), 1)
# adds him twice # adds him twice
result = self.client.post("/raclette/members/add", data={"name": "zorglub"}) result = self.client.post("/raclette/members/add", data={"name": "zorglub"})
# should not accept him # should not accept him
self.assertEqual(len(models.Project.query.get("raclette").members), 1) self.assertEqual(len(self.get_project("raclette").members), 1)
# add fred # add fred
self.client.post("/raclette/members/add", data={"name": "fred"}) self.client.post("/raclette/members/add", data={"name": "fred"})
self.assertEqual(len(models.Project.query.get("raclette").members), 2) self.assertEqual(len(self.get_project("raclette").members), 2)
# check fred is present in the bills page # check fred is present in the bills page
result = self.client.get("/raclette/") result = self.client.get("/raclette/")
@ -356,16 +356,15 @@ class BudgetTestCase(IhatemoneyTestCase):
# remove fred # remove fred
self.client.post( self.client.post(
"/raclette/members/%s/delete" "/raclette/members/%s/delete" % self.get_project("raclette").members[-1].id
% models.Project.query.get("raclette").members[-1].id
) )
# as fred is not bound to any bill, he is removed # as fred is not bound to any bill, he is removed
self.assertEqual(len(models.Project.query.get("raclette").members), 1) self.assertEqual(len(self.get_project("raclette").members), 1)
# add fred again # add fred again
self.client.post("/raclette/members/add", data={"name": "fred"}) self.client.post("/raclette/members/add", data={"name": "fred"})
fred_id = models.Project.query.get("raclette").members[-1].id fred_id = self.get_project("raclette").members[-1].id
# bound him to a bill # bound him to a bill
result = self.client.post( result = self.client.post(
@ -383,8 +382,8 @@ class BudgetTestCase(IhatemoneyTestCase):
self.client.post(f"/raclette/members/{fred_id}/delete") self.client.post(f"/raclette/members/{fred_id}/delete")
# he is still in the database, but is deactivated # he is still in the database, but is deactivated
self.assertEqual(len(models.Project.query.get("raclette").members), 2) self.assertEqual(len(self.get_project("raclette").members), 2)
self.assertEqual(len(models.Project.query.get("raclette").active_members), 1) self.assertEqual(len(self.get_project("raclette").active_members), 1)
# as fred is now deactivated, check that he is not listed when adding # as fred is now deactivated, check that he is not listed when adding
# a bill or displaying the balance # a bill or displaying the balance
@ -398,14 +397,14 @@ class BudgetTestCase(IhatemoneyTestCase):
# adding him again should reactivate him # adding him again should reactivate him
self.client.post("/raclette/members/add", data={"name": "fred"}) self.client.post("/raclette/members/add", data={"name": "fred"})
self.assertEqual(len(models.Project.query.get("raclette").active_members), 2) self.assertEqual(len(self.get_project("raclette").active_members), 2)
# adding an user with the same name as another user from a different # adding an user with the same name as another user from a different
# project should not cause any troubles # project should not cause any troubles
self.post_project("randomid") self.post_project("randomid")
self.login("randomid") self.login("randomid")
self.client.post("/randomid/members/add", data={"name": "fred"}) self.client.post("/randomid/members/add", data={"name": "fred"})
self.assertEqual(len(models.Project.query.get("randomid").active_members), 1) self.assertEqual(len(self.get_project("randomid").active_members), 1)
def test_person_model(self): def test_person_model(self):
self.post_project("raclette") self.post_project("raclette")
@ -413,7 +412,7 @@ class BudgetTestCase(IhatemoneyTestCase):
# adds a member to this project # adds a member to this project
self.client.post("/raclette/members/add", data={"name": "zorglub"}) self.client.post("/raclette/members/add", data={"name": "zorglub"})
zorglub = models.Project.query.get("raclette").members[-1] zorglub = self.get_project("raclette").members[-1]
# should not have any bills # should not have any bills
self.assertFalse(zorglub.has_bills()) self.assertFalse(zorglub.has_bills())
@ -431,7 +430,7 @@ class BudgetTestCase(IhatemoneyTestCase):
) )
# should have a bill now # should have a bill now
zorglub = models.Project.query.get("raclette").members[-1] zorglub = self.get_project("raclette").members[-1]
self.assertTrue(zorglub.has_bills()) self.assertTrue(zorglub.has_bills())
def test_member_delete_method(self): def test_member_delete_method(self):
@ -447,7 +446,7 @@ class BudgetTestCase(IhatemoneyTestCase):
# delete user using POST method # delete user using POST method
self.client.post("/raclette/members/1/delete") self.client.post("/raclette/members/1/delete")
self.assertEqual(len(models.Project.query.get("raclette").active_members), 0) self.assertEqual(len(self.get_project("raclette").active_members), 0)
# try to delete an user already deleted # try to delete an user already deleted
self.client.post("/raclette/members/1/delete") self.client.post("/raclette/members/1/delete")
@ -455,7 +454,7 @@ class BudgetTestCase(IhatemoneyTestCase):
# test that a demo project is created if none is defined # test that a demo project is created if none is defined
self.assertEqual([], models.Project.query.all()) self.assertEqual([], models.Project.query.all())
self.client.get("/demo") self.client.get("/demo")
demo = models.Project.query.get("demo") demo = self.get_project("demo")
self.assertTrue(demo is not None) self.assertTrue(demo is not None)
self.assertEqual(["Amina", "Georg", "Alice"], [m.name for m in demo.members]) self.assertEqual(["Amina", "Georg", "Alice"], [m.name for m in demo.members])
@ -584,7 +583,7 @@ class BudgetTestCase(IhatemoneyTestCase):
self.client.post("/raclette/members/add", data={"name": "zorglub"}) self.client.post("/raclette/members/add", data={"name": "zorglub"})
self.client.post("/raclette/members/add", data={"name": "fred"}) self.client.post("/raclette/members/add", data={"name": "fred"})
members_ids = [m.id for m in models.Project.query.get("raclette").members] members_ids = [m.id for m in self.get_project("raclette").members]
# create a bill # create a bill
self.client.post( self.client.post(
@ -597,7 +596,7 @@ class BudgetTestCase(IhatemoneyTestCase):
"amount": "25", "amount": "25",
}, },
) )
models.Project.query.get("raclette") self.get_project("raclette")
bill = models.Bill.query.one() bill = models.Bill.query.one()
self.assertEqual(bill.amount, 25) self.assertEqual(bill.amount, 25)
@ -658,7 +657,7 @@ class BudgetTestCase(IhatemoneyTestCase):
}, },
) )
balance = models.Project.query.get("raclette").balance balance = self.get_project("raclette").balance
self.assertEqual(set(balance.values()), set([19.0, -19.0])) self.assertEqual(set(balance.values()), set([19.0, -19.0]))
# Bill with negative amount # Bill with negative amount
@ -727,7 +726,7 @@ class BudgetTestCase(IhatemoneyTestCase):
"/raclette/members/add", data={"name": "freddy familly", "weight": 4} "/raclette/members/add", data={"name": "freddy familly", "weight": 4}
) )
members_ids = [m.id for m in models.Project.query.get("raclette").members] members_ids = [m.id for m in self.get_project("raclette").members]
# test balance # test balance
self.client.post( self.client.post(
@ -752,7 +751,7 @@ class BudgetTestCase(IhatemoneyTestCase):
}, },
) )
balance = models.Project.query.get("raclette").balance balance = self.get_project("raclette").balance
self.assertEqual(set(balance.values()), set([6, -6])) self.assertEqual(set(balance.values()), set([6, -6]))
def test_trimmed_members(self): def test_trimmed_members(self):
@ -761,7 +760,7 @@ class BudgetTestCase(IhatemoneyTestCase):
# Add two times the same person (with a space at the end). # Add two times the same person (with a space at the end).
self.client.post("/raclette/members/add", data={"name": "zorglub"}) self.client.post("/raclette/members/add", data={"name": "zorglub"})
self.client.post("/raclette/members/add", data={"name": "zorglub "}) self.client.post("/raclette/members/add", data={"name": "zorglub "})
members = models.Project.query.get("raclette").members members = self.get_project("raclette").members
self.assertEqual(len(members), 1) self.assertEqual(len(members), 1)
@ -793,8 +792,8 @@ class BudgetTestCase(IhatemoneyTestCase):
# An error should be generated, and its weight should still be 1. # An error should be generated, and its weight should still be 1.
self.assertIn('<p class="alert alert-danger">', resp.data.decode("utf-8")) self.assertIn('<p class="alert alert-danger">', resp.data.decode("utf-8"))
self.assertEqual(len(models.Project.query.get("raclette").members), 1) self.assertEqual(len(self.get_project("raclette").members), 1)
self.assertEqual(models.Project.query.get("raclette").members[0].weight, 1) self.assertEqual(self.get_project("raclette").members[0].weight, 1)
def test_rounding(self): def test_rounding(self):
self.post_project("raclette") self.post_project("raclette")
@ -838,11 +837,11 @@ class BudgetTestCase(IhatemoneyTestCase):
}, },
) )
balance = models.Project.query.get("raclette").balance balance = self.get_project("raclette").balance
result = {} result = {}
result[models.Project.query.get("raclette").members[0].id] = 8.12 result[self.get_project("raclette").members[0].id] = 8.12
result[models.Project.query.get("raclette").members[1].id] = 0.0 result[self.get_project("raclette").members[1].id] = 0.0
result[models.Project.query.get("raclette").members[2].id] = -8.12 result[self.get_project("raclette").members[2].id] = -8.12
# Since we're using floating point to store currency, we can have some # Since we're using floating point to store currency, we can have some
# rounding issues that prevent test from working. # rounding issues that prevent test from working.
# However, we should obtain the same values as the theoretical ones if we # However, we should obtain the same values as the theoretical ones if we
@ -864,7 +863,7 @@ class BudgetTestCase(IhatemoneyTestCase):
resp = self.client.post("/raclette/edit", data=new_data, follow_redirects=True) resp = self.client.post("/raclette/edit", data=new_data, follow_redirects=True)
self.assertEqual(resp.status_code, 200) self.assertEqual(resp.status_code, 200)
project = models.Project.query.get("raclette") project = self.get_project("raclette")
self.assertEqual(project.name, new_data["name"]) self.assertEqual(project.name, new_data["name"])
self.assertEqual(project.contact_email, new_data["contact_email"]) self.assertEqual(project.contact_email, new_data["contact_email"])
@ -1028,14 +1027,14 @@ class BudgetTestCase(IhatemoneyTestCase):
"amount": "10", "amount": "10",
}, },
) )
project = models.Project.query.get("raclette") project = self.get_project("raclette")
transactions = project.get_transactions_to_settle_bill() transactions = project.get_transactions_to_settle_bill()
members = defaultdict(int) members = defaultdict(int)
# We should have the same values between transactions and project balances # We should have the same values between transactions and project balances
for t in transactions: for t in transactions:
members[t["ower"]] -= t["amount"] members[t["ower"]] -= t["amount"]
members[t["receiver"]] += t["amount"] members[t["receiver"]] += t["amount"]
balance = models.Project.query.get("raclette").balance balance = self.get_project("raclette").balance
for m, a in members.items(): for m, a in members.items():
assert abs(a - balance[m.id]) < 0.01 assert abs(a - balance[m.id]) < 0.01
return return
@ -1081,7 +1080,7 @@ class BudgetTestCase(IhatemoneyTestCase):
"amount": "13.33", "amount": "13.33",
}, },
) )
project = models.Project.query.get("raclette") project = self.get_project("raclette")
transactions = project.get_transactions_to_settle_bill() transactions = project.get_transactions_to_settle_bill()
# There should not be any zero-amount transfer after rounding # There should not be any zero-amount transfer after rounding
@ -1352,7 +1351,7 @@ class BudgetTestCase(IhatemoneyTestCase):
) )
# Change project currency to CAD # Change project currency to CAD
project = models.Project.query.get("raclette") project = self.get_project("raclette")
project.switch_currency("CAD") project.switch_currency("CAD")
# generate json export of transactions (now in CAD!) # generate json export of transactions (now in CAD!)
@ -1392,7 +1391,7 @@ class BudgetTestCase(IhatemoneyTestCase):
self.post_project("raclette", default_currency="EUR") self.post_project("raclette", default_currency="EUR")
self.login("raclette") self.login("raclette")
project = models.Project.query.get("raclette") project = self.get_project("raclette")
json_to_import = [ json_to_import = [
{ {
@ -1464,7 +1463,7 @@ class BudgetTestCase(IhatemoneyTestCase):
self.post_project("raclette") self.post_project("raclette")
self.login("raclette") self.login("raclette")
project = models.Project.query.get("raclette") project = self.get_project("raclette")
json_to_import = [ json_to_import = [
{ {
@ -1527,7 +1526,7 @@ class BudgetTestCase(IhatemoneyTestCase):
self.post_project("raclette") self.post_project("raclette")
self.login("raclette") self.login("raclette")
project = models.Project.query.get("raclette") project = self.get_project("raclette")
json_to_import = [ json_to_import = [
{ {
@ -1574,7 +1573,7 @@ class BudgetTestCase(IhatemoneyTestCase):
self.post_project("raclette", default_currency="EUR") self.post_project("raclette", default_currency="EUR")
self.login("raclette") self.login("raclette")
project = models.Project.query.get("raclette") project = self.get_project("raclette")
json_to_import = [ json_to_import = [
{ {
@ -1643,7 +1642,7 @@ class BudgetTestCase(IhatemoneyTestCase):
self.post_project("raclette") self.post_project("raclette")
self.login("raclette") self.login("raclette")
project = models.Project.query.get("raclette") project = self.get_project("raclette")
json_to_import = [ json_to_import = [
{ {
@ -1710,7 +1709,7 @@ class BudgetTestCase(IhatemoneyTestCase):
self.post_project("raclette") self.post_project("raclette")
self.login("raclette") self.login("raclette")
project = models.Project.query.get("raclette") project = self.get_project("raclette")
self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2}) self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2})
self.client.post("/raclette/members/add", data={"name": "fred"}) self.client.post("/raclette/members/add", data={"name": "fred"})
@ -1791,7 +1790,7 @@ class BudgetTestCase(IhatemoneyTestCase):
def test_import_wrong_json(self): def test_import_wrong_json(self):
self.post_project("raclette") self.post_project("raclette")
self.login("raclette") self.login("raclette")
models.Project.query.get("raclette") self.get_project("raclette")
json_1 = [ json_1 = [
{ # wrong keys { # wrong keys
@ -1841,7 +1840,7 @@ class BudgetTestCase(IhatemoneyTestCase):
}, },
) )
# Ensure it has been created # Ensure it has been created
raclette = models.Project.query.get("raclette") raclette = self.get_project("raclette")
self.assertEqual(raclette.get_bills().count(), 1) self.assertEqual(raclette.get_bills().count(), 1)
# Log out # Log out
@ -1986,7 +1985,7 @@ class BudgetTestCase(IhatemoneyTestCase):
}, },
) )
project = models.Project.query.get("raclette") project = self.get_project("raclette")
# First all converted_amount should be the same as amount, with no currency # First all converted_amount should be the same as amount, with no currency
for bill in project.get_bills(): for bill in project.get_bills():
@ -2067,7 +2066,7 @@ class BudgetTestCase(IhatemoneyTestCase):
# A user displayed error should be generated, and its currency should be the same. # A user displayed error should be generated, and its currency should be the same.
self.assertStatus(200, resp) self.assertStatus(200, resp)
self.assertIn('<p class="alert alert-danger">', resp.data.decode("utf-8")) self.assertIn('<p class="alert alert-danger">', resp.data.decode("utf-8"))
self.assertEqual(models.Project.query.get("raclette").default_currency, "USD") self.assertEqual(self.get_project("raclette").default_currency, "USD")
def test_currency_switch_to_bill_currency(self): def test_currency_switch_to_bill_currency(self):
@ -2091,7 +2090,7 @@ class BudgetTestCase(IhatemoneyTestCase):
}, },
) )
project = models.Project.query.get("raclette") project = self.get_project("raclette")
bill = project.get_bills().first() bill = project.get_bills().first()
assert bill.converted_amount == self.converter.exchange_currency( assert bill.converted_amount == self.converter.exchange_currency(
@ -2137,7 +2136,7 @@ class BudgetTestCase(IhatemoneyTestCase):
}, },
) )
project = models.Project.query.get("raclette") project = self.get_project("raclette")
for bill in project.get_bills_unordered(): for bill in project.get_bills_unordered():
assert bill.converted_amount == self.converter.exchange_currency( assert bill.converted_amount == self.converter.exchange_currency(

View file

@ -97,6 +97,9 @@ class BaseTestCase(TestCase):
models.db.session.add(project) models.db.session.add(project)
models.db.session.commit() models.db.session.commit()
def get_project(self, id) -> models.Project:
return models.Project.query.get(id)
class IhatemoneyTestCase(BaseTestCase): class IhatemoneyTestCase(BaseTestCase):
TESTING = True TESTING = True

View file

@ -614,14 +614,14 @@ class HistoryTestCase(IhatemoneyTestCase):
models.db.session.add(b2) models.db.session.add(b2)
models.db.session.commit() models.db.session.commit()
history_list = history.get_history(models.Project.query.get("demo")) history_list = history.get_history(self.get_project("demo"))
self.assertEqual(len(history_list), 5) self.assertEqual(len(history_list), 5)
# Change just the amount # Change just the amount
b1.amount = 5 b1.amount = 5
models.db.session.commit() models.db.session.commit()
history_list = history.get_history(models.Project.query.get("demo")) history_list = history.get_history(self.get_project("demo"))
for entry in history_list: for entry in history_list:
if "prop_changed" in entry: if "prop_changed" in entry:
self.assertNotIn("owers", entry["prop_changed"]) self.assertNotIn("owers", entry["prop_changed"])

View file

@ -99,7 +99,7 @@ class CommandTestCase(BaseTestCase):
def test_demo_project_deletion(self): def test_demo_project_deletion(self):
self.create_project("demo") self.create_project("demo")
self.assertEqual(models.Project.query.get("demo").name, "demo") self.assertEqual(self.get_project("demo").name, "demo")
runner = self.app.test_cli_runner() runner = self.app.test_cli_runner()
runner.invoke(delete_project, "demo") runner.invoke(delete_project, "demo")
@ -153,7 +153,7 @@ class ModelsTestCase(IhatemoneyTestCase):
}, },
) )
project = models.Project.query.get_by_name(name="raclette") project = self.get_project_by_name(name="raclette")
zorglub = models.Person.query.get_by_name(name="zorglub", project=project) zorglub = models.Person.query.get_by_name(name="zorglub", project=project)
zorglub_bills = models.Bill.query.options( zorglub_bills = models.Bill.query.options(
orm.subqueryload(models.Bill.owers) orm.subqueryload(models.Bill.owers)