Commit 16603cc2 by Matt Drayer Committed by Jonathan Piacenti

mattdrayer/api-organizationsusers: Added support for adding users to an organization

parent d2154763
""" Django REST Framework Serializers """
from django.contrib.auth.models import User
from rest_framework import serializers
from api_manager.models import Organization
class UserSerializer(serializers.HyperlinkedModelSerializer):
""" Serializer for model interactions """
class Meta:
""" Meta class for defining additional serializer characteristics """
model = User
fields = ('id', 'url', 'username', 'email')
class OrganizationSerializer(serializers.ModelSerializer):
""" Serializer for Organization model interactions """
url = serializers.HyperlinkedIdentityField(view_name='organization-detail')
......
......@@ -7,6 +7,7 @@ Run these tests @ Devstack:
import json
import uuid
from django.contrib.auth.models import User
from django.core.cache import cache
from django.test import TestCase, Client
from django.test.utils import override_settings
......@@ -40,6 +41,13 @@ class OrganizationsApiTests(TestCase):
self.test_organization_contact_email = 'john@test.org'
self.test_organization_contact_phone = '+1 332 232 24234'
self.test_user_email = str(uuid.uuid4())
self.test_user_username = str(uuid.uuid4())
self.test_user = User.objects.create(
email=self.test_user_email,
username=self.test_user_username
)
self.client = SecureClient()
cache.clear()
......@@ -189,3 +197,59 @@ class OrganizationsApiTests(TestCase):
response = self.do_post(self.test_organizations_uri, data)
self.assertEqual(response.status_code, 201)
self.assertEqual(len(response.data['groups']), len(groups))
def test_organizations_users_post(self):
data = {
'name': self.test_organization_name,
'display_name': self.test_organization_display_name,
'contact_name': self.test_organization_contact_name,
'contact_email': self.test_organization_contact_email,
'contact_phone': self.test_organization_contact_phone
}
response = self.do_post(self.test_organizations_uri, data)
self.assertEqual(response.status_code, 201)
test_uri = '{}{}/'.format(self.test_organizations_uri, str(response.data['id']))
users_uri = '{}users/'.format(test_uri)
data = {"id": self.test_user.id}
response = self.do_post(users_uri, data)
self.assertEqual(response.status_code, 201)
response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['users'][0], self.test_user.id)
def test_organizations_users_post_invalid_user(self):
data = {
'name': self.test_organization_name,
'display_name': self.test_organization_display_name,
'contact_name': self.test_organization_contact_name,
'contact_email': self.test_organization_contact_email,
'contact_phone': self.test_organization_contact_phone
}
response = self.do_post(self.test_organizations_uri, data)
self.assertEqual(response.status_code, 201)
test_uri = '{}{}/'.format(self.test_organizations_uri, str(response.data['id']))
users_uri = '{}users/'.format(test_uri)
data = {"id": 123456}
response = self.do_post(users_uri, data)
self.assertEqual(response.status_code, 400)
def test_organizations_users_get(self):
data = {
'name': self.test_organization_name,
'display_name': self.test_organization_display_name,
'contact_name': self.test_organization_contact_name,
'contact_email': self.test_organization_contact_email,
'contact_phone': self.test_organization_contact_phone
}
response = self.do_post(self.test_organizations_uri, data)
self.assertEqual(response.status_code, 201)
test_uri = '{}{}/'.format(self.test_organizations_uri, str(response.data['id']))
users_uri = '{}users/'.format(test_uri)
data = {"id": self.test_user.id}
response = self.do_post(users_uri, data)
self.assertEqual(response.status_code, 201)
response = self.do_get(users_uri)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data[0]['id'], self.test_user.id)
self.assertEqual(response.data[0]['username'], self.test_user.username)
self.assertEqual(response.data[0]['email'], self.test_user.email)
""" ORGANIZATIONS API VIEWS """
from rest_framework import viewsets
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from rest_framework import status, viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from api_manager.models import Organization
from .serializers import OrganizationSerializer
from .serializers import OrganizationSerializer, UserSerializer
class OrganizationsViewSet(viewsets.ModelViewSet):
......@@ -12,3 +17,28 @@ class OrganizationsViewSet(viewsets.ModelViewSet):
"""
serializer_class = OrganizationSerializer
model = Organization
@action(methods=['get', 'post'])
def users(self, request, pk):
"""
Add a User to an Organization
"""
if request.method == 'GET':
users = User.objects.filter(organizations=pk)
response_data = []
if users:
for user in users:
serializer = UserSerializer(user)
response_data.append(serializer.data)
return Response(response_data, status=status.HTTP_200_OK)
else:
user_id = request.DATA.get('id')
try:
user = User.objects.get(id=user_id)
except ObjectDoesNotExist:
message = 'User {} does not exist'.format(user_id)
return Response({"detail": message}, status.HTTP_400_BAD_REQUEST)
organization = self.get_object()
organization.users.add(user)
organization.save()
return Response({}, status=status.HTTP_201_CREATED)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment