Пример #1
0
    def test_contributors_limit(self):
        """
        Checks if proper count of user is returned.
        """
        TranslationFactory.create_batch(110)

        top_contributors = User.translators.with_translation_counts()

        assert_equal(top_contributors.count(), 100)
Пример #2
0
    def test_contributors_limit(self):
        """
        Checks if proper count of user is returned.
        """
        TranslationFactory.create_batch(110)

        top_contributors = User.translators.with_translation_counts()

        assert_equal(top_contributors.count(), 100)
Пример #3
0
    def setUp(self):
        """
        We setup a sample contributor with random set of translations.
        """
        super(ContributorTimelineViewTests, self).setUp()
        self.project = ProjectFactory.create()
        self.translations = OrderedDict()

        for i in range(26):
            date = make_aware(datetime(2016, 12, 1) - timedelta(days=i))
            translations_count = randint(1, 3)
            self.translations.setdefault((date, translations_count), []).append(
                sorted(
                    TranslationFactory.create_batch(
                        translations_count,
                        date=date,
                        user=self.user,
                        entity__resource__project=self.project,
                    ),
                    key=lambda t: t.pk,
                    reverse=True,
                )
            )

        mock_render = patch('pontoon.contributors.views.render', return_value=HttpResponse(''))
        self.mock_render = mock_render.start()
        self.addCleanup(mock_render.stop)
Пример #4
0
    def setUp(self):
        """
        We setup a sample contributor with random set of translations.
        """
        super(ContributorTimelineViewTests, self).setUp()
        self.project = ProjectFactory.create()
        self.translations = OrderedDict()

        for i in range(26):
            date = make_aware(datetime(2016, 12, 1) - timedelta(days=i))
            translations_count = randint(1, 3)
            self.translations.setdefault(
                (date, translations_count), []).append(
                    sorted(
                        TranslationFactory.create_batch(
                            translations_count,
                            date=date,
                            user=self.user,
                            entity__resource__project=self.project,
                        ),
                        key=lambda t: t.pk,
                        reverse=True,
                    ))

        mock_render = patch('pontoon.contributors.views.render',
                            return_value=HttpResponse(''))
        self.mock_render = mock_render.start()
        self.addCleanup(mock_render.stop)
Пример #5
0
    def test_period_filters(self):
        """
        Total counts should be filtered by given date.
        Test creates 2 contributors with different activity periods and checks if they are filtered properly.
        """

        first_contributor = self.create_contributor_with_translation_counts(approved=12, unapproved=1, needs_work=2,
            date=aware_datetime(2015, 3, 2))

        # Second contributor
        self.create_contributor_with_translation_counts(approved=2, unapproved=11, needs_work=2,
            date=aware_datetime(2015, 6, 1))

        TranslationFactory.create_batch(5, approved=True, user=first_contributor, date=aware_datetime(2015, 7, 2))

        top_contributors = User.translators.with_translation_counts(aware_datetime(2015, 6, 10))

        assert_equal(top_contributors.count(), 1)
        assert_attributes_equal(top_contributors[0], translations_count=5,
            translations_approved_count=5, translations_unapproved_count=0,
            translations_needs_work_count=0)

        top_contributors = User.translators.with_translation_counts(aware_datetime(2015, 5, 10))

        assert_equal(top_contributors.count(), 2)
        assert_attributes_equal(top_contributors[0], translations_count=15,
            translations_approved_count=2, translations_unapproved_count=11,
            translations_needs_work_count=2)
        assert_attributes_equal(top_contributors[1], translations_count=5,
            translations_approved_count=5, translations_unapproved_count=0,
            translations_needs_work_count=0)

        top_contributors = User.translators.with_translation_counts(aware_datetime(2015, 1, 10))

        assert_equal(top_contributors.count(), 2)
        assert_attributes_equal(top_contributors[0], translations_count=20,
            translations_approved_count=17, translations_unapproved_count=1,
            translations_needs_work_count=2)
        assert_attributes_equal(top_contributors[1], translations_count=15,
            translations_approved_count=2, translations_unapproved_count=11,
            translations_needs_work_count=2)
Пример #6
0
 def create_contributor_with_translation_counts(self, approved=0, unapproved=0, needs_work=0, **kwargs):
     """
     Helper method, creates contributor with given translations counts.
     """
     contributor = UserFactory.create()
     TranslationFactory.create_batch(approved, user=contributor, approved=True, **kwargs)
     TranslationFactory.create_batch(unapproved, user=contributor, approved=False, fuzzy=False, **kwargs)
     TranslationFactory.create_batch(needs_work, user=contributor, fuzzy=True, **kwargs)
     return contributor
