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]
Exemplo n.º 2
0
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
Exemplo n.º 3
0
    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
Exemplo n.º 5
0
    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.'
        )
Exemplo n.º 6
0
    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, "*****@*****.**")
Exemplo n.º 7
0
    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, "*****@*****.**")
Exemplo n.º 8
0
    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")
Exemplo n.º 9
0
    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, "*****@*****.**")
Exemplo n.º 10
0
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"]))
Exemplo n.º 11
0
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)