Exemplo n.º 1
0
 def test_entire_reset_process_works(self):
     user = UserFactory(phone_number="5551234567")
     assert self.mutate_password_reset() == []
     assert self.mutate_password_reset_verification_code() == []
     assert self.mutate_password_reset_confirm() == []
     user.refresh_from_db()
     assert user.check_password("my_new_pw1234") is True
Exemplo n.º 2
0
 def test_it_works(self, db):
     user = UserFactory()
     now = time.time()
     self.configure_session(timestamp=now, user_id=user.pk)
     assert self.set_pw("my_awesome_new_pw") is None
     user.refresh_from_db()
     assert user.check_password("my_awesome_new_pw") is True
Exemplo n.º 3
0
 def test_entire_reset_process_with_login_works(self):
     user = UserFactory(phone_number="5551234567")
     assert self.mutate_password_reset() == []
     assert self.mutate_password_reset_verification_code() == []
     assert self.mutate_password_reset_confirm_and_login() == {
         "errors": [],
         "session": {
             "phoneNumber": "5551234567"
         },
     }
     user.refresh_from_db()
     assert user.check_password("my_new_pw1234") is True
Exemplo n.º 4
0
 def test_profile_can_be_updated(self):
     user = UserFactory()
     data = {
         'first_name': 'Вася',
         'last_name': 'Долгополов',
         'email': '*****@*****.**',
     }
     self.client.force_login(user)
     url = reverse('user:profile-update')
     response = self.client.post(url, data)
     self.assertEqual(response.status_code, 302)
     user.refresh_from_db()
     self.assertEqual(user.first_name, data.get('first_name'))
     self.assertEqual(user.last_name, data.get('last_name'))
     self.assertEqual(user.email, data.get('email'))
Exemplo n.º 5
0
    def test_update_user(self):
        """User data is updated correctly."""
        user = UserFactory(first_name="Old Name")
        serializer = UserSerializer(
            user,
            data={"first_name": "New Name"},
            partial=True,
            context={"request": self.request},
        )

        self.assertTrue(serializer.is_valid())
        serializer.save()

        user.refresh_from_db()
        self.assertEqual(user.first_name, "New Name")
Exemplo n.º 6
0
class AuthTestCase(APITestCase):
    def setUp(self) -> None:
        self.user = UserFactory()
        self.password = "******"

    def test_no_login(self):
        url = reverse("api:users:login")
        resp = self.client.post(
            url, {"email": "foo", "password": "******"}, format="json"
        )
        self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)

    def test_login(self):
        self.assertIsNone(self.user.last_login)
        self.assertEqual(djconf.TOKEN_MODEL.objects.count(), 0)
        self.assertEqual(Session.objects.count(), 0)
        url = reverse("api:users:login")
        resp = self.client.post(
            url, {"email": self.user.email, "password": self.password}, format="json"
        )
        self.assertEqual(resp.status_code, status.HTTP_200_OK)
        self.user.refresh_from_db()
        self.assertIsNotNone(self.user.last_login)
        self.assertEqual(djconf.TOKEN_MODEL.objects.count(), 1)
        self.assertEqual(Session.objects.count(), 1)

    def test_logout(self):
        url = reverse("api:users:login")
        resp = self.client.post(
            url, {"email": self.user.email, "password": self.password}, format="json"
        )
        self.assertEqual(resp.status_code, status.HTTP_200_OK)
        self.assertEqual(djconf.TOKEN_MODEL.objects.count(), 1)
        self.assertEqual(Session.objects.count(), 1)

        url2 = reverse("api:users:logout")
        resp2 = self.client.post(url2, format="json")
        self.assertEqual(resp2.status_code, status.HTTP_204_NO_CONTENT)
        self.assertEqual(djconf.TOKEN_MODEL.objects.count(), 0)
        self.assertEqual(Session.objects.count(), 0)
Exemplo n.º 7
0
    def test_partial_update(self):
        user = UserFactory()
        profile = ProfileFactory(user=user)

        new_profile_data = ProfileFactory.build()
        new_user_data = UserFactory.build()

        data = {
            "description": new_profile_data.description,
            "last_name": new_user_data.last_name,
        }

        serializer = ProfileSerializer(instance=profile,
                                       data=data,
                                       partial=True)
        assert serializer.is_valid(), serializer.errors
        serializer.save()

        user.refresh_from_db()
        assert user.last_name == data["last_name"]

        profile.refresh_from_db()
        assert profile.description == data["description"]
