Beispiel #1
0
    def test_managers_group(self):
        """
        Tests if user has permission to manage and translate locales after assigment.
        """
        user = UserFactory.create()
        [first_locale, second_locale] = LocaleFactory.create_batch(2)

        assert_equal(user.has_perm("base.can_translate_locale"), False)
        assert_equal(user.has_perm("base.can_translate_locale", first_locale), False)
        assert_equal(user.has_perm("base.can_translate_locale", second_locale), False)
        assert_equal(user.has_perm("base.can_manage_locale"), False)
        assert_equal(user.has_perm("base.can_manage_locale", first_locale), False)
        assert_equal(user.has_perm("base.can_manage_locale", second_locale), False)

        user.groups.add(second_locale.managers_group)

        assert_equal(user.has_perm("base.can_translate_locale"), False)
        assert_equal(user.has_perm("base.can_translate_locale", first_locale), False)
        assert_equal(user.has_perm("base.can_translate_locale", second_locale), True)
        assert_equal(user.has_perm("base.can_manage_locale"), False)
        assert_equal(user.has_perm("base.can_manage_locale", first_locale), False)
        assert_equal(user.has_perm("base.can_manage_locale", second_locale), True)

        user.groups.add(first_locale.managers_group)

        assert_equal(user.has_perm("base.can_translate_locale"), False)
        assert_equal(user.has_perm("base.can_translate_locale", first_locale), True)
        assert_equal(user.has_perm("base.can_translate_locale", second_locale), True)
        assert_equal(user.has_perm("base.can_manage_locale"), False)
        assert_equal(user.has_perm("base.can_manage_locale", first_locale), True)
        assert_equal(user.has_perm("base.can_manage_locale", second_locale), True)
Beispiel #2
0
    def test_translators_group(self):
        """
        Tests if user has permission to translate locales after assigment.
        """
        user = UserFactory.create()
        [first_locale, second_locale] = LocaleFactory.create_batch(2)

        assert_equal(user.has_perm('base.can_translate_locale'), False)
        assert_equal(user.has_perm('base.can_translate_locale', first_locale),
                     False)
        assert_equal(user.has_perm('base.can_translate_locale', second_locale),
                     False)

        user.groups.add(second_locale.translators_group)

        assert_equal(user.has_perm('base.can_translate_locale'), False)
        assert_equal(user.has_perm('base.can_translate_locale', first_locale),
                     False)
        assert_equal(user.has_perm('base.can_translate_locale', second_locale),
                     True)

        user.groups.add(first_locale.translators_group)

        assert_equal(user.has_perm('base.can_translate_locale'), False)
        assert_equal(user.has_perm('base.can_translate_locale', first_locale),
                     True)
        assert_equal(user.has_perm('base.can_translate_locale', second_locale),
                     True)
Beispiel #3
0
    def test_query_args_filtering(self):
        """
        Tests if query args are honored properly and contributors are filtered.
        """
        locale_first, locale_second = LocaleFactory.create_batch(2)

        first_contributor = self.create_contributor_with_translation_counts(
            approved=12, unapproved=1, needs_work=2, locale=locale_first)
        second_contributor = self.create_contributor_with_translation_counts(
            approved=11, unapproved=1, needs_work=2, locale=locale_second)
        third_contributor = self.create_contributor_with_translation_counts(
            approved=10, unapproved=12, needs_work=2, locale=locale_first)

        # Testing filtering for the first locale
        top_contributors = User.translators.with_translation_counts(aware_datetime(2015, 1, 1), Q(translation__locale=locale_first))
        assert_equal(top_contributors.count(), 2)
        assert_equal(top_contributors[0], third_contributor)
        assert_attributes_equal(top_contributors[0], translations_count=24,
            translations_approved_count=10, translations_unapproved_count=12,
            translations_needs_work_count=2)

        assert_equal(top_contributors[1], first_contributor)
        assert_attributes_equal(top_contributors[1], translations_count=15,
            translations_approved_count=12, translations_unapproved_count=1,
            translations_needs_work_count=2)

        # Testing filtering for the second locale
        top_contributors = User.translators.with_translation_counts(aware_datetime(2015, 1, 1), Q(translation__locale=locale_second))

        assert_equal(top_contributors.count(), 1)
        assert_equal(top_contributors[0], second_contributor)
        assert_attributes_equal(top_contributors[0], translations_count=14,
            translations_approved_count=11, translations_unapproved_count=1,
            translations_needs_work_count=2)
Beispiel #4
0
 def setUp(self):
     self.locale, self.locale_other = LocaleFactory.create_batch(2)
     self.project = ProjectFactory.create(
         locales=[self.locale, self.locale_other])
     self.resource = ResourceFactory.create(project=self.project,
                                            path='/main/path.po')
     EntityFactory.create(resource=self.resource)
     StatsFactory.create(resource=self.resource, locale=self.locale)
