def _getContents(self): """Return branch contents as dict mapping filenames to contents.""" return map_branch_contents(self.committer.db_branch.getBzrBranch())
def test_translations_export_to_branch(self): # End-to-end test of the script doing its work. # Set up a server for hosted branches. self.useBzrBranches(direct_database=False) # Set up a product and translatable series. product = self.factory.makeProduct(name='committobranch') product = removeSecurityProxy(product) series = product.getSeries('trunk') # Set up a translations_branch for the series. db_branch, tree = self.create_branch_and_tree(product=product) removeSecurityProxy(db_branch).last_scanned_id = 'null:' product.translations_usage = ServiceUsage.LAUNCHPAD series.translations_branch = db_branch # Set up a template & Dutch translation for the series. template = self.factory.makePOTemplate(productseries=series, owner=product.owner, name='foo', path='po/messages.pot') template = removeSecurityProxy(template) potmsgset = self.factory.makePOTMsgSet(template, singular='Hello World', sequence=1) pofile = self.factory.makePOFile('nl', potemplate=template, owner=product.owner) self.factory.makeCurrentTranslationMessage( pofile=pofile, potmsgset=potmsgset, translator=product.owner, reviewer=product.owner, translations=['Hallo Wereld']) # Make all this visible to the script we're about to run. transaction.commit() # Run The Script. retcode, stdout, stderr = run_script( 'cronscripts/translations-export-to-branch.py', ['-vvv']) self.assertEqual('', stdout) self.assertEqual( 'INFO ' 'Creating lockfile: ' '/var/lock/launchpad-translations-export-to-branch.lock\n' 'INFO Exporting to translations branches.\n' 'INFO Exporting Committobranch trunk series.\n' 'INFO ' 'Processed 1 item(s); 0 failure(s), 0 unpushed branch(es).', self._filterOutput(stderr)) self.assertIn('No previous translations commit found.', stderr) self.assertEqual(0, retcode) # The branch now contains a snapshot of the translation. (Only # one file: the Dutch translation we set up earlier). branch_contents = map_branch_contents(db_branch.getBzrBranch()) expected_contents = { 'po/nl.po': """ # Dutch translation for .* # Copyright .* (?:#.*$ )*msgid "" msgstr "" (?:"[^"]*" )* msgid "Hello World" msgstr "Hallo Wereld"\n""", } branch_filenames = set(branch_contents.iterkeys()) expected_filenames = set(expected_contents.iterkeys()) unexpected_filenames = branch_filenames - expected_filenames self.assertEqual(set(), unexpected_filenames) missing_filenames = expected_filenames - branch_filenames self.assertEqual(set(), missing_filenames) for filename, expected in expected_contents.iteritems(): contents = branch_contents[filename].lstrip('\n') pattern = dedent(expected.lstrip('\n')) if not re.match(pattern, contents, re.MULTILINE): self.assertEqual(pattern, contents) # If we run the script again at this point, it won't export # anything because it sees that the POFile has not been changed # since the last export. retcode, stdout, stderr = run_script( 'cronscripts/translations-export-to-branch.py', ['-vvv', '--no-fudge']) self.assertEqual(0, retcode) self.assertIn('Last commit was at', stderr) self.assertIn( "Processed 1 item(s); 0 failure(s), 0 unpushed branch(es).", stderr) self.assertEqual(None, re.search("INFO\s+Committed [0-9]+ file", stderr))
def test_translations_export_to_branch(self): # End-to-end test of the script doing its work. # Set up a server for hosted branches. self.useBzrBranches(direct_database=False) # Set up a product and translatable series. product = self.factory.makeProduct(name='committobranch') product = removeSecurityProxy(product) series = product.getSeries('trunk') # Set up a translations_branch for the series. db_branch, tree = self.create_branch_and_tree(product=product) removeSecurityProxy(db_branch).last_scanned_id = 'null:' product.translations_usage = ServiceUsage.LAUNCHPAD series.translations_branch = db_branch # Set up a template & Dutch translation for the series. template = self.factory.makePOTemplate( productseries=series, owner=product.owner, name='foo', path='po/messages.pot') template = removeSecurityProxy(template) potmsgset = self.factory.makePOTMsgSet( template, singular='Hello World', sequence=1) pofile = self.factory.makePOFile( 'nl', potemplate=template, owner=product.owner) self.factory.makeCurrentTranslationMessage( pofile=pofile, potmsgset=potmsgset, translator=product.owner, reviewer=product.owner, translations=['Hallo Wereld']) # Make all this visible to the script we're about to run. transaction.commit() # Run The Script. retcode, stdout, stderr = run_script( 'cronscripts/translations-export-to-branch.py', ['-vvv']) self.assertEqual('', stdout) self.assertEqual( 'INFO ' 'Creating lockfile: ' '/var/lock/launchpad-translations-export-to-branch.lock\n' 'INFO Exporting to translations branches.\n' 'INFO Exporting Committobranch trunk series.\n' 'INFO ' 'Processed 1 item(s); 0 failure(s), 0 unpushed branch(es).', self._filterOutput(stderr)) self.assertIn('No previous translations commit found.', stderr) self.assertEqual(0, retcode) # The branch now contains a snapshot of the translation. (Only # one file: the Dutch translation we set up earlier). branch_contents = map_branch_contents(db_branch.getBzrBranch()) expected_contents = { 'po/nl.po': """ # Dutch translation for .* # Copyright .* (?:#.*$ )*msgid "" msgstr "" (?:"[^"]*" )* msgid "Hello World" msgstr "Hallo Wereld"\n""", } branch_filenames = set(branch_contents.iterkeys()) expected_filenames = set(expected_contents.iterkeys()) unexpected_filenames = branch_filenames - expected_filenames self.assertEqual(set(), unexpected_filenames) missing_filenames = expected_filenames - branch_filenames self.assertEqual(set(), missing_filenames) for filename, expected in expected_contents.iteritems(): contents = branch_contents[filename].lstrip('\n') pattern = dedent(expected.lstrip('\n')) if not re.match(pattern, contents, re.MULTILINE): self.assertEqual(pattern, contents) # If we run the script again at this point, it won't export # anything because it sees that the POFile has not been changed # since the last export. retcode, stdout, stderr = run_script( 'cronscripts/translations-export-to-branch.py', ['-vvv', '--no-fudge']) self.assertEqual(0, retcode) self.assertIn('Last commit was at', stderr) self.assertIn( "Processed 1 item(s); 0 failure(s), 0 unpushed branch(es).", stderr) self.assertEqual( None, re.search("INFO\s+Committed [0-9]+ file", stderr))