mirror of
https://github.com/spiral-project/ihatemoney.git
synced 2025-05-02 11:12:23 +02:00
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 :-)
This commit is contained in:
parent
40e5a833a1
commit
c002cdbf94
2 changed files with 38 additions and 1 deletions
|
@ -1,6 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from flask import Blueprint, request
|
from flask import Blueprint, request
|
||||||
from flask_rest import RESTResource, need_auth
|
from flask_rest import RESTResource, need_auth
|
||||||
|
from wtforms.fields.core import BooleanField
|
||||||
|
|
||||||
from ihatemoney.models import db, Project, Person, Bill
|
from ihatemoney.models import db, Project, Person, Bill
|
||||||
from ihatemoney.forms import (ProjectForm, EditProjectForm, MemberForm,
|
from ihatemoney.forms import (ProjectForm, EditProjectForm, MemberForm,
|
||||||
|
@ -58,6 +59,18 @@ class ProjectHandler(object):
|
||||||
return 400, form.errors
|
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):
|
class MemberHandler(object):
|
||||||
|
|
||||||
def get(self, project, member_id):
|
def get(self, project, member_id):
|
||||||
|
@ -79,7 +92,7 @@ class MemberHandler(object):
|
||||||
return 400, form.errors
|
return 400, form.errors
|
||||||
|
|
||||||
def update(self, project, member_id):
|
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():
|
if form.validate():
|
||||||
member = Person.query.get(member_id, project)
|
member = Person.query.get(member_id, project)
|
||||||
form.save(project, member)
|
form.save(project, member)
|
||||||
|
|
|
@ -1182,6 +1182,30 @@ class APITestCase(IhatemoneyTestCase):
|
||||||
|
|
||||||
self.assertStatus(200, req)
|
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
|
# delete a member
|
||||||
|
|
||||||
req = self.client.delete("/api/projects/raclette/members/1",
|
req = self.client.delete("/api/projects/raclette/members/1",
|
||||||
|
|
Loading…
Reference in a new issue