mirror of
https://github.com/spiral-project/ihatemoney.git
synced 2025-04-28 17:32:38 +02:00
Add statistics support to API
This commit is contained in:
parent
036cd05e57
commit
b95ea7f4e6
4 changed files with 69 additions and 0 deletions
|
@ -17,6 +17,11 @@ Fixed
|
|||
- Fix the "IOError" crash when running `ihatemoney generate-config` (#308)
|
||||
- Made the left-hand sidebar scrollable (#318)
|
||||
|
||||
Added
|
||||
=====
|
||||
|
||||
- Statistics API (#343)
|
||||
|
||||
|
||||
2.0 (2017-12-27)
|
||||
----------------
|
||||
|
|
22
docs/api.rst
22
docs/api.rst
|
@ -164,3 +164,25 @@ And you can of course `DELETE` them at `/api/projects/<id>/bills/<bill-id>`::
|
|||
$ curl --basic -u demo:demo -X DELETE\
|
||||
https://ihatemoney.org/api/projects/demo/bills/80\
|
||||
"OK"
|
||||
|
||||
|
||||
Statistics
|
||||
----------
|
||||
|
||||
You can get some project stats with a `GET` on `/api/projects/<id>/statistics`::
|
||||
|
||||
$ curl --basic -u demo:demo https://ihatemoney.org/api/projects/demo/statistics
|
||||
[
|
||||
{
|
||||
"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
|
||||
}
|
||||
]
|
||||
|
|
|
@ -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>")
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in a new issue