Jeroen T. Vermeulen has proposed merging 
lp:~jtv/launchpad/recife-pre-resetCurrentTranslation into 
lp:~launchpad/launchpad/recife.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers): code


= Helpers for resetCurrentTranslation work =

This goes into the Recife feature branch.  It adds two helpers that became 
necessary for a later branch:

1. LaunchpadObjectFactory.makeDivergedTranslationMessage.  Creates a 
TranslationMessage that's current and diverged.  In the Recife work's current 
transient state, we have no proper way of doing this.  At least this way we get 
to sweep all the dirt under a single rug until we can clean it up properly.

2. POFile.markChanged updates a POFile's last-change date and, optionally, the 
last translator.  This is cleaner than messing with the POFile's attributes 
directly elsewhere.

Finally (but all the way at the top) it fixes an omission that causes trouble 
in later branches:

3. LaunchpadObjectFactory.makeCurrentTranslation neglected to set the new 
message's reviewer as expected.

To test,
{{{
./bin/test -vvc -m lp.testing.tests.test_factory
}}}

No lint.


Jeroen
-- 
https://code.launchpad.net/~jtv/launchpad/recife-pre-resetCurrentTranslation/+merge/33490
Your team Launchpad code reviewers is requested to review the proposed merge of 
lp:~jtv/launchpad/recife-pre-resetCurrentTranslation into 
lp:~launchpad/launchpad/recife.
=== modified file 'lib/lp/testing/factory.py'
--- lib/lp/testing/factory.py	2010-08-19 09:37:13 +0000
+++ lib/lp/testing/factory.py	2010-08-24 06:28:45 +0000
@@ -165,6 +165,7 @@
     time_counter,
     )
 from lp.translations.interfaces.potemplate import IPOTemplateSet
