def test_reset_password(client, mailoutbox, settings): user = UserFactory( is_active=False, reset_password_token=User.generate_token(), reset_password_request_date=timezone.now(), ) new_password = user.reset_password_token payload = dict( token=user.reset_password_token, password=new_password, ) response = client.post(reverse('users:reset_password'), payload) assert response.status_code == 200 user.refresh_from_db() response = response.json() assert user.pk == response['user']['pk'] assert user.is_active is True assert user.check_password(new_password) is True assert 'access_token' in response assert 'refresh_token' in response assert len(mailoutbox) == 1 msg = mailoutbox[0] assert msg.subject == 'Your {site_name} password has been changed'.format( site_name=settings.SITE_NAME) assert msg.to == [user.email]
class TasksTestCase(TestCase): def setUp(self): country = Country.objects.create(slug='IE', name='Ireland') self.member_organisation = MemberOrganisation.objects.create( name='GS1IE', slug='gs1ie', is_active=1, country=country, ) self.user = UserFactory() self.user.profile.member_organisation = self.member_organisation self.user.profile.save() self.user.refresh_from_db() self.instance = ProductFactory() self.instance_original = ProductFactory() BCMLanguageFactory(slug='en') def test_update_gs1_cloud_product(self): response = update_gs1_cloud_product(self.instance, self.instance_original, self.user) assert response == {'api_response_status': None, 'response_text': None} assert not CloudLog.objects.filter(username=self.user.email).exists() @skip def test_update_gs1_cloud_product_is_active(self): self.instance.gs1_cloud_state = 'ACTIVE' self.instance.save() response = update_gs1_cloud_product(self.instance, self.instance_original, self.user) assert response['api_response_status'] == 200, response data = json.loads(response['response_text']) assert data['status'] == 5, response cloud_log = CloudLog.objects.filter(username=self.user.email).first() assert cloud_log assert cloud_log.key == self.instance.gtin, cloud_log.key def test_update_gs1_cloud_product_draft(self): self.instance.gs1_cloud_state = 'DRAFT' self.instance.save() response = update_gs1_cloud_product(self.instance, self.instance_original, self.user) assert response['info'] assert not CloudLog.objects.filter(username=self.user.email).exists() @skip def test_update_gs1_cloud_original_product_is_active(self): self.instance.gs1_cloud_state = 'DRAFT' self.instance.save() self.instance_original.gs1_cloud_state = 'ACTIVE' self.instance_original.save() response = update_gs1_cloud_product(self.instance, self.instance_original, self.user) assert response['api_response_status'] == 200, response data = json.loads(response['response_text']) assert data['status'] == 4 cloud_log = CloudLog.objects.filter(username=self.user.email).first() assert cloud_log assert cloud_log.key == self.instance.gtin, cloud_log.key
def test_make_get_active(self): assert Prefix.service.get_active() is None str_prefix = self.prefix.prefix user = UserFactory() Prefix.service.make_active(user=user, prefix=str_prefix) user.refresh_from_db() assert Prefix.service.get_active(user) == self.prefix
def test_email_confirmation(client): user = UserFactory(is_active=False, email_confirmation_token=User.generate_token()) payload = dict(token=user.email_confirmation_token) response = client.post(reverse('users:confirm_email_address'), payload) user.refresh_from_db() assert response.status_code == 200 response = response.json() assert response['user']['pk'] == user.pk assert 'access_token' in response assert 'refresh_token' in response assert user.email_confirmation_token is None assert user.is_active is True
def test_can_employee_sign_in(self): user = UserFactory( email='*****@*****.**', ) email_confirmation = EmailConfirmationFactory(user=user) user.set_password('12345678') user.save() post_data = { 'email': '*****@*****.**', 'password': '******', } response = self.client.post( self.sign_in_url, data=post_data, ) user.refresh_from_db() data = self.parse_response(response.content) self.assertEqual(response.status_code, 403) self.assertEqual( data['detail'], 'E-mail was not verified.' ) email_confirmation.confirmed = True email_confirmation.save() email_confirmation.refresh_from_db() response = self.client.post( self.sign_in_url, data=post_data, ) data = self.parse_response(response.content) self.assertEqual(response.status_code, 200) self.assertEqual( user.auth_token.key, data['auth_token'] ) self.assertEqual( data['detail'], 'Successfully authenticated.' )
def test_patch(self): user = UserFactory(email="*****@*****.**") self.assertIsInstance(user, User) self.set_user(user) self.assertEqual(user.email, "*****@*****.**") data = {"email": "*****@*****.**"} path = self.get_path(id_detail=user.id) response = self.client.patch(path, data, HTTP_AUTHORIZATION=self.auth) self.assertEqual(response.status_code, status.HTTP_200_OK, msg=response.data) self.assertEqual(User.objects.count(), 1) user.refresh_from_db() self.assertEqual(user.email, "*****@*****.**")
def test_put_fail_missing_fields(self): user = UserFactory(email="*****@*****.**") self.assertIsInstance(user, User) self.set_user(user) self.assertEqual(user.email, "*****@*****.**") data = {} path = self.get_path(id_detail=user.id) response = self.client.put(path, data, HTTP_AUTHORIZATION=self.auth) self.assertEqual( response.status_code, status.HTTP_400_BAD_REQUEST, msg=response.data ) self.assertEqual(User.objects.count(), 1) user.refresh_from_db() self.assertEqual(user.email, "*****@*****.**")
def test_patch_picture(self): user = UserFactory(email="*****@*****.**") self.assertIsInstance(user, User) self.set_user(user) self.assertEqual(user.email, "*****@*****.**") data = {"picture": open(self._image_path, "rb")} path = self.get_path(id_detail=user.id) response = self.client.patch( path, data, HTTP_AUTHORIZATION=self.auth, format="multipart" ) self.assertEqual(response.status_code, status.HTTP_200_OK, msg=response.data) self.assertEqual(User.objects.count(), 1) user.refresh_from_db() self.assertEqual(user.picture.name, f"users/{user.id}/picture.jpg")
def test_put_other_user(self): my_user = UserFactory() self.set_user(my_user) user = UserFactory(email="*****@*****.**") self.assertIsInstance(user, User) self.assertEqual(user.email, "*****@*****.**") data = {"password": user.password, "email": user.email} path = self.get_path(id_detail=user.id) response = self.client.put(path, data, HTTP_AUTHORIZATION=self.auth) self.assertEqual( response.status_code, status.HTTP_403_FORBIDDEN, msg=response.data ) self.assertEqual(User.objects.count(), 2) user.refresh_from_db() self.assertEqual(user.email, "*****@*****.**")
class ChangePasswordTests(TestCase): def setUp(self): self.user_password = "******" self.user = UserFactory() def test_change_user_password_view_should_change_user_password_on_post(self): data = {"old_password": self.user_password, "new_password1": "newuserpasswd", "new_password2": "newuserpasswd"} self.client.login(email=self.user.email, password=self.user_password) response = self.client.post(reverse("password_change"), data) self.user.refresh_from_db() self.assertEqual(response.status_code, 302) self.assertTrue(self.user.check_password(data["new_password1"])) def test_change_user_password_view_should_not_change_user_password_when_old_password_is_incorrect(self): data = {"old_password": "******", "new_password1": "newuserpasswd", "new_password2": "newuserpasswd"} self.client.login(email=self.user.email, password=self.user_password) response = self.client.post(reverse("password_change"), data) self.user.refresh_from_db() self.assertEqual(response.status_code, 200) self.assertFalse(self.user.check_password(data["new_password1"])) self.assertFalse(self.user.check_password(data["old_password"])) self.assertTrue(self.user.check_password(self.user_password)) def test_change_user_password_view_should_not_change_user_password_when_new_passwords_does_not_match(self): data = { "old_password": self.user_password, "new_password1": "newuserpasswd", "new_password2": "notthesamenewuserpasswd", } self.client.login(email=self.user.email, password=self.user_password) response = self.client.post(reverse("password_change"), data) self.user.refresh_from_db() self.assertEqual(response.status_code, 200) # Replacement between "’" and "'" it is caused because in response # we got "’" but from strings hardcoded in `strings.py` we got "'" self.assertEqual( response.context["form"].errors.get("new_password2")[0].replace("’", "'"), ValidationErrorText.VALIDATION_ERROR_SIGNUP_PASSWORD_MESSAGE, ) self.assertFalse(self.user.check_password(data["new_password1"])) self.assertTrue(self.user.check_password(data["old_password"]))
class UserUpdateByAdminTests(TestCase): def setUp(self): self.user = UserFactory() self.user.save() self.user_admin = AdminUserFactory() self.client.force_login(self.user_admin) self.data = { "first_name": self.user.first_name, "last_name": self.user.last_name, "email": self.user.email, "user_type": self.user.user_type, } self.correct_url = reverse("custom-user-update-by-admin", kwargs={"pk": self.user.pk}) self.expected_success_message = SuccessPopUpMessages.SUCCESSFULLY_CREATE_OR_UPDATE_USER.value.format( email=self.user.email, action="updated" ) def test_user_update_by_admin_view_should_display_user_details_on_get(self): response = self.client.get(path=reverse("custom-user-update-by-admin", kwargs={"pk": self.user.pk})) self.assertEqual(response.status_code, 200) self.assertContains(response, self.user.email) self.assertContains(response, self.user.first_name) self.assertContains(response, self.user.last_name) self.assertTemplateUsed("user_detail.html") def test_user_update_by_admin_view_should_not_render_non_existing_user(self): response = self.client.get(path=reverse("custom-user-update-by-admin", kwargs={"pk": 1000})) self.assertEqual(response.status_code, 404) def test_user_update_by_admin_view_should_update_user_on_post(self): self.data["last_name"] = "NewLastName" response = self.client.post(self.correct_url, self.data) self.user.refresh_from_db() self.assertEqual(response.status_code, 302) self.assertEqual(self.data["last_name"], self.user.last_name) def test_user_update_by_admin_view_should_not_update_user_on_post_if_form_is_invalid(self): self.data["email"] = "*****@*****.**" response = self.client.post(self.correct_url, self.data) self.user.refresh_from_db() self.assertEqual(response.status_code, 200) def test_success_message_should_be_added_on_post_if_form_is_valid(self): self.data["last_name"] = "NewLastName" response = self.client.post(path=self.correct_url, data=self.data) messages = list(get_messages(response.wsgi_request)) self.assertEqual(str(messages[0]), self.expected_success_message) def test_that_success_message_should_be_displayed_in_template_on_get_after_user_update_by_admin_if_form_is_valid( self ): self.data["last_name"] = "NewLastName" response = self.client.post(path=self.correct_url, data=self.data, follow=True) self.assertContains(response, self.expected_success_message) def test_that_success_message_should_not_be_added_if_form_is_invalid(self): self.data["email"] = "*****@*****.**" response = self.client.post(path=self.correct_url, data=self.data) messages = list(get_messages(response.wsgi_request)) self.assertEqual(len(messages), 0)