class TestTranslationsImportApproval(TestCaseWithFactory):

    layer = LaunchpadScriptLayer

    def setUp(self):
        super(TestTranslationsImportApproval, self).setUp()
        self.queue = TranslationImportQueue()
        self.script = ImportQueueGardener(
            'translations-import-queue-gardener',
            dbuser='******',
            test_args=[])
        self.script.logger.setLevel(logging.FATAL)
        self.owner = self.factory.makePerson()
        self.productseries = self.factory.makeProductSeries()

    def test_templates_with_unique_directories_are_approved(self):
        # If there are multiple templates with unique directories then the
        # approval is ok.

        # Make two valid templates with different directories.
        self.factory.makePOTemplate(
            path='po/evolution-3.2.pot',
            productseries=self.productseries)
        self.factory.makePOTemplate(
            path='other-po/evolution-3.0.pot',
            productseries=self.productseries)
        tiqe = self.factory.makeTranslationImportQueueEntry(
            path='po/fr.po', productseries=self.productseries)
        transaction.commit()
        self.assertIsNone(tiqe.import_into)
        self.assertEqual(RosettaImportStatus.NEEDS_REVIEW, tiqe.status)
        self.script.main()
        self.assertIsNotNone(tiqe.import_into)
        self.assertEqual(RosettaImportStatus.APPROVED, tiqe.status)

    def test_inactive_templates_do_not_block_approval(self):
        # If all but one of the templates with the same path directory are
        # marked as obsolete, the approval proceeds.
        # See bug 867411 for more details.

        # Make a valid template.
        self.factory.makePOTemplate(
            path='po/evolution-3.2.pot',
            productseries=self.productseries)
        # Make a obsolete template with the same directory.
        self.factory.makePOTemplate(
            path='po/evolution-3.0.pot',
            productseries=self.productseries,
            iscurrent=False)
        tiqe = self.factory.makeTranslationImportQueueEntry(
            path='po/fr.po', productseries=self.productseries)
        transaction.commit()
        self.assertIsNone(tiqe.import_into)
        self.assertEqual(RosettaImportStatus.NEEDS_REVIEW, tiqe.status)
        self.script.main()
        self.assertIsNotNone(tiqe.import_into)
        self.assertEqual(RosettaImportStatus.APPROVED, tiqe.status)
Esempio n. 2
0
 def setUp(self):
     super(TestTranslationsImportApproval, self).setUp()
     self.queue = TranslationImportQueue()
     self.script = ImportQueueGardener(
         'translations-import-queue-gardener',
         dbuser='******',
         test_args=[])
     self.script.logger.setLevel(logging.FATAL)
     self.owner = self.factory.makePerson()
     self.productseries = self.factory.makeProductSeries()
Esempio n. 3
0
class TestTranslationsImportApproval(TestCaseWithFactory):

    layer = LaunchpadScriptLayer

    def setUp(self):
        super(TestTranslationsImportApproval, self).setUp()
        self.queue = TranslationImportQueue()
        self.script = ImportQueueGardener(
            'translations-import-queue-gardener',
            dbuser='******',
            test_args=[])
        self.script.logger.setLevel(logging.FATAL)
        self.owner = self.factory.makePerson()
        self.productseries = self.factory.makeProductSeries()

    def test_templates_with_unique_directories_are_approved(self):
        # If there are multiple templates with unique directories then the
        # approval is ok.

        # Make two valid templates with different directories.
        self.factory.makePOTemplate(path='po/evolution-3.2.pot',
                                    productseries=self.productseries)
        self.factory.makePOTemplate(path='other-po/evolution-3.0.pot',
                                    productseries=self.productseries)
        tiqe = self.factory.makeTranslationImportQueueEntry(
            path='po/fr.po', productseries=self.productseries)
        transaction.commit()
        self.assertIsNone(tiqe.import_into)
        self.assertEqual(RosettaImportStatus.NEEDS_REVIEW, tiqe.status)
        self.script.main()
        self.assertIsNotNone(tiqe.import_into)
        self.assertEqual(RosettaImportStatus.APPROVED, tiqe.status)

    def test_inactive_templates_do_not_block_approval(self):
        # If all but one of the templates with the same path directory are
        # marked as obsolete, the approval proceeds.
        # See bug 867411 for more details.

        # Make a valid template.
        self.factory.makePOTemplate(path='po/evolution-3.2.pot',
                                    productseries=self.productseries)
        # Make a obsolete template with the same directory.
        self.factory.makePOTemplate(path='po/evolution-3.0.pot',
                                    productseries=self.productseries,
                                    iscurrent=False)
        tiqe = self.factory.makeTranslationImportQueueEntry(
            path='po/fr.po', productseries=self.productseries)
        transaction.commit()
        self.assertIsNone(tiqe.import_into)
        self.assertEqual(RosettaImportStatus.NEEDS_REVIEW, tiqe.status)
        self.script.main()
        self.assertIsNotNone(tiqe.import_into)
        self.assertEqual(RosettaImportStatus.APPROVED, tiqe.status)
    def test_publish(self):
        upload = self.uploadTestData()
        transaction.commit()
        upload.queue_root.realiseUpload(self.logger)

        # Test if the job was created correctly
        jobs = list(PackageTranslationsUploadJob.iterReady())
        self.assertEqual(1, len(jobs))

        job = jobs[0]
        # Assert if the job corresponds to the file we uploaded
        self.assertEqual(job.sourcepackagename, self.spr.sourcepackagename)
        self.assertEqual(job.libraryfilealias.filename, self.translations_file)

        # Test if the pmount translations tarball files were added to the
        # translation import queue
        with dbuser("upload_package_translations_job"):
            job.run()
        self.assertContentEqual(self._getImportableFilesFromTarball(),
                                self._getQueuePaths())

        self.factory.makePOTemplate(
            distroseries=self.breezy_autotest,
            sourcepackagename=self.spr.sourcepackagename,
            path="po/pmount.pot",
            translation_domain=self.package_name)

        # Approve all translations in the queue
        with dbuser("translations_import_queue_gardener"):
            gardener = ImportQueueGardener(
                'translations-import-queue-gardener',
                logger=self.logger,
                test_args=[])
            gardener.main()

        # Import all approved translations
        with dbuser("poimport"):
            importer = TranslationsImport('poimport',
                                          logger=self.logger,
                                          test_args=[])
            importer.main()
        # Test if all translations in the queue were successfully imported
        self.assertContentEqual(
            self._getImportableFilesFromTarball(),
            self._getQueuePaths(import_status=RosettaImportStatus.IMPORTED))
 def setUp(self):
     super(TestTranslationsImportApproval, self).setUp()
     self.queue = TranslationImportQueue()
     self.script = ImportQueueGardener(
         'translations-import-queue-gardener',
         dbuser='******',
         test_args=[])
     self.script.logger.setLevel(logging.FATAL)
     self.owner = self.factory.makePerson()
     self.productseries = self.factory.makeProductSeries()