+from lp.translations.interfaces.side import ITranslationSideTraitsSet
 from lp.translations.interfaces.translationimportqueue import (
     RosettaImportStatus)
 from lp.translations.interfaces.translationfileformat import (
@@ -2196,6 +2197,26 @@
         if diverged:
             removeSecurityProxy(message).potemplate = pofile.potemplate
 
+        message.markReviewed(reviewer)
+        return message
+
+    def makeDivergedTranslationMessage(self, pofile=None, potmsgset=None,
+                                       translator=None, reviewer=None,
+                                       translations=None):
+        """Create a diverged, current `TranslationMessage`."""
+        if pofile is None:
+            pofile = self.makePOFile('lt')
+
+        # XXX JeroenVermeulen 2010-08-24: This creates a suggestion,
+        # then diverges it, then activates it.  Once we have a method
+        # for diverging messages, do this in a more proper way.
+        message = self.makeSharedTranslationMessage(
+            pofile=pofile, potmsgset=potmsgset, translator=translator,
+            reviewer=reviewer, translations=translations, suggestion=True)
+        traits = getUtility(ITranslationSideTraitsSet).getTraits(
+            pofile.potemplate.translation_side)
+        removeSecurityProxy(message).potemplate = pofile.potemplate
+        traits.setFlag(message, True)
         return message
 
     def makeTranslation(self, pofile, sequence,

=== modified file 'lib/lp/testing/tests/test_factory.py'
--- lib/lp/testing/tests/test_factory.py	2010-08-19 09:37:13 +0000
+++ lib/lp/testing/tests/test_factory.py	2010-08-24 06:28:45 +0000
@@ -517,6 +517,41 @@
             translations, [tm.msgstr0.translation, tm.msgstr1.translation])
         self.assertIs(None, tm.msgstr2)
 
+    def test_makeCurrentTranslationMessage_sets_reviewer(self):
+        reviewer = self.factory.makePerson()
+
+        tm = self.factory.makeCurrentTranslationMessage(reviewer=reviewer)
+
+        self.assertEqual(reviewer, tm.reviewer)
+
+    def test_makeCurrentTranslationMessage_creates_reviewer(self):
+        tm = self.factory.makeCurrentTranslationMessage(reviewer=None)
+
+        self.assertNotEqual(None, tm.reviewer)
+
+    def test_makeDivergedTranslationMessage_upstream(self):
+        pofile = self.factory.makePOFile('ca')
+
+        tm = self.factory.makeDivergedTranslationMessage(pofile=pofile)
+
+        self.assertTrue(tm.is_current_upstream)
+        self.assertFalse(tm.is_current_ubuntu)
+        self.assertTrue(tm.is_diverged)
+        self.assertEqual(pofile.potemplate, tm.potemplate)
+
+    def test_makeDivergedTranslationMessage_ubuntu(self):
+        potemplate = self.factory.makePOTemplate(
+            distroseries=self.factory.makeDistroSeries(),
+            sourcepackagename=self.factory.makeSourcePackageName())
+        pofile = self.factory.makePOFile('eu', potemplate=potemplate)
+
+        tm = self.factory.makeDivergedTranslationMessage(pofile=pofile)
+
+        self.assertTrue(tm.is_current_ubuntu)
+        self.assertFalse(tm.is_current_upstream)
+        self.assertTrue(tm.is_diverged)
+        self.assertEqual(pofile.potemplate, tm.potemplate)
+
 
 class TestFactoryWithLibrarian(TestCaseWithFactory):
 

=== modified file 'lib/lp/translations/interfaces/pofile.py'
--- lib/lp/translations/interfaces/pofile.py	2010-08-10 14:39:46 +0000
+++ lib/lp/translations/interfaces/pofile.py	2010-08-24 06:28:45 +0000
@@ -281,6 +281,9 @@
         :return: a list of `VPOExport` objects.
         """
 
+    def markChanged(translator=None, timestamp=None):
+        """Note a change to this `POFile` or its contents."""
+
 
 class AlternativeLanguageVocabularyFactory:
     """Gets vocab for user's preferred languages, or all languages if not set.

=== modified file 'lib/lp/translations/model/pofile.py'
--- lib/lp/translations/model/pofile.py	2010-08-17 09:55:30 +0000
+++ lib/lp/translations/model/pofile.py	2010-08-24 06:28:45 +0000
@@ -417,6 +417,14 @@
         """See `IPOFile`."""
         return TranslatableMessage(potmsgset, self)
 
+    def markChanged(self, translator=None, timestamp=None):
+        """See `IPOFile`."""
+        if timestamp is None:
+            timestamp = UTC_NOW
+        self.date_changed = timestamp
+        if translator is not None:
+            self.lasttranslator = translator
+
 
 class POFile(SQLBase, POFileMixIn):
     implements(IPOFile)

=== modified file 'lib/lp/translations/tests/test_pofile.py'
--- lib/lp/translations/tests/test_pofile.py	2010-08-17 09:55:30 +0000
+++ lib/lp/translations/tests/test_pofile.py	2010-08-24 06:28:45 +0000
@@ -11,6 +11,8 @@
 from zope.interface.verify import verifyObject
 from zope.security.proxy import removeSecurityProxy
 
+from canonical.database.constants import UTC_NOW
+
 from lp.translations.interfaces.pofile import IPOFileSet
 from lp.translations.interfaces.translatablemessage import (
     ITranslatableMessage)
@@ -1776,6 +1778,26 @@
                 "getTranslationRows does not sort obsolete messages "
                 "(sequence=0) to the end of the file.")
 
+    def test_markChanged_sets_date(self):
+        timestamp = datetime.now(pytz.UTC) - timedelta(days=14)
+        self.pofile.markChanged(timestamp=timestamp)
+        self.assertEqual(timestamp, self.pofile.date_changed)
+
+    def test_markChanged_defaults_to_now(self):
+        self.pofile.date_changed = datetime.now(pytz.UTC) - timedelta(days=99)
+        self.pofile.markChanged()
+        self.assertEqual(UTC_NOW, self.pofile.date_changed)
+
+    def test_markChanged_leaves_lasttranslator_unchanged(self):
+        old_lasttranslator = self.pofile.lasttranslator
+        self.pofile.markChanged()
+        self.assertEqual(old_lasttranslator, self.pofile.lasttranslator)
+
+    def test_markChanged_sets_lasttranslator(self):
+        translator = self.factory.makePerson()
+        self.pofile.markChanged(translator=translator)
+        self.assertEqual(translator, self.pofile.lasttranslator)
+
 
 class TestPOFileToTranslationFileDataAdapter(TestCaseWithFactory):
     """Test POFile being adapted to IPOFileToTranslationFileData."""

_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help   : https://help.launchpad.net/ListHelp

Reply via email to