aboutsummaryrefslogtreecommitdiff
path: root/budget/tests.py
diff options
context:
space:
mode:
authorAlexis Metaireau <alexis@notmyidea.org>2016-06-17 10:06:19 +0200
committerGitHub <noreply@github.com>2016-06-17 10:06:19 +0200
commit5084cafe6bcd266bd1e676fc6921a7dba3c48a57 (patch)
tree7c2d5f915a5f37d086e31b61cb71fd20dbf4b385 /budget/tests.py
parent789196721584ca4800e4236eee36955e78761346 (diff)
parentc49a355eb082cff208806f785d52567ddd043c03 (diff)
downloadihatemoney-mirror-5084cafe6bcd266bd1e676fc6921a7dba3c48a57.zip
ihatemoney-mirror-5084cafe6bcd266bd1e676fc6921a7dba3c48a57.tar.gz
ihatemoney-mirror-5084cafe6bcd266bd1e676fc6921a7dba3c48a57.tar.bz2
Merge pull request #131 from JocelynDelalande/members-weights
Added Members weights handling
Diffstat (limited to 'budget/tests.py')
-rw-r--r--budget/tests.py118
1 files changed, 112 insertions, 6 deletions
diff --git a/budget/tests.py b/budget/tests.py
index 760ffc0..82465f9 100644
--- a/budget/tests.py
+++ b/budget/tests.py
@@ -416,6 +416,52 @@ class BudgetTestCase(TestCase):
bill = models.Bill.query.filter(models.Bill.date == '2011-08-01')[0]
self.assertEqual(bill.amount, 25.02)
+ def test_weighted_balance(self):
+ self.post_project("raclette")
+
+ # add two persons
+ self.app.post("/raclette/members/add", data={'name': 'alexis'})
+ self.app.post("/raclette/members/add", data={'name': 'freddy familly', 'weight': 4})
+
+ members_ids = [m.id for m in
+ models.Project.query.get("raclette").members]
+
+ # test balance
+ self.app.post("/raclette/add", data={
+ 'date': '2011-08-10',
+ 'what': u'fromage à raclette',
+ 'payer': members_ids[0],
+ 'payed_for': members_ids,
+ 'amount': '10',
+ })
+
+ self.app.post("/raclette/add", data={
+ 'date': '2011-08-10',
+ 'what': u'pommes de terre',
+ 'payer': members_ids[1],
+ 'payed_for': members_ids,
+ 'amount': '10',
+ })
+
+ balance = models.Project.query.get("raclette").balance
+ self.assertEqual(set(balance.values()), set([6, -6]))
+
+ def test_weighted_members_list(self):
+ self.post_project("raclette")
+
+ # add two persons
+ self.app.post("/raclette/members/add", data={'name': 'alexis'})
+ self.app.post("/raclette/members/add", data={'name': 'tata', 'weight': 1})
+
+ resp = self.app.get("/raclette/")
+ self.assertIn('extra-info', resp.data)
+
+ self.app.post("/raclette/members/add", data={'name': 'freddy familly', 'weight': 4})
+
+ resp = self.app.get("/raclette/")
+ self.assertNotIn('extra-info', resp.data)
+
+
def test_rounding(self):
self.post_project("raclette")
@@ -553,9 +599,10 @@ class APITestCase(TestCase):
'contact_email': contact
})
- def api_add_member(self, project, name):
+ def api_add_member(self, project, name, weight=1):
self.app.post("/api/projects/%s/members" % project,
- data={"name": name}, headers=self.get_auth(project))
+ data={"name": name, "weight": weight},
+ headers=self.get_auth(project))
def get_auth(self, username, password=None):
password = password or username
@@ -762,8 +809,8 @@ class APITestCase(TestCase):
"what": "fromage",
"payer_id": 1,
"owers": [
- {"activated": True, "id": 1, "name": "alexis"},
- {"activated": True, "id": 2, "name": "fred"}],
+ {"activated": True, "id": 1, "name": "alexis", "weight": 1},
+ {"activated": True, "id": 2, "name": "fred", "weight": 1}],
"amount": 25.0,
"date": "2011-08-10",
"id": 1}
@@ -805,8 +852,8 @@ class APITestCase(TestCase):
"what": "beer",
"payer_id": 2,
"owers": [
- {"activated": True, "id": 1, "name": "alexis"},
- {"activated": True, "id": 2, "name": "fred"}],
+ {"activated": True, "id": 1, "name": "alexis", "weight": 1},
+ {"activated": True, "id": 2, "name": "fred", "weight": 1}],
"amount": 25.0,
"date": "2011-09-10",
"id": 1}
@@ -823,6 +870,65 @@ class APITestCase(TestCase):
headers=self.get_auth("raclette"))
self.assertStatus(404, req)
+ def test_weighted_bills(self):
+ # create a project
+ self.api_create("raclette")
+
+ # add members
+ self.api_add_member("raclette", "alexis")
+ self.api_add_member("raclette", "freddy familly", 4)
+ self.api_add_member("raclette", "arnaud")
+
+ # add a bill
+ req = self.app.post("/api/projects/raclette/bills", data={
+ 'date': '2011-08-10',
+ 'what': "fromage",
+ 'payer': "1",
+ 'payed_for': ["1", "2"],
+ 'amount': '25',
+ }, headers=self.get_auth("raclette"))
+
+ # get this bill details
+ req = self.app.get("/api/projects/raclette/bills/1",
+ headers=self.get_auth("raclette"))
+
+ # compare with the added info
+ self.assertStatus(200, req)
+ expected = {
+ "what": "fromage",
+ "payer_id": 1,
+ "owers": [
+ {"activated": True, "id": 1, "name": "alexis", "weight": 1},
+ {"activated": True, "id": 2, "name": "freddy familly", "weight": 4}],
+ "amount": 25.0,
+ "date": "2011-08-10",
+ "id": 1}
+ self.assertDictEqual(expected, json.loads(req.data))
+
+ # getting it should return a 404
+ req = self.app.get("/api/projects/raclette",
+ headers=self.get_auth("raclette"))
+
+ expected = {
+ "active_members": [
+ {"activated": True, "id": 1, "name": "alexis", "weight": 1.0},
+ {"activated": True, "id": 2, "name": "freddy familly", "weight": 4.0},
+ {"activated": True, "id": 3, "name": "arnaud", "weight": 1.0}
+ ],
+ "balance": {"1": 20.0, "2": -20.0, "3": 0},
+ "contact_email": "raclette@notmyidea.org",
+ "id": "raclette",
+
+ "members": [
+ {"activated": True, "id": 1, "name": "alexis", "weight": 1.0},
+ {"activated": True, "id": 2, "name": "freddy familly", "weight": 4.0},
+ {"activated": True, "id": 3, "name": "arnaud", "weight": 1.0}
+ ],
+ "name": "raclette",
+ "password": "raclette"}
+
+ self.assertStatus(200, req)
+ self.assertEqual(expected, json.loads(req.data))
class ServerTestCase(APITestCase):
def setUp(self):