#!/usr/bin/python -S
#
# Copyright 2009 Canonical Ltd.  This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).

"""Perform auto-approvals and auto-blocks on translation import queue"""

import _pythonpath

from lp.translations.scripts.import_queue_gardener import ImportQueueGardener


if __name__ == '__main__':
    script = ImportQueueGardener(
        'translations-import-queue-gardener',
        dbuser='******')
    script.lock_and_run()
    def test_copyFromPPAToArchiveWithTranslations(self):
        # Upload the package to a PPA and process it.
        src_upload, spph, bin_upload = self.uploadToPPA()
        target_archive = self.breezy_autotest.main_archive

        # Copy the source package with binaries from PPA to the main archive.
        # Give QueueAdmin permissions for the user so the upload will be
        # accepted right away.
        person = target_archive.owner
        for component in self.breezy_autotest.components:
            getUtility(IArchivePermissionSet).newQueueAdmin(
                target_archive, person, component)

        self.assertTrue(
            target_archive.canAdministerQueue(person,
                                              self.breezy_autotest.components,
                                              spph.pocket,
                                              self.breezy_autotest))

        target_archive.copyPackage(source_name=self.package_name,
                                   version=self.version,
                                   from_archive=self.name16.archive,
                                   to_pocket='RELEASE',
                                   to_series=self.breezy_autotest.name,
                                   person=person,
                                   include_binaries=True,
                                   unembargo=True,
                                   auto_approve=True)

        # Get copy job and run it, should be enough to publish it
        copy_job_source = getUtility(IPlainPackageCopyJobSource)
        copy_job = copy_job_source.getActiveJobs(target_archive).one()
        with dbuser('copy_packages'):
            copy_job.run()

        published_source = target_archive.getPublishedSources(name='pmount')[0]
        self.assertIsNotNone(published_source)
        self.assertEqual(
            published_source.sourcepackagerelease.upload_archive.displayname,
            'PPA for Foo Bar')
        self.assertEqual(published_source.archive.displayname,
                         'Primary Archive for Ubuntu Test')

        # Move package to main, as only main and restricted packages have
        # their translations processed.
        published_source = published_source.changeOverride(
            new_component="main")

        self.spr = published_source.sourcepackagerelease
        self.assertIsNotNone(published_source.getPublishedBinaries())

        # Process the upload for it to create the PTUJ
        upload = IStore(PackageUpload).find(PackageUpload).order_by(
            Desc(PackageUpload.id)).first()
        upload.realiseUpload(self.logger)

        # Assert the job is created correctly
        ptu_jobs = list(PackageTranslationsUploadJob.iterReady())
        self.assertNotEqual(len(ptu_jobs), 0)

        # Let's attachTranslations
        ptu_job = ptu_jobs[0]
        with dbuser('upload_package_translations_job'):
            ptu_job.run()

        # Test if the pmount translations tarball files were added to the
        # translation import queue
        self.assertContentEqual(self._getImportableFilesFromTarball(),
                                self._getQueuePaths())

        self.factory.makePOTemplate(
            distroseries=self.breezy_autotest,
            sourcepackagename=self.spr.sourcepackagename,
            path="po/pmount.pot",
            translation_domain=self.package_name)

        # Approve all translations in the queue
        with dbuser("translations_import_queue_gardener"):
            gardener = ImportQueueGardener(
                'translations-import-queue-gardener',
                logger=self.logger,
                test_args=[])
            gardener.main()

        # Import all approved translations
        with dbuser("poimport"):
            importer = TranslationsImport('poimport',
                                          logger=self.logger,
                                          test_args=[])
            importer.main()

        # Test if all translations in the queue were successfully imported
        self.assertContentEqual(
            self._getImportableFilesFromTarball(),
            self._getQueuePaths(import_status=RosettaImportStatus.IMPORTED))