Пример #7
0
    def test_bulk_check_valid_translations(self):
        translation1, translation2 = TranslationFactory.create_batch(
            2,
            locale=self.translated_locale,
            entity=self.main_db_entity,
            approved=True,
            date=aware_datetime(2015, 1, 1))

        self.mock_changed_translations.return_value = [
            translation1,
            translation2,
        ]
        assert_equal(self.changeset.bulk_check_translations(), {
            translation1.pk,
            translation2.pk,
        })
        assert_equal(Error.objects.count(), 0)
        assert_equal(Warning.objects.count(), 0)
Пример #8
0
    def test_bulk_check_invalid_translations(self):
        """
        Test scenario:
        * check if errors are detected
        * check if only valid translation will land in the Translate Memory
        """
        invalid_translation, valid_translation = TranslationFactory.create_batch(
            2,
            locale=self.translated_locale,
            entity=self.main_db_entity,
            approved=True,
            date=aware_datetime(2015, 1, 1),
        )
        invalid_translation.string = "a\nb"
        invalid_translation.save()

        # Clear TM entries for those translations
        invalid_translation.memory_entries.all().delete()
        valid_translation.memory_entries.all().delete()

        self.mock_changed_translations.return_value = [
            invalid_translation,
            valid_translation,
        ]

        valid_translations = self.changeset.bulk_check_translations()

        assert valid_translations == {valid_translation.pk}

        (error, ) = Error.objects.all()

        assert error.library == FailedCheck.Library.PONTOON
        assert error.message == "Newline characters are not allowed"
        assert error.translation == invalid_translation

        self.changeset.translations_to_update = {
            valid_translation.pk: valid_translation
        }

        self.changeset.bulk_create_translation_memory_entries(
            valid_translations)

        assert not invalid_translation.memory_entries.exists()
        assert valid_translation.memory_entries.count() == 1
Пример #9
0
    def test_bulk_check_invalid_translations(self):
        """
        Test scenario:
        * check if errors are detected
        * check if only valid translation will land in the Translate Memory
        """
        invalid_translation, valid_translation = TranslationFactory.create_batch(
            2,
            locale=self.translated_locale,
            entity=self.main_db_entity,
            approved=True,
            date=aware_datetime(2015, 1, 1)
        )
        invalid_translation.string = 'a\nb'
        invalid_translation.save()

        # Clear TM entries for those translations
        invalid_translation.memory_entries.all().delete()
        valid_translation.memory_entries.all().delete()

        self.mock_changed_translations.return_value = [
            invalid_translation,
            valid_translation,
        ]

        valid_translations = self.changeset.bulk_check_translations()

        assert_equal(valid_translations, {valid_translation.pk})

        error, = Error.objects.all()

        assert_equal(error.library, 'p')
        assert_equal(error.message, 'Newline characters are not allowed')
        assert_equal(error.translation, invalid_translation)

        self.changeset.translations_to_update = {
            valid_translation.pk: valid_translation
        }

        self.changeset.bulk_create_translation_memory_entries(valid_translations)

        assert_equal(invalid_translation.memory_entries.count(), 0)
        assert_equal(valid_translation.memory_entries.count(), 1)
Пример #10
0
    def test_bulk_check_invalid_translations(self):
        """
        Test scenario:
        * check if errors are detected
        * check if only valid translation will land in the Translate Memory
        """
        invalid_translation, valid_translation = TranslationFactory.create_batch(
            2,
            locale=self.translated_locale,
            entity=self.main_db_entity,
            approved=True,
            date=aware_datetime(2015, 1, 1)
        )
        invalid_translation.string = 'a\nb'
        invalid_translation.save()

        # Clear TM entries for those translations
        invalid_translation.memory_entries.all().delete()
        valid_translation.memory_entries.all().delete()

        self.mock_changed_translations.return_value = [
            invalid_translation,
            valid_translation,
        ]

        valid_translations = self.changeset.bulk_check_translations()

        assert_equal(valid_translations, {valid_translation.pk})

        error, = Error.objects.all()

        assert_equal(error.library, 'p')
        assert_equal(error.message, 'Newline characters are not allowed')
        assert_equal(error.translation, invalid_translation)

        self.changeset.translations_to_update = {
            valid_translation.pk: valid_translation
        }

        self.changeset.bulk_create_translation_memory_entries(valid_translations)

        assert_equal(invalid_translation.memory_entries.count(), 0)
        assert_equal(valid_translation.memory_entries.count(), 1)
