diff --git a/new_rest_api/tests.py b/new_rest_api/tests.py index 793663471a280208dde202acef8d2668b52533f6..76e4f1139d1cbf89550bd9d99ea5e21e4f88ca4c 100644 --- a/new_rest_api/tests.py +++ b/new_rest_api/tests.py @@ -1,13 +1,12 @@ # Create your tests here. import json -from rest_framework.test import APIRequestFactory, APITestCase, URLPatternsTestCase +from rest_framework.test import APITestCase, URLPatternsTestCase from rest_framework import status -from django.test import TestCase, SimpleTestCase, Client from django.urls import include, path, reverse +from django.utils.http import urlsafe_base64_encode +from django.utils.encoding import force_bytes from registrasi.models import BisaGoUser -from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode from .tokens import account_activation_token -from django.utils.encoding import force_bytes, force_text class UserTests(APITestCase): urlpatterns = [ @@ -18,8 +17,13 @@ class UserTests(APITestCase): url = reverse('create-user') data = {'name': 'Astraykai', 'email':'astraykai@gmail.com', + 'password':'chingchenghanji', 'phone_number':'089892218567', - 'password':'chingchenghanji'} + 'tanggal_lahir':'1990-05-05', + 'jenis_kelamin':'Laki-laki', + 'disabilitas':'', + 'pekerjaan':'Mahasiswa', + 'alamat':'Alamat Palsu'} self.client.post(url, data) def test_create_user(self): @@ -29,8 +33,13 @@ class UserTests(APITestCase): url = reverse('create-user') data = {'name': 'Astray', 'email':'astrayyahoo@gmail.com', - 'phone_number':'08989221856', 'password':'chingchenghanji', + 'phone_number':'08989221856', + 'tanggal_lahir':'1990-05-05', + 'jenis_kelamin':'Laki-laki', + 'disabilitas':'Yuhu', + 'pekerjaan':'Mahasiswa', + 'alamat':'Alamat Palsu', 'is_active': True} response = self.client.post(url, data) self.assertEqual(response.status_code, status.HTTP_201_CREATED) @@ -42,14 +51,14 @@ class UserTests(APITestCase): response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) json_test = json.loads(response.content) - self.assertEqual(len(json_test), 4) #JSON Attribute + self.assertEqual(len(json_test), 10) #JSON Attribute def test_account_details(self): url = reverse('user-details', kwargs={'email':'astraykai@gmail.com'}) response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) json_test = json.loads(response.content) - self.assertEqual(len(json_test), 4) #JSON Attribute + self.assertEqual(len(json_test), 10) #JSON Attribute def test_account_list(self): url = reverse('user-list') @@ -60,21 +69,25 @@ class UserTests(APITestCase): def test_incomplete_create_user(self): url = reverse('create-user') - data = {'name': 'Astray', - 'email':'astrayyahoo@gmail.com', + data = {'email':'astrayyahoo@gmail.com', 'password':'chingchenghanji', 'is_active': True} response = self.client.post(url, data) self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) json_response = json.loads(response.content) - self.assertEqual(json_response['response'], 'bad request. \'phone_number\' key needed') + self.assertEqual(json_response.get('response'), 'bad request. \'name\' key needed') def test_user_already_exist(self): url = reverse('create-user') data = {'name': 'Astraykai', 'email':'astraykai@gmail.com', - 'phone_number':'089892218567', 'password':'chingchenghanji', + 'phone_number':'089892218567', + 'tanggal_lahir':'1990-05-05', + 'jenis_kelamin':'Laki-laki', + 'disabilitas':'', + 'pekerjaan':'Mahasiswa', + 'alamat':'Alamat Palsu', 'is_active': True} response = self.client.post(url, data) self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) @@ -85,12 +98,17 @@ class UserTests(APITestCase): url = reverse('user-list') data = {'name': 'Astraykai', 'email':'astraykai@gmail.com', - 'phone_number':'089892218567', 'password':'chingchenghanji', + 'phone_number':'089892218567', + 'tanggal_lahir':'1990-05-05', + 'jenis_kelamin':'Laki-laki', + 'disabilitas':'', + 'pekerjaan':'Mahasiswa', + 'alamat':'Alamat Palsu', 'is_active': True} response = self.client.post(url, data) self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED) - json_response = json.loads(response.content) + json.loads(response.content) def test_account_login(self): pass @@ -111,6 +129,31 @@ class UserTests(APITestCase): json_response = json.loads(response.content) self.assertEqual(json_response['response'], 'User activated') + def test_update_existing_user(self): + url = reverse('update-user') + data = {'email':'astraykai@gmail.com', + 'phone_number':'089892218567', + 'tanggal_lahir':'1990-05-05', + 'jenis_kelamin':'Laki-laki', + 'disabilitas':'', + 'pekerjaan':'Mahasiswa', + 'alamat':'Alamat Palsu'} + response = self.client.post(url, data) + json_response = json.loads(response.content) + self.assertEqual(json_response['response'], 'User updated') + + def test_update_nonexistince_user(self): + url = reverse('update-user') + data = {'email':'astraykaii@gmail.com', + 'phone_number':'089892218567', + 'tanggal_lahir':'1990-05-05', + 'jenis_kelamin':'Laki-laki', + 'disabilitas':'', + 'pekerjaan':'Mahasiswa', + 'alamat':'Alamat Palsu'} + response = self.client.post(url, data) + json_response = json.loads(response.content) + self.assertEqual(json_response['response'], 'User not found') class InfoTests(APITestCase, URLPatternsTestCase): pass diff --git a/new_rest_api/urls.py b/new_rest_api/urls.py index 54da0baff1b845861f60f4dce71932c242cb4760..f6456d2a95ae27022c9e7ed111e1243b77dc992a 100644 --- a/new_rest_api/urls.py +++ b/new_rest_api/urls.py @@ -1,16 +1,14 @@ -from django.contrib import admin from django.urls import path -from rest_framework import routers -from rest_framework.authtoken import views import new_rest_api.views -from django.views.generic import TemplateView urlpatterns = [ path('user-list/', new_rest_api.views.user_list, name='user-list'), path('user-detail/<str:email>', new_rest_api.views.user_details, name='user-details'), - path('user-detail/?email=<str:email>', new_rest_api.views.user_details, name='user-details-get'), + path('user-detail/?email=<str:email>', + new_rest_api.views.user_details, name='user-details-get'), + path('update-user/', new_rest_api.views.update_user, name='update-user'), path('register/', new_rest_api.views.register_user, name='create-user'), path(r'^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', - new_rest_api.views.activate, name='activate'), + new_rest_api.views.activate, name='activate'), ] diff --git a/new_rest_api/views.py b/new_rest_api/views.py index ea2077f740cdb46a79a28ab34b0dc4305999a9a0..494e86c3612c3302b2b46fddd3f10fd796ccc2b3 100644 --- a/new_rest_api/views.py +++ b/new_rest_api/views.py @@ -4,29 +4,17 @@ from django.contrib.auth.models import User from django.http import JsonResponse, QueryDict from django.views.decorators.csrf import csrf_exempt -from allauth.socialaccount.providers.oauth2.client import OAuth2Client - -from rest_auth.registration.serializers import SocialLoginSerializer -from rest_auth.registration.views import SocialLoginView -from rest_framework import viewsets -from rest_framework.renderers import JSONRenderer -from rest_framework.parsers import JSONParser -from rest_framework.permissions import IsAuthenticated -from rest_framework.response import Response from rest_framework.decorators import api_view, permission_classes, authentication_classes -from rest_framework.utils.serializer_helpers import ReturnDict - -from registrasi.models import BisaGoUser -from registrasi.serializers import BisaGoUserSerializers from django.db.utils import IntegrityError -from django.contrib.sites.models import Site from django.utils.encoding import force_bytes, force_text from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode from django.template.loader import render_to_string -from .tokens import account_activation_token from django.core.mail import EmailMessage from django.core.exceptions import ObjectDoesNotExist +from registrasi.models import BisaGoUser +from registrasi.serializers import BisaGoUserSerializers +from .tokens import account_activation_token def request_error_message(request_kind): return "get {} request instead".format(request_kind) @@ -49,7 +37,8 @@ def user_list(request): "phone_number": user.phone_number}) return JsonResponse(json_return, safe=False, status=status.OK) else: - return JsonResponse({'response' : request_error_message("get")}, status=status.METHOD_NOT_ALLOWED) + return JsonResponse({'response' : request_error_message("get")}, + status=status.METHOD_NOT_ALLOWED) @api_view(['GET']) @authentication_classes([]) @@ -61,13 +50,14 @@ def user_details(request, email): bisa_go_user = BisaGoUser.objects.get(user=user) serializer = BisaGoUserSerializers(bisa_go_user) json_return = {"username":user.email, - "name": user.last_name, - "email": user.email, - "phone_number": bisa_go_user.phone_number} + "name": user.last_name, + "email": user.email, + "phone_number": bisa_go_user.phone_number} json_return.update(serializer.data) return JsonResponse(json_return, safe=False, status=status.OK) else: - return JsonResponse({'response' : request_error_message("get")}, status=status.METHOD_NOT_ALLOWED) + return JsonResponse({'response' : request_error_message("get")}, + status=status.METHOD_NOT_ALLOWED) except ObjectDoesNotExist: return JsonResponse({'response': 'User not found'}, status=status.NOT_FOUND) @@ -81,7 +71,8 @@ def register_user(request): email = request.POST['email'] password = request.POST['password'] data = dict(list(request.POST.dict().items())[3:]) - user = User.objects.create_user(username=email, email=email, password=password, last_name=name) + user = User.objects.create_user(username=email, email=email, + password=password, last_name=name) user.is_active = False user.save() data['user'] = user.pk @@ -100,15 +91,17 @@ def register_user(request): serializer = BisaGoUserSerializers(data=data_query_dict) if serializer.is_valid(): serializer.save() - return JsonResponse({'response' : 'User created', 'email':email, 'name':name}, status = status.CREATED) + return JsonResponse({'response' : 'User created', 'email':email, 'name':name}, + status=status.CREATED) else: return JsonResponse(serializer.errors, status=status.BAD_REQUEST) - except KeyError as e: - return JsonResponse({'response' : missing_key_message(str(e))}, status=status.INTERNAL_SERVER_ERROR) - except IntegrityError as e: - return JsonResponse({'response' : 'User is already exist'}, status=status.INTERNAL_SERVER_ERROR) + except KeyError as error: + return JsonResponse({'response' : missing_key_message(str(error))}, + status=status.INTERNAL_SERVER_ERROR) + except IntegrityError as error: + return JsonResponse({'response' : 'User is already exist'}, + status=status.INTERNAL_SERVER_ERROR) - @api_view(['GET']) @authentication_classes([]) @permission_classes([]) @@ -124,8 +117,37 @@ def activate(request, uidb64, token): user.save() # login(request, user) # return redirect('home') - return JsonResponse({'response' : 'User activated'}, status = status.CREATED) + return JsonResponse({'response' : 'User activated'}, status=status.CREATED) else: - return JsonResponse({'response' : request_error_message('get')}, status = status.BAD_REQUEST) + return JsonResponse({'response' : request_error_message('get')}, + status=status.BAD_REQUEST) else: - return JsonResponse({'response' : request_error_message("get")}, status = status.BAD_REQUEST) + return JsonResponse({'response' : request_error_message("get")}, status=status.BAD_REQUEST) + +@api_view(['POST']) +@authentication_classes([]) +@permission_classes([]) +def update_user(request): + try: + if request.method == 'POST': + email = request.POST['email'] + phone_number = request.POST['phone_number'] + tanggal_lahir = request.POST['tanggal_lahir'] + jenis_kelamin = request.POST['jenis_kelamin'] + disabilitas = request.POST['disabilitas'] + pekerjaan = request.POST['pekerjaan'] + alamat = request.POST['alamat'] + + user = User.objects.get(username=email) + bisa_go_user = BisaGoUser.objects.get(user=user) + bisa_go_user.phone_number = phone_number + bisa_go_user.tanggal_lahir = tanggal_lahir + bisa_go_user.jenis_kelamin = jenis_kelamin + bisa_go_user.disabilitas = disabilitas + bisa_go_user.pekerjaan = pekerjaan + bisa_go_user.alamat = alamat + bisa_go_user.save() + + return JsonResponse({'response': 'User updated'}, safe=False, status=status.OK) + except ObjectDoesNotExist: + return JsonResponse({'response': 'User not found'}, status=status.NOT_FOUND)