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)
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)
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)
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)
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, ]
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)
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], )
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, ] )
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, ] )
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])
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])
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)
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])