Пример #11
0
def contributor_translations(settings, user_a, project_a):
    """
    Setup a sample contributor with random set of translations.
    """
    translations = OrderedDict()
    for i in range(6):
        date = make_aware(datetime(2016, 12, 1) - timedelta(days=i))
        translations_count = 2
        translations.setdefault((date, translations_count), []).append(
            sorted(
                TranslationFactory.create_batch(
                    translations_count,
                    date=date,
                    user=user_a,
                    entity__resource__project=project_a,
                ),
                key=lambda t: t.pk,
                reverse=True,
            ))
    settings.CONTRIBUTORS_TIMELINE_EVENTS_PER_PAGE = 2
    yield translations
Пример #12
0
    def test_bulk_check_valid_translations(self):
        translation1, translation2 = TranslationFactory.create_batch(
            2,
            locale=self.translated_locale,
            entity=self.main_db_entity,
            approved=True,
            date=aware_datetime(2015, 1, 1)
        )

        self.mock_changed_translations.return_value = [
            translation1,
            translation2,
        ]
        assert_equal(
            self.changeset.bulk_check_translations(),
            {
                translation1.pk,
                translation2.pk,
            }
        )
        assert_equal(Error.objects.count(), 0)
        assert_equal(Warning.objects.count(), 0)
Пример #13
0
 def create_contributor_with_translation_counts(self,
                                                approved=0,
                                                unapproved=0,
                                                needs_work=0,
                                                **kwargs):
     """
     Helper method, creates contributor with given translations counts.
     """
     contributor = UserFactory.create()
     TranslationFactory.create_batch(approved,
                                     user=contributor,
                                     approved=True,
                                     **kwargs)
     TranslationFactory.create_batch(unapproved,
                                     user=contributor,
                                     approved=False,
                                     fuzzy=False,
                                     **kwargs)
     TranslationFactory.create_batch(needs_work,
                                     user=contributor,
                                     fuzzy=True,
                                     **kwargs)
     return contributor
Пример #14
0
    def test_period_filters(self):
        """
        Total counts should be filtered by given date.
        Test creates 2 contributors with different activity periods and checks if they are filtered properly.
        """

        first_contributor = self.create_contributor_with_translation_counts(
            approved=12,
            unapproved=1,
            needs_work=2,
            date=aware_datetime(2015, 3, 2))

        # Second contributor
        self.create_contributor_with_translation_counts(approved=2,
                                                        unapproved=11,
                                                        needs_work=2,
                                                        date=aware_datetime(
                                                            2015, 6, 1))

        TranslationFactory.create_batch(5,
                                        approved=True,
                                        user=first_contributor,
                                        date=aware_datetime(2015, 7, 2))

        top_contributors = User.translators.with_translation_counts(
            aware_datetime(2015, 6, 10))

        assert_equal(top_contributors.count(), 1)
        assert_attributes_equal(top_contributors[0],
                                translations_count=5,
                                translations_approved_count=5,
                                translations_unapproved_count=0,
                                translations_needs_work_count=0)

        top_contributors = User.translators.with_translation_counts(
            aware_datetime(2015, 5, 10))

        assert_equal(top_contributors.count(), 2)
        assert_attributes_equal(top_contributors[0],
                                translations_count=15,
                                translations_approved_count=2,
                                translations_unapproved_count=11,
                                translations_needs_work_count=2)
        assert_attributes_equal(top_contributors[1],
                                translations_count=5,
                                translations_approved_count=5,
                                translations_unapproved_count=0,
                                translations_needs_work_count=0)

        top_contributors = User.translators.with_translation_counts(
            aware_datetime(2015, 1, 10))

        assert_equal(top_contributors.count(), 2)
        assert_attributes_equal(top_contributors[0],
                                translations_count=20,
                                translations_approved_count=17,
                                translations_unapproved_count=1,
                                translations_needs_work_count=2)
        assert_attributes_equal(top_contributors[1],
                                translations_count=15,
                                translations_approved_count=2,
                                translations_unapproved_count=11,
                                translations_needs_work_count=2)