Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1from django.test import TestCase, RequestFactory 

2from django.urls import reverse 

3from rest_framework import status 

4from rest_framework.test import APIRequestFactory, force_authenticate 

5from policorp.classViews.userView import UserView 

6from policorp.models import User 

7from policorp.tests import aux 

8import json 

9 

10class TestUserView(TestCase): 

11 

12 def setUp(self): 

13 # Every test needs access to the request factory. 

14 self.factory = APIRequestFactory() 

15 

16 def test_userView_POST_return_405(self): 

17 """ GIVEN ; WHEN POST /policorp/user/foo ; THEN code 405 should be returned """ 

18 username = 'foo' 

19 u1 = aux.createUser(username, 'foo@example.com', 'example') 

20 request = self.factory.post(reverse('policorp:user', kwargs={'username': username})) 

21 force_authenticate(request, user=u1) 

22 response = UserView.as_view()(request, username) 

23 self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED) 

24 

25 def test_userView_GET_authenticated_foo_return_200(self): 

26 """ GIVEN ; WHEN GET /policorp/user/foo ; THEN code 200 should be returned """ 

27 username = 'foo' 

28 u1 = aux.createUser(username, 'foo@example.com', 'example') 

29 request = self.factory.get(reverse('policorp:user', kwargs={'username': username})) 

30 force_authenticate(request, user=u1) 

31 response = UserView.as_view()(request, username) 

32 self.assertEqual(response.status_code, status.HTTP_200_OK) 

33 

34 def test_userView_GET_not_authenticated_foo_return_403(self): 

35 """ GIVEN ; WHEN GET /policorp/user/foo ; THEN code 200 should be returned """ 

36 username = 'foo' 

37 u1 = aux.createUser(username, 'foo@example.com', 'example') 

38 request = self.factory.get(reverse('policorp:user', kwargs={'username': username})) 

39 response = UserView.as_view()(request, username) 

40 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) 

41 

42 def test_userView_GET_another_user_cannot_see_my_user_details(self): 

43 """ GIVEN ; WHEN GET /policorp/user/foo ; THEN code 403 should be returned """ 

44 username = 'foo' 

45 u1 = aux.createUser(username, 'foo@example.com', 'example') 

46 u2 = aux.createUser('bar', 'bar@example.com', 'example') 

47 request = self.factory.get(reverse('policorp:user', kwargs={'username': username})) 

48 force_authenticate(request, user=u2) 

49 response = UserView.as_view()(request, username) 

50 self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) 

51 

52 def test_userView_GET_supervisor_user_can_see_my_user_details(self): 

53 """ GIVEN ; WHEN authenticated supervisor GET /policorp/user/foo ; THEN code 200 should be returned """ 

54 username = 'foo' 

55 u1 = aux.createUser(username, 'foo@example.com', 'example') 

56 request = self.factory.get(reverse('policorp:user', kwargs={'username': username})) 

57 supervisor = User.objects.create_supervisor('bar', 'bar@example.com', 'example') 

58 force_authenticate(request, user=supervisor) 

59 response = UserView.as_view()(request, username) 

60 self.assertEqual(response.status_code, status.HTTP_200_OK) 

61 

62 def test_userView_GET_authenticated_foo_returns_200_and_user_data(self): 

63 """ GIVEN ; WHEN GET /policorp/user/foo ; THEN code 200 should be returned """ 

64 username = "foo" 

65 email = "foo@example.com" 

66 password = "example" 

67 first_name = "Nombre" 

68 last_name = "Apellido" 

69 

70 u1 = aux.createUser(username, email, password, first_name, last_name) 

71 request = self.factory.get(reverse('policorp:user', kwargs={'username': username})) 

72 force_authenticate(request, user=u1) 

73 response = UserView.as_view()(request, username) 

74 self.assertEqual(response.status_code, status.HTTP_200_OK) 

75 

76 expected_json = { 

77 "username": username, 

78 "email": email, 

79 "first_name": first_name, 

80 "last_name": last_name 

81 } 

82 

83 self.assertJSONEqual(json.dumps(response.data), expected_json)