Exemple #1
0
 def create_user_and_set_password(self, password=None):
     if not password:
         password = fake.password()
     user = UserFactory()
     user.set_password(password)
     user.save()
     return user, password
Exemple #2
0
class ResetPasswordTests(TestCase):
    def setUp(self) -> None:
        self.user_password = "******"
        self.user = UserFactory()
        self.user.set_password(self.user_password)
        self.user.save()
        self.url = self._generate_valid_reset_password_confirm_url()

    def test_help_text_for_reused_password_should_display_in_template_response(self):
        response = self.client.get(path=self.url)
        self.assertContains(response, ValidatorsHelpText.PASSWORD_CANNOT_BE_THE_SAME_AS_PREVIOUS.value)

    def test_that_new_password_cannot_be_the_same_as_previous_password(self):
        response = self.client.post(
            path=self.url, data={"new_password1": self.user_password, "new_password2": self.user_password}
        )

        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.context["form"].errors), 1)
        self.assertContains(response, str(ValidationErrorText.VALIDATION_ERROR_NEW_PASSWORD_THE_SAME_AS_PREVIOUS))

    def _generate_valid_reset_password_confirm_url(self):
        reset_password_response = self.client.post(reverse("password_reset"), data={"email": self.user.email})
        self.uid = reset_password_response.context["uid"]
        token = reset_password_response.context["token"]
        reset_password_confirm_response = self.client.post(
            reverse("password_reset_confirm", kwargs={"uidb64": self.uid, "token": token})
        )

        return reset_password_confirm_response.url
Exemple #3
0
def auth_admin() -> UserFactory:
    """
    SuperUser with simple password.
    :return: UserFactory
    """
    user = UserFactory(is_superuser=True, is_staff=True)
    user.set_password('password')
    user.save()

    return user
Exemple #4
0
def auth_user() -> UserFactory:
    """
    User with simple password.
    :return: UserFactory
    """
    user = UserFactory()
    user.set_password('password')
    user.save()

    return user
Exemple #5
0
 def handle(self, *args, **options):
     model = get_user_model()
     if not model.objects.filter(email="*****@*****.**"):
         superuser = UserFactory(email="*****@*****.**",
                                 is_staff=True,
                                 is_superuser=True)
         superuser.set_password("@Admin123")
         superuser.save()
         self.stdout.write(self.style.SUCCESS("Superuser created!"))
     else:
         self.stdout.write(self.style.ERROR("Superuser already created!"))
Exemple #6
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.'
        )
Exemple #7
0
class TestReusedPreviousPasswordValidator(TestCase):
    def setUp(self) -> None:
        self.password_validator = ReusedPreviousPasswordValidator()
        self.user = UserFactory()
        self.password = "******"
        self.user.set_password(self.password)
        self.user.save()

    def test_that_validator_raise_exception_when_new_password_is_the_same_as_previous_password(self):
        with self.assertRaises(ValidationError) as exception:
            self.password_validator.validate(password=self.password, user=self.user)

        self.assertEqual(
            exception.exception.messages, [ValidationErrorText.VALIDATION_ERROR_NEW_PASSWORD_THE_SAME_AS_PREVIOUS]
        )

    def test_that_validation_pass_when_new_password_is_different_than_previous(self):
        new_different_password = "******"
        try:
            self.password_validator.validate(password=new_different_password, user=self.user)
        except ValidationError:
            self.fail()
Exemple #8
0
class ViewTesCase(PlusTestCase):
    def setUp(self):
        self.user = UserFactory()
        self.country = CountryFactory()
        self.company_organisation = CompanyOrganisationFactory()

        go_group, _created = Group.objects.get_or_create(name='GO Admins')
        self.go_group = go_group
        mo_group, _created = Group.objects.get_or_create(name='MO Admins')
        self.mo_group = mo_group

    def test_index_redirect(self):
        url = '/accounts/login/'
        uuid = '123123'
        customer_role = f'{uuid}-admin'
        self.user.profile.customer_role = customer_role
        self.user.profile.save()
        self.company_organisation.uuid = uuid
        self.company_organisation.save()
        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 200, response.status_code
        response_countries_id = response.context[0]['companies'].values_list(
            'id', flat=True)
        assert self.company_organisation.id in response_countries_id

        self.user.profile.customer_role = ''
        self.user.profile.save()

        response = self.client.get(url)
        assert response.status_code == 200, response.status_code
        companies = response.context[0].get('companies')
        assert companies is None

    def test_index(self):
        url = self.reverse('BCM:index')

        response = self.client.get(url)
        assert response.status_code == 200, response.status_code
        assert b'Activate is a service offered by' in response.content

        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('profile')

        self.user.groups.add(self.go_group)
        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('admin:go_admin')

        self.user.groups.all().delete()
        self.user.groups.add(self.mo_group)
        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('admin:mo_admin')

    def test_after_login(self):
        url = self.reverse('BCM:after_login')
        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('profile')

    def test_staff_member_register_view(self):
        url = self.reverse('BCM:signup')

        response = self.client.get(url)
        assert response.status_code == 200, response.status_code
        assert b'<title>GS1 Activate</title>' in response.content

        self.user.groups.add(self.go_group)
        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('admin:go_admin')

        self.user.groups.all().delete()
        self.user.groups.add(self.mo_group)
        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('admin:mo_admin')

    def test_staff_member_login_view(self):
        url = self.reverse('BCM:login')
        response = self.client.get(url)
        assert response.status_code == 200, response.status_code
        assert b'<title>GS1 Activate</title>' in response.content

        password = '******'

        self.user.set_password(password)
        self.user.save()

        data = {'username': self.user.username, 'password': password}
        response = self.client.post(url, data=data)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('profile'), response.url

        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('profile')

        self.user.groups.add(self.go_group)
        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('admin_profile_js')

        self.user.groups.all().delete()
        self.user.groups.add(self.mo_group)
        MemberOrganisationUserFactory(is_admin=True, user=self.user)
        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('admin_profile_js')

        self.user.is_staff = True
        self.user.save()
        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('admin:index')

    def test_ss0_redirect_view(self):
        url = self.reverse('BCM:sso_redirect')

        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('BCM:index')

        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('BCM:index'), response.url

        self.user.groups.add(self.go_group)
        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('admin:go_admin')

        self.user.groups.all().delete()
        self.user.groups.add(self.mo_group)
        self.client.force_login(self.user)
        response = self.client.get(url)
        assert response.status_code == 302, response.status_code
        assert response.url == self.reverse('admin:mo_admin')