Exemplo n.º 8
0
class UsersViewsTests(TestCase):
    """Tests for users.views"""

    def setUp(self):
        self.player = UserFactory(
            email='*****@*****.**',
            password='******',
            username='******',
            timezone='Europe/Tallinn',
            riot_id='SpawN',
            riot_tag='#123',
        )
        self.player_to_delete = UserFactory()
        self.User = get_user_model()

    def tests_profile(self):
        """Tests for users.views.profile"""

        url = reverse('users:profile')

        # [GET] AnonymousUser
        response = self.client.get(url)

        self.assertEqual(response.status_code, 302)
        self.assertEqual(response['location'], '/login/?next=/profile/')

        # [GET] Authenticated User
        self.client.force_login(self.player)
        response = self.client.get(url)

        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'users/profile.html')
        self.assertContains(response, self.player.email)

        self.client.logout()

    def tests_edit_profile(self):
        """Tests for users.views.edit_profile"""

        url = reverse('users:edit_profile')
        self.client.force_login(self.player)

        # [POST] Changing the username and the timezone
        payload = {
            'email': self.player.email,
            'timezone': 'Europe/Stockholm',
            'username': '******',
            'riot_id': 'SpawN',
            'riot_tag': '#123',
            'avatar': '/avatars/default.png',
        }
        response = self.client.post(url, payload)
        self.player.refresh_from_db()

        self.assertEqual(response.status_code, 302)
        self.assertEqual(self.player.username, 'SpawN')
        self.assertEqual(self.player.timezone, 'Europe/Stockholm')

        # [POST] Changing the username without providing the required fields
        payload = {'username': '******'}
        response = self.client.post(url, payload)
        self.player.refresh_from_db()

        self.assertEqual(self.player.username, 'SpawN')

        self.client.logout()

    def tests_signup(self):
        """Tests for users.views.signup"""

        url = reverse('users:signup')
        email = '*****@*****.**'
        password = '******'
        username = '******'
        timezone = 'Europe/Stockholm'

        # [GET] Rendering the signup form
        response = self.client.get(url)

        self.assertEqual(response.status_code, 200)
        self.assertTrue(response.context['form'])

        # [POST] Creating a user with empty username
        payload = {
            'email': email,
            'password1': password,
            'password2': password,
            'timezone': timezone,
        }
        _ = self.client.post(url, payload, follow=True)

        with self.assertRaises(ObjectDoesNotExist):
            self.User.objects.get(email=email)

        # [POST] Creating a valid user
        payload.update(username=username)
        response = self.client.post(url, payload, follow=True)

        self.assertEqual(response.status_code, 200)
        self.assertTrue(self.User.objects.get(email=email))

    def tests_login(self):
        """Tests for users.views.login"""

        url = reverse('users:login')
        email = '*****@*****.**'
        password = '******'

        # [GET] Login page
        response = self.client.get(url)

        self.assertEqual(response.status_code, 200)

        # [POST] Connection with the wrong password
        payload = {
            'email': email,
            'password': '******',
        }
        response = self.client.post(url, payload)

        self.assertEqual(response.status_code, 200)

        # [POST] Connection with the correct credentials
        payload.update(password=password)
        response = self.client.post(url, payload)

        self.assertEqual(response.status_code, 302)

    def tests_delete_account(self):
        """Tests for users.views.delete_account"""

        url = reverse('users:delete_account')

        # [GET] Deleting a user account
        self.client.force_login(self.player_to_delete)
        response = self.client.get(url, follow=True)

        self.assertEqual(response.status_code, 200)
        with self.assertRaises(ObjectDoesNotExist):
            self.player_to_delete.refresh_from_db()
Exemplo n.º 9
0
class UserViewTests(APITestCase):
    def setUp(self):
        self.admin = AdminFactory()
        self.client.credentials(HTTP_AUTHORIZATION="Token " +
                                self.admin.auth_token.key)
        self.user = UserFactory(first_name="Name")
        self.data = {
            "first_name": "Test",
            "last_name": "User",
            "email": "*****@*****.**",
            "is_active": True,
            "is_staff": False,
            "is_superuser": False,
        }

    def test_list_users(self):
        """User can view other users."""
        response = self.client.get(reverse("v1:users-list"))

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.data), 2)

    def test_create_user(self):
        """Admins can create new users."""
        response = self.client.post(reverse("v1:users-list"), self.data)
        user = User.objects.filter(email=self.data["email"])

        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertTrue(user.exists())

        user = user.first()
        self.assertEqual(user.first_name, self.data["first_name"])
        self.assertEqual(user.last_name, self.data["last_name"])
        self.assertEqual(user.email, self.data["email"])
        self.assertEqual(user.is_active, self.data["is_active"])
        self.assertEqual(user.is_staff, self.data["is_staff"])
        self.assertEqual(user.is_superuser, self.data["is_superuser"])

    def test_create_user_invalid(self):
        """Users can not create new users."""
        user = UserFactory()
        self.client.credentials(HTTP_AUTHORIZATION="Token " +
                                user.auth_token.key)
        response = self.client.post(reverse("v1:users-list"), self.data)
        user = User.objects.filter(email=self.data["email"])

        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
        self.assertFalse(user.exists())

    def test_user_partial_update(self):
        """Admins can patch user data."""
        data = {"first_name": "New Name"}

        response = self.client.patch(
            reverse("v1:users-detail", args=[self.user.pk]), data)
        self.user.refresh_from_db()

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(self.user.first_name, data["first_name"])

    def test_user_partial_update_invalid(self):
        """Users can not patch user data."""
        user = UserFactory()
        self.client.credentials(HTTP_AUTHORIZATION="Token " +
                                user.auth_token.key)
        data = {"first_name": "New Name"}

        response = self.client.patch(
            reverse("v1:users-detail", args=[self.user.pk]), data)
        self.user.refresh_from_db()

        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
        self.assertEqual(self.user.first_name, "Name")

    def test_user_delete(self):
        """Admins can delete users."""
        response = self.client.delete(
            reverse("v1:users-detail", args=[self.user.pk]))

        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
        self.assertFalse(User.objects.filter(pk=self.user.pk).exists())

    def test_user_delete_invalid(self):
        """Users can not delete users."""
        user = UserFactory()
        self.client.credentials(HTTP_AUTHORIZATION="Token " +
                                user.auth_token.key)
        response = self.client.delete(
            reverse("v1:users-detail", args=[self.user.pk]))

        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
        self.assertTrue(User.objects.filter(pk=self.user.pk).exists())