mirror of
https://github.com/spiral-project/ihatemoney.git
synced 2025-04-28 17:32:38 +02:00
Make the tests work with the model
This commit is contained in:
parent
a1d52ff910
commit
50977078d0
1 changed files with 174 additions and 22 deletions
|
@ -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):
|
||||||
|
|
Loading…
Reference in a new issue