Exemple #9
0
    def handle(self, *args, **options):
        #
        # Users
        #

        user_admin = User.objects.filter(email="*****@*****.**").first()
        if user_admin is None:
            user_admin = UserFactory(email="*****@*****.**",
                                     user_type=User.UserType.ADMIN.name,
                                     is_superuser=True,
                                     is_staff=True)
            user_admin.set_password("superuser")  # pylint: disable=no-value-for-parameter
            user_admin.save()

        user_employee_1 = User.objects.filter(
            email="*****@*****.**").first()
        if user_employee_1 is None:
            user_employee_1 = UserFactory(
                email="*****@*****.**",
                user_type=User.UserType.EMPLOYEE.name,
                first_name="Mieczysław",
                last_name="Mietkowiak",
            )
            user_employee_1.set_password("passwduser")  # pylint: disable=no-value-for-parameter
            user_employee_1.save()

        user_employee_2 = User.objects.filter(
            email="*****@*****.**").first()
        if user_employee_2 is None:
            user_employee_2 = UserFactory(
                email="*****@*****.**",
                user_type=User.UserType.EMPLOYEE.name,
                first_name="Andromeda",
                last_name="Adamiak",
            )
            user_employee_2.set_password("passwduser")  # pylint: disable=no-value-for-parameter
            user_employee_2.save()

        user_manager_1 = User.objects.filter(
            email="*****@*****.**").first()
        if user_manager_1 is None:
            user_manager_1 = UserFactory(
                email="*****@*****.**",
                user_type=User.UserType.MANAGER.name,
                first_name="Jan",
                last_name="Nowakowski",
            )
            user_manager_1.set_password("passwduser")  # pylint: disable=no-value-for-parameter
            user_manager_1.save()

        user_manager_2 = User.objects.filter(
            email="*****@*****.**").first()
        if user_manager_2 is None:
            user_manager_2 = UserFactory(
                email="*****@*****.**",
                user_type=User.UserType.MANAGER.name,
                first_name="Anna",
                last_name="Małomówna",
            )
            user_manager_2.set_password("passwduser")  # pylint: disable=no-value-for-parameter
            user_manager_2.save()

        user_employee_3 = User.objects.filter(
            email="*****@*****.**").first()
        if user_employee_3 is None:
            user_employee_3 = UserFactory(
                email="*****@*****.**",
                user_type=User.UserType.EMPLOYEE.name,
                first_name="Kurt",
                last_name="Schmidt",
            )
            user_employee_3.set_password("passwduser")  # pylint: disable=no-value-for-parameter
            user_employee_3.save()

        #
        # Projects
        #

        project_stopped = Project.objects.filter(name="Time monkey").first()
        if project_stopped is None:
            project_stopped = ProjectFactory(
                name="Time monkey",
                start_date=timezone.now() - timezone.timedelta(days=4 * 7),
                stop_date=timezone.now() - timezone.timedelta(days=2 * 7),
            )

        self._add_manager_to_project_if_not_added_yet(project_stopped,
                                                      user_manager_1)
        self._add_member_to_project_if_not_added_yet(project_stopped,
                                                     user_employee_1)
        self._add_member_to_project_if_not_added_yet(project_stopped,
                                                     user_employee_2)
        self._add_member_to_project_if_not_added_yet(project_stopped,
                                                     user_manager_1)
        self._add_member_to_project_if_not_added_yet(project_stopped,
                                                     user_manager_2)

        project_pending = Project.objects.filter(name="Sheet storm").first()
        if project_pending is None:
            project_pending = ProjectFactory(name="Sheet storm",
                                             start_date=timezone.now() -
                                             timezone.timedelta(days=2 * 7))

        self._add_manager_to_project_if_not_added_yet(project_pending,
                                                      user_manager_1)
        self._add_member_to_project_if_not_added_yet(project_pending,
                                                     user_employee_1)
        self._add_member_to_project_if_not_added_yet(project_pending,
                                                     user_employee_2)
        self._add_member_to_project_if_not_added_yet(project_pending,
                                                     user_manager_1)

        project_suspended = Project.objects.filter(name="e_munchkin").first()
        if project_suspended is None:
            project_suspended = ProjectFactory(name="e_munchkin",
                                               start_date=timezone.now() -
                                               timezone.timedelta(days=7),
                                               suspended=True)

        self._add_manager_to_project_if_not_added_yet(project_suspended,
                                                      user_manager_1)
        self._add_member_to_project_if_not_added_yet(project_suspended,
                                                     user_employee_2)
        self._add_member_to_project_if_not_added_yet(project_suspended,
                                                     user_employee_3)
        self._add_member_to_project_if_not_added_yet(project_suspended,
                                                     user_manager_1)
        self._add_member_to_project_if_not_added_yet(project_suspended,
                                                     user_manager_2)

        #
        # Task activities
        #

        task_activity_review, _ = TaskActivityType.objects.get_or_create(
            name="Review")
        task_activity_backend_development, _ = TaskActivityType.objects.get_or_create(
            name="Backend Development")
        task_activity_frontend_development, _ = TaskActivityType.objects.get_or_create(
            name="Frontend Development")
        task_activity_meeting, _ = TaskActivityType.objects.get_or_create(
            name="Meeting")

        #
        # Reports
        #

        ReportFactory(
            date=timezone.now() - timezone.timedelta(days=2),
            description=
            "Some report\r\ncontaining multiple lines\r\\nin description.",
            author=user_employee_1,
            project=project_pending,
            work_hours=timezone.timedelta(hours=8),
            editable=True,
            task_activities=task_activity_review,
        )

        ReportFactory(
            date=timezone.now() - timezone.timedelta(days=1),
            description="Some report",
            author=user_employee_1,
            project=project_pending,
            work_hours=timezone.timedelta(hours=4),
            editable=True,
            task_activities=task_activity_review,
        )

        ReportFactory(
            date=timezone.now() - timezone.timedelta(days=1),
            description="Some report on the same day as other.",
            author=user_employee_1,
            project=project_stopped,
            work_hours=timezone.timedelta(hours=4),
            editable=True,
            task_activities=task_activity_review,
        )

        ReportFactory(
            date=timezone.now() - timezone.timedelta(days=1),
            description="Some report",
            author=user_employee_2,
            project=project_pending,
            work_hours=timezone.timedelta(hours=6),
            editable=True,
            task_activities=task_activity_review,
        )

        ReportFactory(
            date=timezone.now() - timezone.timedelta(days=2),
            description="Some report containing hours with fraction",
            author=user_employee_2,
            project=project_suspended,
            work_hours=timezone.timedelta(hours=8, minutes=30),
            editable=True,
            task_activities=task_activity_backend_development,
        )

        ReportFactory(
            date=timezone.now() - timezone.timedelta(days=2),
            description=
            "Some report containing:\r\n- multiple lines\\ in description\r\n- time with fraction",
            author=user_manager_1,
            project=project_pending,
            work_hours=timezone.timedelta(hours=7, minutes=59),
            editable=True,
            task_activities=task_activity_backend_development,
        )

        ReportFactory(
            date=timezone.now() - timezone.timedelta(days=1),
            description="Some report",
            author=user_manager_1,
            project=project_pending,
            work_hours=timezone.timedelta(hours=2),
            editable=True,
            task_activities=task_activity_backend_development,
        )

        ReportFactory(
            date=timezone.now() - timezone.timedelta(days=1),
            description="Some report containing time with fraction.",
            author=user_manager_2,
            project=project_stopped,
            work_hours=timezone.timedelta(hours=7, minutes=1),
            editable=True,
            task_activities=task_activity_frontend_development,
        )

        ReportFactory(
            date=timezone.now() - timezone.timedelta(days=2),
            description="Some report",
            author=user_manager_2,
            project=project_suspended,
            work_hours=timezone.timedelta(hours=8),
            editable=True,
            task_activities=task_activity_frontend_development,
        )

        ReportFactory(
            date=timezone.now() - timezone.timedelta(days=1),
            description="Some report on the same day as other",
            author=user_manager_1,
            project=project_stopped,
            work_hours=timezone.timedelta(hours=2),
            editable=True,
            task_activities=task_activity_frontend_development,
        )

        ReportFactory(
            date=timezone.now() - timezone.timedelta(days=1),
            description="Some report on the same day as other two",
            author=user_manager_1,
            project=project_suspended,
            work_hours=timezone.timedelta(hours=4),
            editable=True,
            task_activities=task_activity_meeting,
        )

        ReportFactory(
            date=timezone.now() - timezone.timedelta(days=1),
            description="Some report",
            author=user_employee_3,
            project=project_suspended,
            work_hours=timezone.timedelta(hours=8),
            editable=True,
            task_activities=task_activity_meeting,
        )