Make the tests work with the model

This commit is contained in:
MilouH 2025-04-03 10:58:16 +02:00
parent a1d52ff910
commit 50977078d0

View file

@ -294,16 +294,15 @@ class TestModels(IhatemoneyTestCase):
class TestBillFiltering(IhatemoneyTestCase): class TestBillFiltering(IhatemoneyTestCase):
def setUp(self): def test_filter_by_payer(self):
"""Set up a test project with members and bills.""" """Test filtering by payer ID"""
super().setUp()
self.post_project("raclette") self.post_project("raclette")
# Add members # add members
self.client.post("/raclette/members/add", data={"name": "Alice"}) self.client.post("/raclette/members/add", data={"name": "Alice"})
self.client.post("/raclette/members/add", data={"name": "Bob"}) self.client.post("/raclette/members/add", data={"name": "Bob"})
# Create bills # create bills
self.client.post( self.client.post(
"/raclette/add", "/raclette/add",
data={ data={
@ -327,35 +326,188 @@ class TestBillFiltering(IhatemoneyTestCase):
}, },
) )
def test_filter_by_payer(self): # alice paid for cheese
"""Test filtering by payer ID""" bills = models.Bill.query.filter(models.Bill.payer_id == 1).all()
response = self.client.get("/raclette/?payer=1", follow_redirects=True) assert len(bills) == 1
assert b"Cheese" in response.data # Bill paid by Alice assert bills[0].what == "Cheese"
assert b"Wine" not in response.data # Bill paid by Bob
# bob paid for wine
bills = models.Bill.query.filter(models.Bill.payer_id == 2).all()
assert len(bills) == 1
assert bills[0].what == "Wine"
def test_filter_by_amount_range(self): def test_filter_by_amount_range(self):
"""Test filtering by amount range""" """Test filtering by amount range"""
response = self.client.get("/raclette/?amount_min=20", follow_redirects=True) self.post_project("raclette")
assert b"Wine" in response.data # Wine is 25
assert b"Cheese" not in response.data # Cheese is 15 # add members
self.client.post("/raclette/members/add", data={"name": "Alice"})
self.client.post("/raclette/members/add", data={"name": "Bob"})
# create bills
self.client.post(
"/raclette/add",
data={
"date": "2024-03-01",
"what": "Cheese",
"payer": 1,
"payed_for": [1, 2],
"bill_type": "Expense",
"amount": "15.0",
},
)
self.client.post(
"/raclette/add",
data={
"date": "2024-03-05",
"what": "Wine",
"payer": 2,
"payed_for": [1, 2],
"bill_type": "Expense",
"amount": "25.0",
},
)
# only wine is more than 20
bills = models.Bill.query.filter(models.Bill.amount >= 20).all()
assert len(bills) == 1
assert bills[0].what == "Wine"
# only cheese is less than 20
bills = models.Bill.query.filter(models.Bill.amount <= 20).all()
assert len(bills) == 1
assert bills[0].what == "Cheese"
def test_filter_by_date_range(self): def test_filter_by_date_range(self):
"""Test filtering by date range""" """Test filtering by date range"""
response = self.client.get("/raclette/?date_from=2024-03-02", follow_redirects=True) self.post_project("raclette")
assert b"Wine" in response.data # Wine is on March 5
assert b"Cheese" not in response.data # Cheese is on March 1 # add members
self.client.post("/raclette/members/add", data={"name": "Alice"})
self.client.post("/raclette/members/add", data={"name": "Bob"})
# create bills
self.client.post(
"/raclette/add",
data={
"date": "2024-03-01",
"what": "Cheese",
"payer": 1,
"payed_for": [1, 2],
"bill_type": "Expense",
"amount": "15.0",
},
)
self.client.post(
"/raclette/add",
data={
"date": "2024-03-05",
"what": "Wine",
"payer": 2,
"payed_for": [1, 2],
"bill_type": "Expense",
"amount": "25.0",
},
)
# wine is March 5th
bills = models.Bill.query.filter(models.Bill.date >= "2024-03-02").all()
assert len(bills) == 1
assert bills[0].what == "Wine"
# cheese is March 1st
bills = models.Bill.query.filter(models.Bill.date <= "2024-03-04").all()
assert len(bills) == 1
assert bills[0].what == "Cheese"
def test_filter_by_search_term(self): def test_filter_by_search_term(self):
"""Test filtering by search query""" """Test filtering by search query"""
response = self.client.get("/raclette/?search=Cheese", follow_redirects=True) self.post_project("raclette")
assert b"Cheese" in response.data
assert b"Wine" not in response.data # add members
self.client.post("/raclette/members/add", data={"name": "Alice"})
self.client.post("/raclette/members/add", data={"name": "Bob"})
# create bills
self.client.post(
"/raclette/add",
data={
"date": "2024-03-01",
"what": "Cheese",
"payer": 1,
"payed_for": [1, 2],
"bill_type": "Expense",
"amount": "15.0",
},
)
self.client.post(
"/raclette/add",
data={
"date": "2024-03-05",
"what": "Wine",
"payer": 2,
"payed_for": [1, 2],
"bill_type": "Expense",
"amount": "25.0",
},
)
bills = models.Bill.query.filter(models.Bill.what.ilike("%Cheese%")).all()
assert len(bills) == 1
assert bills[0].what == "Cheese"
bills = models.Bill.query.filter(models.Bill.what.ilike("%Che%")).all()
assert len(bills) == 1
assert bills[0].what == "Cheese"
bills = models.Bill.query.filter(models.Bill.what.ilike("%Pizza%")).all()
assert len(bills) == 0
def test_filter_combination(self): def test_filter_combination(self):
"""Test filtering by multiple criteria""" """Test filtering by multiple criteria"""
response = self.client.get("/raclette/?payer=1&amount_max=20", follow_redirects=True)
assert b"Cheese" in response.data # Cheese fits both conditions self.post_project("raclette")
assert b"Wine" not in response.data # Wrong payer & too expensive
# add members
self.client.post("/raclette/members/add", data={"name": "Alice"})
self.client.post("/raclette/members/add", data={"name": "Bob"})
# create bills
self.client.post(
"/raclette/add",
data={
"date": "2024-03-01",
"what": "Cheese",
"payer": 1,
"payed_for": [1, 2],
"bill_type": "Expense",
"amount": "15.0",
},
)
self.client.post(
"/raclette/add",
data={
"date": "2024-03-05",
"what": "Wine",
"payer": 2,
"payed_for": [1, 2],
"bill_type": "Expense",
"amount": "25.0",
},
)
# only alice's cheese should match
bills = models.Bill.query.filter(
models.Bill.payer_id == 1, models.Bill.amount <= 20
).all()
assert len(bills) == 1
assert bills[0].what == "Cheese"
# no bills match
bills = models.Bill.query.filter(
models.Bill.payer_id == 2, models.Bill.amount <= 20
).all()
assert len(bills) == 0
class TestEmailFailure(IhatemoneyTestCase): class TestEmailFailure(IhatemoneyTestCase):