Beispiel #5
0
def test_profileform_user_locales_order(member, settings_url):
    locale1, locale2, locale3 = LocaleFactory.create_batch(3)
    response = member.client.get(settings_url)
    assert response.status_code == 200

    response = member.client.post(
        "/settings/",
        {
            "first_name": "contributor",
            "email": member.user.email,
            "locales_order": commajoin(
                locale2.pk,
                locale1.pk,
                locale3.pk,
            ),
        },
    )

    assert response.status_code == 200
    assert list(
        User.objects.get(pk=member.user.pk).profile.sorted_locales) == [
            locale2,
            locale1,
            locale3,
        ]
    # Test if you can clear all locales
    response = member.client.post(
        "/settings/",
        {
            "first_name": "contributor",
            "email": member.user.email,
            "locales_order": ""
        },
    )
    assert response.status_code == 200
    assert list(
        User.objects.get(pk=member.user.pk).profile.sorted_locales) == []

    # Test if form handles duplicated locales
    response = member.client.post(
        "/settings/",
        {
            "first_name": "contributor",
            "email": member.user.email,
            "locales_order": commajoin(
                locale1.pk,
                locale2.pk,
                locale2.pk,
            ),
        },
    )
    assert response.status_code, 200
    assert list(
        User.objects.get(pk=member.user.pk).profile.sorted_locales) == [
            locale1,
            locale2,
        ]
Beispiel #6
0
 def setUp(self):
     self.locale, self.locale_other = LocaleFactory.create_batch(2)
     self.project = ProjectFactory.create(
         locales=[self.locale, self.locale_other]
     )
     self.resource = ResourceFactory.create(
         project=self.project,
         path='/main/path.po'
     )
     EntityFactory.create(resource=self.resource)
     StatsFactory.create(resource=self.resource, locale=self.locale)
Beispiel #7
0
    def test_user_locales_order(self):
        locale1, locale2, locale3 = LocaleFactory.create_batch(3)
        response = self.client.get(self.url)
        assert_equal(response.status_code, 200)

        response = self.client.post(
            "/settings/",
            {
                "first_name": "contributor",
                "email": self.user.email,
                "locales_order": commajoin(
                    locale2.pk,
                    locale1.pk,
                    locale3.pk,
                ),
            },
        )

        assert_equal(response.status_code, 200)
        assert_equal(
            list(User.objects.get(pk=self.user.pk).profile.sorted_locales),
            [locale2, locale1, locale3],
        )
        # Test if you can clear all locales
        response = self.client.post(
            "/settings/",
            {
                "first_name": "contributor",
                "email": self.user.email,
                "locales_order": "",
            },
        )
        assert_equal(response.status_code, 200)
        assert_equal(
            list(User.objects.get(pk=self.user.pk).profile.sorted_locales), [])

        # Test if form handles duplicated locales
        response = self.client.post(
            "/settings/",
            {
                "first_name": "contributor",
                "email": self.user.email,
                "locales_order": commajoin(
                    locale1.pk,
                    locale2.pk,
                    locale2.pk,
                ),
            },
        )
        assert_equal(response.status_code, 200)
        assert_equal(
            list(User.objects.get(pk=self.user.pk).profile.sorted_locales),
            [locale1, locale2],
        )
Beispiel #8
0
    def test_user_locales_order(self):
        locale1, locale2, locale3 = LocaleFactory.create_batch(3)
        response = self.client.get(self.url)
        assert_equal(response.status_code, 200)

        response = self.client.post('/settings/', {
            'first_name': 'contributor',
            'email': self.user.email,
            'locales_order': commajoin(
                locale2.pk,
                locale1.pk,
                locale3.pk,
            ),
        })

        assert_equal(response.status_code, 200)
        assert_equal(
            list(User.objects.get(pk=self.user.pk).profile.sorted_locales),
            [
                locale2,
                locale1,
                locale3,
            ]
        )
        # Test if you can clear all locales
        response = self.client.post('/settings/', {
            'first_name': 'contributor',
            'email': self.user.email,
            'locales_order': '',
        })
        assert_equal(response.status_code, 200)
        assert_equal(
            list(User.objects.get(pk=self.user.pk).profile.sorted_locales),
            []
        )

        # Test if form handles duplicated locales
        response = self.client.post('/settings/', {
            'first_name': 'contributor',
            'email': self.user.email,
            'locales_order': commajoin(
                locale1.pk,
                locale2.pk,
                locale2.pk,
            )
        })
        assert_equal(response.status_code, 200)
        assert_equal(
            list(User.objects.get(pk=self.user.pk).profile.sorted_locales), [
                locale1,
                locale2,
            ]
        )
