aboutsummaryrefslogtreecommitdiff
path: root/ihatemoney
diff options
context:
space:
mode:
authorJocelynDelalande <JocelynDelalande@users.noreply.github.com>2017-12-29 18:07:39 +0100
committerAlexis Metaireau <alexis@notmyidea.org>2017-12-29 18:07:39 +0100
commitc002cdbf9477f6db6f8c5c3db912957601c290a5 (patch)
tree12f3df8f30b07917b1131e252dc5653121a2e304 /ihatemoney
parent40e5a833a17d932b45f018980d1c558ca5a68e26 (diff)
downloadihatemoney-mirror-c002cdbf9477f6db6f8c5c3db912957601c290a5.zip
ihatemoney-mirror-c002cdbf9477f6db6f8c5c3db912957601c290a5.tar.gz
ihatemoney-mirror-c002cdbf9477f6db6f8c5c3db912957601c290a5.tar.bz2
Allow to disable/enable member via API (#301)
Disable was already (kind-of) possible via API via DELETE, but not re-enabling. Kudos to @almet for helping me fixing that damn BooleanField :-)
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",