aboutsummaryrefslogtreecommitdiff
path: root/ihatemoney
diff options
context:
space:
mode:
Diffstat (limited to 'ihatemoney')
-rw-r--r--ihatemoney/api.py8
-rw-r--r--ihatemoney/tests/tests.py34
2 files changed, 42 insertions, 0 deletions
diff --git a/ihatemoney/api.py b/ihatemoney/api.py
index 31ed06c..6068cf7 100644
--- a/ihatemoney/api.py
+++ b/ihatemoney/api.py
@@ -65,6 +65,13 @@ class ProjectHandler(Resource):
return form.errors, 400
+class ProjectStatsHandler(Resource):
+ method_decorators = [need_auth]
+
+ def get(self, project):
+ return project.members_stats
+
+
class APIMemberForm(MemberForm):
""" Member is not disablable via a Form.
@@ -163,6 +170,7 @@ class BillHandler(Resource):
restful_api.add_resource(ProjectsHandler, '/projects')
restful_api.add_resource(ProjectHandler, '/projects/<string:project_id>')
restful_api.add_resource(MembersHandler, "/projects/<string:project_id>/members")
+restful_api.add_resource(ProjectStatsHandler, "/projects/<string:project_id>/statistics")
restful_api.add_resource(MemberHandler, "/projects/<string:project_id>/members/<int:member_id>")
restful_api.add_resource(BillsHandler, "/projects/<string:project_id>/bills")
restful_api.add_resource(BillHandler, "/projects/<string:project_id>/bills/<int:bill_id>")
diff --git a/ihatemoney/tests/tests.py b/ihatemoney/tests/tests.py
index 3582032..3797f09 100644
--- a/ihatemoney/tests/tests.py
+++ b/ihatemoney/tests/tests.py
@@ -1325,6 +1325,40 @@ class APITestCase(IhatemoneyTestCase):
headers=self.get_auth("raclette"))
self.assertStatus(404, req)
+ def test_statistics(self):
+ # create a project
+ self.api_create("raclette")
+
+ # add members
+ self.api_add_member("raclette", "alexis")
+ self.api_add_member("raclette", "fred")
+
+ # add a bill
+ req = self.client.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 the list of bills (should be empty)
+ req = self.client.get("/api/projects/raclette/statistics",
+ headers=self.get_auth("raclette"))
+ self.assertStatus(200, req)
+ self.assertEqual([
+ {'balance': 12.5,
+ 'member': {'activated': True, 'id': 1,
+ 'name': 'alexis', 'weight': 1.0},
+ 'paid': 25.0,
+ 'spent': 12.5},
+ {'balance': -12.5,
+ 'member': {'activated': True, 'id': 2,
+ 'name': 'fred', 'weight': 1.0},
+ 'paid': 0,
+ 'spent': 12.5}],
+ json.loads(req.data.decode('utf-8')))
+
def test_username_xss(self):
# create a project
# self.api_create("raclette")