aboutsummaryrefslogtreecommitdiff
path: root/ihatemoney
diff options
context:
space:
mode:
Diffstat (limited to 'ihatemoney')
-rw-r--r--ihatemoney/api.py15
-rw-r--r--ihatemoney/tests/tests.py24
2 files changed, 38 insertions, 1 deletions
diff --git a/ihatemoney/api.py b/ihatemoney/api.py
index 84f454e..827202c 100644
--- a/ihatemoney/api.py
+++ b/ihatemoney/api.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from flask import Blueprint, request
from flask_rest import RESTResource, need_auth
+from wtforms.fields.core import BooleanField
from ihatemoney.models import db, Project, Person, Bill
from ihatemoney.forms import (ProjectForm, EditProjectForm, MemberForm,
@@ -58,6 +59,18 @@ class ProjectHandler(object):
return 400, form.errors
+class APIMemberForm(MemberForm):
+ """ Member is not disablable via a Form.
+
+ But we want Member.enabled to be togglable via the API.
+ """
+ activated = BooleanField(false_values=('false', '', 'False'))
+
+ def save(self, project, person):
+ person.activated = self.activated.data
+ return super(APIMemberForm, self).save(project, person)
+
+
class MemberHandler(object):
def get(self, project, member_id):
@@ -79,7 +92,7 @@ class MemberHandler(object):
return 400, form.errors
def update(self, project, member_id):
- form = MemberForm(project, meta={'csrf': False}, edit=True)
+ form = APIMemberForm(project, meta={'csrf': False}, edit=True)
if form.validate():
member = Person.query.get(member_id, project)
form.save(project, member)
diff --git a/ihatemoney/tests/tests.py b/ihatemoney/tests/tests.py
index 25ca084..de53c58 100644
--- a/ihatemoney/tests/tests.py
+++ b/ihatemoney/tests/tests.py
@@ -1182,6 +1182,30 @@ class APITestCase(IhatemoneyTestCase):
self.assertStatus(200, req)
+ # de-activate the user
+ req = self.client.put("/api/projects/raclette/members/1", data={
+ "name": "Fred",
+ "activated": False,
+ }, headers=self.get_auth("raclette"))
+ self.assertStatus(200, req)
+
+ req = self.client.get("/api/projects/raclette/members/1",
+ headers=self.get_auth("raclette"))
+ self.assertStatus(200, req)
+ self.assertEqual(False, json.loads(req.data.decode('utf-8'))["activated"])
+
+ # re-activate the user
+
+ req = self.client.put("/api/projects/raclette/members/1", data={
+ "name": "Fred",
+ "activated": True,
+ }, headers=self.get_auth("raclette"))
+
+ req = self.client.get("/api/projects/raclette/members/1",
+ headers=self.get_auth("raclette"))
+ self.assertStatus(200, req)
+ self.assertEqual(True, json.loads(req.data.decode('utf-8'))["activated"])
+
# delete a member
req = self.client.delete("/api/projects/raclette/members/1",