Beispiel #9
0
    def test_user_locales_order(self):
        locale1, locale2, locale3 = LocaleFactory.create_batch(3)
        response = self.client.get(self.url)
        assert_equal(response.status_code, 200)

        response = self.client.post('/settings/', {
            'first_name': 'contributor',
            'email': self.user.email,
            'locales_order': commajoin(
                locale2.pk,
                locale1.pk,
                locale3.pk,
            ),
        })

        assert_equal(response.status_code, 200)
        assert_equal(
            list(User.objects.get(pk=self.user.pk).profile.sorted_locales),
            [
                locale2,
                locale1,
                locale3,
            ]
        )
        # Test if you can clear all locales
        response = self.client.post('/settings/', {
            'first_name': 'contributor',
            'email': self.user.email,
            'locales_order': '',
        })
        assert_equal(response.status_code, 200)
        assert_equal(
            list(User.objects.get(pk=self.user.pk).profile.sorted_locales),
            []
        )

        # Test if form handles duplicated locales
        response = self.client.post('/settings/', {
            'first_name': 'contributor',
            'email': self.user.email,
            'locales_order': commajoin(
                locale1.pk,
                locale2.pk,
                locale2.pk,
            )
        })
        assert_equal(response.status_code, 200)
        assert_equal(
            list(User.objects.get(pk=self.user.pk).profile.sorted_locales), [
                locale1,
                locale2,
            ]
        )
Beispiel #10
0
    def test_no_subpage_no_stats_in_current_locale(self):
        """
        If there are stats for a resource available in other locales but
        not in the current one, and no subpages, do not set ctx['part'].
        """
        locale, locale_no_stats = LocaleFactory.create_batch(2)
        project = ProjectFactory.create(locales=[locale, locale_no_stats])

        resource = ResourceFactory.create(project=project, path='foo.lang', entity_count=1)
        ResourceFactory.create(project=project, entity_count=1)
        StatsFactory.create(resource=resource, locale=locale)

        self.client_login()
        url = '/{}/'.format('/'.join([locale_no_stats.code, project.slug, resource.path]))
        with patch('pontoon.base.views.render', wraps=render) as mock_render:
            self.client.get(url)
            assert_true('part' not in mock_render.call_args[0][2])
Beispiel #11
0
    def test_no_subpage_no_stats_in_current_locale(self):
        """
        If there are stats for a resource available in other locales but
        not in the current one, and no subpages, do not set ctx['part'].
        """
        locale, locale_no_stats = LocaleFactory.create_batch(2)
        project = ProjectFactory.create(locales=[locale, locale_no_stats])

        # Need two resources to trigger setting the part value.
        resource = ResourceFactory.create(project=project, path="foo.lang", entity_count=1)
        ResourceFactory.create(project=project, entity_count=1)
        StatsFactory.create(resource=resource, locale=locale)

        self.client_login()
        url = "/{locale.code}/{project.slug}/".format(locale=locale_no_stats, project=project)
        with patch("pontoon.base.views.render", wraps=render) as mock_render:
            self.client.get(url)
            assert_true("part" not in mock_render.call_args[0][2])
Beispiel #12
0
    def test_query_args_filtering(self):
        """
        Tests if query args are honored properly and contributors are filtered.
        """
        locale_first, locale_second = LocaleFactory.create_batch(2)

        first_contributor = self.create_contributor_with_translation_counts(
            approved=12, unapproved=1, needs_work=2, locale=locale_first)
        second_contributor = self.create_contributor_with_translation_counts(
            approved=11, unapproved=1, needs_work=2, locale=locale_second)
        third_contributor = self.create_contributor_with_translation_counts(
            approved=10, unapproved=12, needs_work=2, locale=locale_first)

        # Testing filtering for the first locale
        top_contributors = User.translators.with_translation_counts(
            aware_datetime(2015, 1, 1), Q(translation__locale=locale_first))
        assert_equal(top_contributors.count(), 2)
        assert_equal(top_contributors[0], third_contributor)
        assert_attributes_equal(top_contributors[0],
                                translations_count=24,
                                translations_approved_count=10,
                                translations_unapproved_count=12,
                                translations_needs_work_count=2)

        assert_equal(top_contributors[1], first_contributor)
        assert_attributes_equal(top_contributors[1],
                                translations_count=15,
                                translations_approved_count=12,
                                translations_unapproved_count=1,
                                translations_needs_work_count=2)

        # Testing filtering for the second locale
        top_contributors = User.translators.with_translation_counts(
            aware_datetime(2015, 1, 1), Q(translation__locale=locale_second))

        assert_equal(top_contributors.count(), 1)
        assert_equal(top_contributors[0], second_contributor)
        assert_attributes_equal(top_contributors[0],
                                translations_count=14,
                                translations_approved_count=11,
                                translations_unapproved_count=1,
                                translations_needs_work_count=2)
Beispiel #13
0
    def test_no_subpage_no_stats_in_current_locale(self):
        """
        If there are stats for a resource available in other locales but
        not in the current one, and no subpages, do not set ctx['part'].
        """
        locale, locale_no_stats = LocaleFactory.create_batch(2)
        project = ProjectFactory.create(locales=[locale, locale_no_stats])

        # Need two resources to trigger setting the part value.
        resource = ResourceFactory.create(project=project,
                                          path='foo.lang',
                                          entity_count=1)
        ResourceFactory.create(project=project, entity_count=1)
        StatsFactory.create(resource=resource, locale=locale)

        self.client_login()
        url = '/{locale.code}/{project.slug}/'.format(locale=locale_no_stats,
                                                      project=project)
        with patch('pontoon.base.views.render', wraps=render) as mock_render:
            self.client.get(url)
            assert_true('part' not in mock_render.call_args[0][2])