Merge lp:~henninge/launchpad/bug-595925-second-attempt into lp:~launchpad/launchpad/recife

Proposed by Henning Eggers
Status: Merged
Approved by: Jeroen T. Vermeulen
Approved revision: no longer in the source branch.
Merged at revision: 9156
Proposed branch: lp:~henninge/launchpad/bug-595925-second-attempt
Merge into: lp:~launchpad/launchpad/recife
Diff against target: 1856 lines (+498/-406)
12 files modified
lib/lp/testing/factory.py (+37/-2)
lib/lp/translations/browser/tests/test_pofile_view.py (+2/-8)
lib/lp/translations/browser/tests/test_translationmessage_view.py (+14/-7)
lib/lp/translations/browser/translationmessage.py (+3/-7)
lib/lp/translations/tests/test_pofile.py (+342/-299)
lib/lp/translations/tests/test_potmsgset.py (+49/-54)
lib/lp/translations/tests/test_translatablemessage.py (+16/-12)
lib/lp/translations/tests/test_translations_to_review.py (+4/-2)
lib/lp/translations/utilities/sanitize.py (+4/-3)
lib/lp/translations/utilities/tests/test_sanitize.py (+19/-6)
lib/lp/translations/utilities/tests/test_superfastimports.py (+2/-2)
lib/lp/translations/windmill/tests/test_pofile_translate.py (+6/-4)
To merge this branch: bzr merge lp:~henninge/launchpad/bug-595925-second-attempt
Reviewer Review Type Date Requested Status
Jeroen T. Vermeulen (community) code Approve
Review via email: mp+32736@code.launchpad.net

Description of the change

= Bug 595925 =

This branch only replaces calls in test code. The two production call sites will be updated in later branches. The first call site is in the view code and depends on bug 597539 being fixed or else many page tests do fail (I tried). The second is in the import code and requires some untangling or restructuring of code.

== Implementation details ==

This branch creates a new factory method "makeSuggestion" that makes use of the new "submitSuggestion" method. This factory method is then used in all test locations where "makeTranslationMessage(suggestion=True)" was used before.

In test_pofile.py I created TestTranslationSharedPOFileSourcePackage to move some tests there that were failing in TestTranslationSharedPOFile because it uses a product series.

I also fixed some tests in test_potmsgset.py that were using "set" to compare lists instead of assertContentEqual. Probably my doing.

I made sanitize_translations_from_webui work with lists for the translations because that is nice and robust.

I had to add an XXX to a windmill test because it depends on bug 597539, too.

== Tests ==

Run all the changed tests.

bin/test -vvcm lp.translations.browser.tests \
    -t test_pofile_view \
    -t test_translationmessage_view \
    -t translationmessage
bin/test -vvcm lp.translations.tests \
    -t test_pofile \
    -t test_potmsgset \
    -t test_translatablemessage \
    -t test_translations_to_review
bin/test -vvcm lp.translations.utilities.tests \
    -t test_sanitize \
    -t test_superfastimports
bin/test -vvcm lp.translations.windmill.tests \
    -t test_pofile_translate

But I already ran the full test suite on the branch successfully. ;-)

= Launchpad lint =

Checking for conflicts and issues in changed files.

Linting changed files:
  lib/lp/testing/factory.py
  lib/lp/translations/browser/translationmessage.py
  lib/lp/translations/browser/tests/test_pofile_view.py
  lib/lp/translations/browser/tests/test_translationmessage_view.py
  lib/lp/translations/tests/test_pofile.py
  lib/lp/translations/tests/test_potmsgset.py
  lib/lp/translations/tests/test_translatablemessage.py
  lib/lp/translations/tests/test_translations_to_review.py
  lib/lp/translations/utilities/sanitize.py
  lib/lp/translations/utilities/tests/test_sanitize.py
  lib/lp/translations/utilities/tests/test_superfastimports.py
  lib/lp/translations/windmill/tests/test_pofile_translate.py

./lib/lp/testing/factory.py
    2873: E301 expected 1 blank line, found 2
./lib/lp/translations/browser/translationmessage.py
     293: W602 deprecated form of raising exception
     300: W602 deprecated form of raising exception
     313: W602 deprecated form of raising exception
     339: E301 expected 1 blank line, found 2
     367: E301 expected 1 blank line, found 2
     511: E301 expected 1 blank line, found 2
     744: E301 expected 1 blank line, found 2
     827: E301 expected 1 blank line, found 2
     894: E301 expected 1 blank line, found 2
    1337: E301 expected 1 blank line, found 2
    1475: E302 expected 2 blank lines, found 3
    1509: E302 expected 2 blank lines, found 3
    1556: E302 expected 2 blank lines, found 1
./lib/lp/translations/tests/test_potmsgset.py
    1592: E202 whitespace before ']'

To post a comment you must log in.
Revision history for this message
Jeroen T. Vermeulen (jtv) wrote :
Download full text (5.9 KiB)

Wow, big branch. I know it wasn't easy. Lots of goodness here, including lint cleanups all over the place. But you also inherited some uglier things, and it seems to me that your "make lint" run was incomplete somehow. I hope we can make some more headway with that, but in the interest of getting the branch in it's not as important as cleaning up the new bits.

We discussed some of these on IRC, but most we didn't.

=== lib/lp/testing/factory.py ===

Might as well make the "translations" parameter to _makeTranslationsDict default to None.

The docstring for _makeTranslationsDict goes "Make sure translations are in the right format." That's a bit ambiguous as to what happens when the translations are not in the right format. Consider saying something like "Convert translations" (and adding a note saying that it returns the original translations if they are already in the desired format).

In the same docstring, don't lead with "the right format"--name the format! An example like '{0: "foo"}' may say it most effectively.

Naming all types of sequence that might make up a non-dict translations list is probably a losing game: is it really necessary to accept tuples? What about ResultSets? If it's really needed, consider rearranging the conditions: "if translations is None / elif isinstance(translations, dict) / else" (where the "else" part returns dict(enumerate(translations))).

In makeSuggestion: it's no longer necessary to setSequence on a POTMsgSet you get from makePOTMsgSet. Just pass a sequence number to makePOTMsgSet.

In makeSuggestion, this line lacks spaces around the assignment operator:

        translations=self._makeTranslationsDict(translations)

And why does it set naked_translation_message.date_created to date_updated? I'd expect date_updated to set date_updated, not date_created.

== lib/lp/translations/browser/tests/test_pofile_view.py ==

Thanks for cleaning up the lint! While you're at it, could you chuck the entire test_suite function? We no longer need those, so they're just cruft now.

== lib/lp/translations/browser/translationmessage.py ==

More lint cleanups. Good show.

== lib/lp/translations/tests/test_pofile.py ==

There's a lot of code here that you clearly only moved, so you're probably more a victim than a perpetrator. But still I hope you can fix some of this, if it doesn't mean too much extra work.

In setUp, this comment:

# POTemplate is 'shared' if it has the same name ('messages').

...is rather confusing. I'd rather say that two POTemplates share if they have the same name. And separately, that these particular two templates both have "messages" for a name.

In the names devel_sr_pofile and stable_sr_pofile, unless the "sr" part is actually relevant to the tests, I'd leave it out of the names.

This comment:

# Create a single POTMsgSet that is used across all tests,
# and add it to only one of the POTemplates.

...commits the standard mistake of repeating what the code does. That's useless. The only interesting part is that the potmsgset is only added to one of the templates... *Why* is that?

And right below that, once again: no need to self.potmsgset.setSequence. Just pass the seq...

Read more...

Revision history for this message
Henning Eggers (henninge) wrote :
Download full text (8.4 KiB)

Am 16.08.2010 16:37, schrieb Jeroen T. Vermeulen:
> Wow, big branch. I know it wasn't easy. Lots of goodness here, including lint cleanups all over the place. But you also inherited some uglier things, and it seems to me that your "make lint" run was incomplete somehow. I hope we can make some more headway with that, but in the interest of getting the branch in it's not as important as cleaning up the new bits.
>
> We discussed some of these on IRC, but most we didn't.
>
>
> === lib/lp/testing/factory.py ===
>
> Might as well make the "translations" parameter to _makeTranslationsDict default to None.
>
> The docstring for _makeTranslationsDict goes "Make sure translations are in the right format." That's a bit ambiguous as to what happens when the translations are not in the right format. Consider saying something like "Convert translations" (and adding a note saying that it returns the original translations if they are already in the desired format).
>
> In the same docstring, don't lead with "the right format"--name the format! An example like '{0: "foo"}' may say it most effectively.
>
> Naming all types of sequence that might make up a non-dict translations list is probably a losing game: is it really necessary to accept tuples? What about ResultSets? If it's really needed, consider rearranging the conditions: "if translations is None / elif isinstance(translations, dict) / else" (where the "else" part returns dict(enumerate(translations))).

I fixed all this as per our IRC discussion.

>
> In makeSuggestion: it's no longer necessary to setSequence on a POTMsgSet you get from makePOTMsgSet. Just pass a sequence number to makePOTMsgSet.

Ah yes, I copied and pasted makeSuggestion from makeTranslationMessage. I
added fixed it there, too. Funny enough, it was me who introduced the
parameter to the factory method in the first place. ;)

>
> In makeSuggestion, this line lacks spaces around the assignment operator:
>
> translations=self._makeTranslationsDict(translations)

Yes, I had it directly in the function call at first. Thanks.

>
> And why does it set naked_translation_message.date_created to date_updated? I'd expect date_updated to set date_updated, not date_created.
>

Again, copied from makeTranslationMessage where it is a bit more approriate
although it sets "date_created" and "date_reviewed" there. I renamed the
parameter in makeSuggestion to date_created and update all call sites.

>
> == lib/lp/translations/browser/tests/test_pofile_view.py ==
>
> Thanks for cleaning up the lint! While you're at it, could you chuck the entire test_suite function? We no longer need those, so they're just cruft now.

Ah yes, right. I am always happy to remove cruft! ;-)

>
>
> == lib/lp/translations/browser/translationmessage.py ==
>
> More lint cleanups. Good show.

Thank you for the applause! ;)

>
>
> == lib/lp/translations/tests/test_pofile.py ==
>
> There's a lot of code here that you clearly only moved, so you're probably more a victim than a perpetrator. But still I hope you can fix some of this, if it doesn't mean too much extra work.

Well, let's see .. ;-)

>
> In setUp, this comment:
>
> # POT...

Read more...

=== modified file 'lib/lp/testing/factory.py'
--- lib/lp/testing/factory.py 2010-08-16 09:10:59 +0000
+++ lib/lp/testing/factory.py 2010-08-16 15:07:24 +0000
@@ -2057,8 +2057,7 @@
2057 if pofile is None:2057 if pofile is None:
2058 pofile = self.makePOFile('sr')2058 pofile = self.makePOFile('sr')
2059 if potmsgset is None:2059 if potmsgset is None:
2060 potmsgset = self.makePOTMsgSet(pofile.potemplate)2060 potmsgset = self.makePOTMsgSet(pofile.potemplate, sequence=1)
2061 potmsgset.setSequence(pofile.potemplate, 1)
2062 if translator is None:2061 if translator is None:
2063 translator = self.makePerson()2062 translator = self.makePerson()
2064 if translations is None:2063 if translations is None:
@@ -2077,37 +2076,39 @@
2077 naked_translation_message.sync()2076 naked_translation_message.sync()
2078 return translation_message2077 return translation_message
20792078
2080 def _makeTranslationsDict(self, translations):2079 def _makeTranslationsDict(self, translations=None):
2081 """Make sure translations are in the right format (dict, not list).2080 """Make sure translations are stored in a dict, e.g. {0: "foo"}.
20822081
2083 Create an arbitrary single translation if translations are None.2082 If translations is already dict, it is returned unchanged.
2083 If translations is a sequence, it is enumerated into a dict.
2084 If translations is None, an arbitrary single translation is created.
2084 """2085 """
2085 if translations is None:2086 if translations is None:
2086 return {0: self.getUniqueString()}2087 return {0: self.getUniqueString()}
2087 if isinstance(translations, (tuple, list)):2088 if isinstance(translations, dict):
2088 return dict(enumerate(translations))2089 return translations
2089 assert isinstance(translations, dict)2090 assert isinstance(translations, (list, tuple)), (
2090 return translations2091 "Expecting either a dict or a sequence." )
2092 return dict(enumerate(translations))
20912093
2092 def makeSuggestion(self, pofile=None, potmsgset=None, translator=None,2094 def makeSuggestion(self, pofile=None, potmsgset=None, translator=None,
2093 translations=None, date_updated=None):2095 translations=None, date_created=None):
2094 """Make a new suggested `TranslationMessage` in the given PO file."""2096 """Make a new suggested `TranslationMessage` in the given PO file."""
2095 if pofile is None:2097 if pofile is None:
2096 pofile = self.makePOFile('sr')2098 pofile = self.makePOFile('sr')
2097 if potmsgset is None:2099 if potmsgset is None:
2098 potmsgset = self.makePOTMsgSet(pofile.potemplate)2100 potmsgset = self.makePOTMsgSet(pofile.potemplate, sequence=1)
2099 potmsgset.setSequence(pofile.potemplate, 1)
2100 if translator is None:2101 if translator is None:
2101 translator = self.makePerson()2102 translator = self.makePerson()
2102 translations=self._makeTranslationsDict(translations)2103 translations = self._makeTranslationsDict(translations)
2103 translation_message = potmsgset.submitSuggestion(2104 translation_message = potmsgset.submitSuggestion(
2104 pofile, translator, translations)2105 pofile, translator, translations)
2105 assert translation_message is not None, (2106 assert translation_message is not None, (
2106 "Cannot make suggestion on translation credits POTMsgSet.")2107 "Cannot make suggestion on translation credits POTMsgSet.")
2107 if date_updated is not None:2108 if date_created is not None:
2108 naked_translation_message = removeSecurityProxy(2109 naked_translation_message = removeSecurityProxy(
2109 translation_message)2110 translation_message)
2110 naked_translation_message.date_created = date_updated2111 naked_translation_message.date_created = date_created
2111 naked_translation_message.sync()2112 naked_translation_message.sync()
2112 return translation_message2113 return translation_message
21132114
21142115
=== modified file 'lib/lp/translations/browser/tests/test_pofile_view.py'
--- lib/lp/translations/browser/tests/test_pofile_view.py 2010-08-16 09:01:35 +0000
+++ lib/lp/translations/browser/tests/test_pofile_view.py 2010-08-16 15:18:40 +0000
@@ -46,7 +46,7 @@
46 self.pofile, self.new_suggestion,46 self.pofile, self.new_suggestion,
47 date_updated=self.now())47 date_updated=self.now())
48 self.factory.makeSuggestion(48 self.factory.makeSuggestion(
49 self.pofile, self.new_suggestion, date_updated=self.now())49 self.pofile, self.new_suggestion, date_created=self.now())
50 # An upstream that was changed in Ubuntu.50 # An upstream that was changed in Ubuntu.
51 self.changed = self.factory.makePOTMsgSet(51 self.changed = self.factory.makePOTMsgSet(
52 self.potemplate, sequence=4)52 self.potemplate, sequence=4)
@@ -170,7 +170,3 @@
170 def setUp(self):170 def setUp(self):
171 super(TestPOFileTranslateViewInvalidFiltering, self).setUp()171 super(TestPOFileTranslateViewInvalidFiltering, self).setUp()
172 self.pofile = self.factory.makePOFile('eo')172 self.pofile = self.factory.makePOFile('eo')
173
174
175def test_suite():
176 return TestLoader().loadTestsFromName(__name__)
177173
=== modified file 'lib/lp/translations/browser/tests/test_translationmessage_view.py'
--- lib/lp/translations/browser/tests/test_translationmessage_view.py 2010-08-11 10:37:59 +0000
+++ lib/lp/translations/browser/tests/test_translationmessage_view.py 2010-08-16 15:11:30 +0000
@@ -56,7 +56,7 @@
56 self.pofile, self.potmsgset,56 self.pofile, self.potmsgset,
57 translations=translations,57 translations=translations,
58 translator=self.owner,58 translator=self.owner,
59 date_updated=self.now())59 date_created=self.now())
60 else:60 else:
61 message = self.factory.makeTranslationMessage(61 message = self.factory.makeTranslationMessage(
62 self.pofile, self.potmsgset,62 self.pofile, self.potmsgset,
6363
=== modified file 'lib/lp/translations/tests/test_pofile.py'
--- lib/lp/translations/tests/test_pofile.py 2010-08-13 14:24:30 +0000
+++ lib/lp/translations/tests/test_pofile.py 2010-08-16 15:56:36 +0000
@@ -1,8 +1,6 @@
1# Copyright 2009-2010 Canonical Ltd. This software is licensed under the1# Copyright 2009-2010 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).2# GNU Affero General Public License version 3 (see the file LICENSE).
33
4# pylint: disable-msg=C0102
5
6__metaclass__ = type4__metaclass__ = type
75
8from datetime import datetime, timedelta6from datetime import datetime, timedelta
@@ -43,7 +41,8 @@
43 self.foo.official_rosetta = True41 self.foo.official_rosetta = True
44 self.sourcepackagename = self.factory.makeSourcePackageName()42 self.sourcepackagename = self.factory.makeSourcePackageName()
4543
46 # POTemplate is 'shared' if it has the same name ('messages').44 # Two POTemplates share translations if they have the same name,
45 # in this case 'messages'.
47 self.devel_potemplate = self.factory.makePOTemplate(46 self.devel_potemplate = self.factory.makePOTemplate(
48 distroseries=self.foo_devel,47 distroseries=self.foo_devel,
49 sourcepackagename=self.sourcepackagename,48 sourcepackagename=self.sourcepackagename,
@@ -54,41 +53,40 @@
54 name="messages")53 name="messages")
5554
56 # We'll use two PO files, one for each series.55 # We'll use two PO files, one for each series.
57 self.devel_sr_pofile = self.factory.makePOFile(56 self.devel_pofile = self.factory.makePOFile(
58 'sr', self.devel_potemplate)57 'sr', self.devel_potemplate)
59 self.stable_sr_pofile = self.factory.makePOFile(58 self.stable_pofile = self.factory.makePOFile(
60 'sr', self.stable_potemplate)59 'sr', self.stable_potemplate)
6160
62 # Create a single POTMsgSet that is used across all tests,61 # The POTMsgSet is added to only one of the POTemplates.
63 # and add it to only one of the POTemplates.62 self.potmsgset = self.factory.makePOTMsgSet(
64 self.potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)63 self.devel_potemplate, sequence=1)
65 self.potmsgset.setSequence(self.devel_potemplate, 1)
6664
67 def test_getPOTMsgSetWithNewSuggestions_Shared(self):65 def test_getPOTMsgSetWithNewSuggestions_shared(self):
68 # Test listing of suggestions for POTMsgSets with a shared66 # Test listing of suggestions for POTMsgSets with a shared
69 # translation.67 # translation.
7068
71 # A POTMsgSet has a shared, current translation created 5 days ago.69 # A POTMsgSet has a shared, current translation created 5 days ago.
72 date_created = datetime.now(pytz.UTC)-timedelta(5)70 date_created = datetime.now(pytz.UTC) - timedelta(5)
73 translation = self.factory.makeSuggestion(71 translation = self.factory.makeSuggestion(
74 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,72 pofile=self.devel_pofile, potmsgset=self.potmsgset,
75 translations=[u"Translation"], date_updated=date_created)73 translations=[u"Translation"], date_created=date_created)
76 translation.is_current_ubuntu= True74 translation.is_current_ubuntu = True
7775
78 # When there are no suggestions, nothing is returned.76 # When there are no suggestions, nothing is returned.
79 found_translations = list(77 found_translations = list(
80 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())78 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
81 self.assertEquals(found_translations, [])79 self.assertEquals(found_translations, [])
8280
83 # When a suggestion is added one day after, the potmsgset is returned.81 # When a suggestion is added one day after, the potmsgset is returned.
84 suggestion_date = date_created + timedelta(1)82 suggestion_date = date_created + timedelta(1)
85 suggestion = self.factory.makeSuggestion(83 suggestion = self.factory.makeSuggestion(
86 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,84 pofile=self.devel_pofile, potmsgset=self.potmsgset,
87 translations=[u"Suggestion"], date_updated=suggestion_date)85 translations=[u"Suggestion"], date_created=suggestion_date)
88 self.assertEquals(suggestion.is_current_ubuntu, False)86 self.assertEquals(suggestion.is_current_ubuntu, False)
8987
90 found_translations = list(88 found_translations = list(
91 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())89 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
92 self.assertEquals(found_translations, [self.potmsgset])90 self.assertEquals(found_translations, [self.potmsgset])
9391
94 # Setting a suggestion as current makes it have no unreviewed92 # Setting a suggestion as current makes it have no unreviewed
@@ -96,22 +94,22 @@
96 translation.is_current_ubuntu = False94 translation.is_current_ubuntu = False
97 suggestion.is_current_ubuntu = True95 suggestion.is_current_ubuntu = True
98 found_translations = list(96 found_translations = list(
99 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())97 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
100 self.assertEquals(found_translations, [])98 self.assertEquals(found_translations, [])
10199
102 # And adding another suggestion 2 days later, the potmsgset is100 # And adding another suggestion 2 days later, the potmsgset is
103 # again returned.101 # again returned.
104 suggestion_date += timedelta(2)102 suggestion_date += timedelta(2)
105 translation = self.factory.makeSuggestion(103 translation = self.factory.makeSuggestion(
106 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,104 pofile=self.devel_pofile, potmsgset=self.potmsgset,
107 translations=[u"New suggestion"], date_updated=suggestion_date)105 translations=[u"New suggestion"], date_created=suggestion_date)
108 self.assertEquals(translation.is_current_ubuntu, False)106 self.assertEquals(translation.is_current_ubuntu, False)
109107
110 found_translations = list(108 found_translations = list(
111 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())109 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
112 self.assertEquals(found_translations, [self.potmsgset])110 self.assertEquals(found_translations, [self.potmsgset])
113111
114 def test_getPOTMsgSetWithNewSuggestions_Diverged(self):112 def test_getPOTMsgSetWithNewSuggestions_diverged(self):
115 # Test listing of suggestions for POTMsgSets with a shared113 # Test listing of suggestions for POTMsgSets with a shared
116 # translation and a later diverged one.114 # translation and a later diverged one.
117115
@@ -124,18 +122,18 @@
124 # * Suggestion is made active (nothing).122 # * Suggestion is made active (nothing).
125123
126 # A POTMsgSet has a shared, current translation created 5 days ago.124 # A POTMsgSet has a shared, current translation created 5 days ago.
127 date_created = datetime.now(pytz.UTC)-timedelta(5)125 date_created = datetime.now(pytz.UTC) - timedelta(5)
128 translation = self.factory.makeSuggestion(126 translation = self.factory.makeSuggestion(
129 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,127 pofile=self.devel_pofile, potmsgset=self.potmsgset,
130 translations=[u"Shared translation"], date_updated=date_created)128 translations=[u"Shared translation"], date_created=date_created)
131 translation.is_current_ubuntu = True129 translation.is_current_ubuntu = True
132130
133 # And we also have a diverged translation created a day after shared131 # And we also have a diverged translation created a day after a shared
134 # current translation.132 # current translation.
135 diverged_date = date_created + timedelta(1)133 diverged_date = date_created + timedelta(1)
136 diverged_translation = self.factory.makeSuggestion(134 diverged_translation = self.factory.makeSuggestion(
137 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,135 pofile=self.devel_pofile, potmsgset=self.potmsgset,
138 translations=[u"Old translation"], date_updated=diverged_date)136 translations=[u"Old translation"], date_created=diverged_date)
139 diverged_translation.potemplate = self.devel_potemplate137 diverged_translation.potemplate = self.devel_potemplate
140 diverged_translation.is_current_ubuntu = True138 diverged_translation.is_current_ubuntu = True
141139
@@ -143,37 +141,37 @@
143 # created 2 days after the shared translation.141 # created 2 days after the shared translation.
144 suggestion_date = date_created + timedelta(2)142 suggestion_date = date_created + timedelta(2)
145 suggestion = self.factory.makeSuggestion(143 suggestion = self.factory.makeSuggestion(
146 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,144 pofile=self.devel_pofile, potmsgset=self.potmsgset,
147 translations=[u"Shared suggestion"], date_updated=suggestion_date)145 translations=[u"Shared suggestion"], date_created=suggestion_date)
148 self.assertEquals(suggestion.is_current_ubuntu, False)146 self.assertEquals(suggestion.is_current_ubuntu, False)
149147
150 # Shared suggestion is shown since diverged_date < suggestion_date.148 # A suggestion is shown since diverged_date < suggestion_date.
151 found_translations = list(149 found_translations = list(
152 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())150 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
153 self.assertEquals(found_translations, [self.potmsgset])151 self.assertEquals(found_translations, [self.potmsgset])
154152
155 # When a diverged translation is done after the shared suggestion,153 # When a diverged translation is added after the shared suggestion,
156 # there are no unreviewed suggestions.154 # there are no unreviewed suggestions.
157 diverged_date = suggestion_date + timedelta(1)155 diverged_date = suggestion_date + timedelta(1)
158 diverged_translation_2 = self.factory.makeTranslationMessage(156 diverged_translation_2 = self.factory.makeTranslationMessage(
159 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,157 pofile=self.devel_pofile, potmsgset=self.potmsgset,
160 translations=[u"Translation"], date_updated=diverged_date)158 translations=[u"Translation"], date_updated=diverged_date)
161 diverged_translation.is_current_ubuntu = False159 diverged_translation.is_current_ubuntu = False
162 diverged_translation_2.potemplate = self.devel_potemplate160 diverged_translation_2.potemplate = self.devel_potemplate
163 diverged_translation_2.is_current_ubuntu = True161 diverged_translation_2.is_current_ubuntu = True
164 found_translations = list(162 found_translations = list(
165 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())163 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
166 self.assertEquals(found_translations, [])164 self.assertEquals(found_translations, [])
167165
168 # When a suggestion is added one day after, the potmsgset is returned.166 # When a suggestion is added one day after, the potmsgset is returned.
169 suggestion_date = diverged_date + timedelta(1)167 suggestion_date = diverged_date + timedelta(1)
170 suggestion = self.factory.makeSuggestion(168 suggestion = self.factory.makeSuggestion(
171 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,169 pofile=self.devel_pofile, potmsgset=self.potmsgset,
172 translations=[u"Suggestion"], date_updated=suggestion_date)170 translations=[u"Suggestion"], date_created=suggestion_date)
173 self.assertEquals(suggestion.is_current_ubuntu, False)171 self.assertEquals(suggestion.is_current_ubuntu, False)
174172
175 found_translations = list(173 found_translations = list(
176 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())174 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
177 self.assertEquals(found_translations, [self.potmsgset])175 self.assertEquals(found_translations, [self.potmsgset])
178176
179 # Setting a suggestion as current makes it have no unreviewed177 # Setting a suggestion as current makes it have no unreviewed
@@ -181,7 +179,7 @@
181 translation.is_current_ubuntu = False179 translation.is_current_ubuntu = False
182 suggestion.is_current_ubuntu = True180 suggestion.is_current_ubuntu = True
183 found_translations = list(181 found_translations = list(
184 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())182 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
185 self.assertEquals(found_translations, [])183 self.assertEquals(found_translations, [])
186184
187185
@@ -201,22 +199,22 @@
201 name='stable', product=self.foo)199 name='stable', product=self.foo)
202 self.foo.official_rosetta = True200 self.foo.official_rosetta = True
203201
204 # POTemplate is 'shared' if it has the same name ('messages').202 # Two POTemplates share translations if they have the same name,
203 # in this case 'messages'.
205 self.devel_potemplate = self.factory.makePOTemplate(204 self.devel_potemplate = self.factory.makePOTemplate(
206 productseries=self.foo_devel, name="messages")205 productseries=self.foo_devel, name="messages")
207 self.stable_potemplate = self.factory.makePOTemplate(self.foo_stable,206 self.stable_potemplate = self.factory.makePOTemplate(self.foo_stable,
208 name="messages")207 name="messages")
209208
210 # We'll use two PO files, one for each series.209 # We'll use two PO files, one for each series.
211 self.devel_sr_pofile = self.factory.makePOFile(210 self.devel_pofile = self.factory.makePOFile(
212 'sr', self.devel_potemplate)211 'sr', self.devel_potemplate)
213 self.stable_sr_pofile = self.factory.makePOFile(212 self.stable_pofile = self.factory.makePOFile(
214 'sr', self.stable_potemplate)213 'sr', self.stable_potemplate)
215214
216 # Create a single POTMsgSet that is used across all tests,215 # The POTMsgSet is added to only one of the POTemplates.
217 # and add it to only one of the POTemplates.216 self.potmsgset = self.factory.makePOTMsgSet(
218 self.potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)217 self.devel_potemplate, sequence=1)
219 self.potmsgset.setSequence(self.devel_potemplate, 1)
220218
221 def test_findPOTMsgSetsContaining(self):219 def test_findPOTMsgSetsContaining(self):
222 # Test that search works correctly.220 # Test that search works correctly.
@@ -227,14 +225,14 @@
227 potmsgset.setSequence(self.devel_potemplate, 2)225 potmsgset.setSequence(self.devel_potemplate, 2)
228226
229 found_potmsgsets = list(227 found_potmsgsets = list(
230 self.devel_sr_pofile.findPOTMsgSetsContaining(u"wild"))228 self.devel_pofile.findPOTMsgSetsContaining(u"wild"))
231 self.assertEquals(found_potmsgsets, [potmsgset])229 self.assertEquals(found_potmsgsets, [potmsgset])
232230
233 # Just linking an existing POTMsgSet into another POTemplate231 # Just linking an existing POTMsgSet into another POTemplate
234 # will make it be returned in searches.232 # will make it be returned in searches.
235 potmsgset.setSequence(self.stable_potemplate, 2)233 potmsgset.setSequence(self.stable_potemplate, 2)
236 found_potmsgsets = list(234 found_potmsgsets = list(
237 self.stable_sr_pofile.findPOTMsgSetsContaining(u"wild"))235 self.stable_pofile.findPOTMsgSetsContaining(u"wild"))
238 self.assertEquals(found_potmsgsets, [potmsgset])236 self.assertEquals(found_potmsgsets, [potmsgset])
239237
240 # Searching for singular in plural messages works as well.238 # Searching for singular in plural messages works as well.
@@ -244,49 +242,49 @@
244 plural_potmsgset.setSequence(self.devel_potemplate, 3)242 plural_potmsgset.setSequence(self.devel_potemplate, 3)
245243
246 found_potmsgsets = list(244 found_potmsgsets = list(
247 self.devel_sr_pofile.findPOTMsgSetsContaining(u"singular"))245 self.devel_pofile.findPOTMsgSetsContaining(u"singular"))
248 self.assertEquals(found_potmsgsets, [plural_potmsgset])246 self.assertEquals(found_potmsgsets, [plural_potmsgset])
249247
250 # And searching for plural text returns only the matching plural248 # And searching for plural text returns only the matching plural
251 # message.249 # message.
252 found_potmsgsets = list(250 found_potmsgsets = list(
253 self.devel_sr_pofile.findPOTMsgSetsContaining(u"plural"))251 self.devel_pofile.findPOTMsgSetsContaining(u"plural"))
254 self.assertEquals(found_potmsgsets, [plural_potmsgset])252 self.assertEquals(found_potmsgsets, [plural_potmsgset])
255253
256 # Search translations as well.254 # Search translations as well.
257 self.factory.makeTranslationMessage(255 self.factory.makeTranslationMessage(
258 pofile=self.devel_sr_pofile, potmsgset=potmsgset,256 pofile=self.devel_pofile, potmsgset=potmsgset,
259 translations=[u"One translation message"])257 translations=[u"One translation message"])
260 found_potmsgsets = list(258 found_potmsgsets = list(
261 self.devel_sr_pofile.findPOTMsgSetsContaining(u"translation"))259 self.devel_pofile.findPOTMsgSetsContaining(u"translation"))
262 self.assertEquals(found_potmsgsets, [potmsgset])260 self.assertEquals(found_potmsgsets, [potmsgset])
263261
264 # Search matches all plural forms.262 # Search matches all plural forms.
265 self.factory.makeTranslationMessage(263 self.factory.makeTranslationMessage(
266 pofile=self.devel_sr_pofile, potmsgset=plural_potmsgset,264 pofile=self.devel_pofile, potmsgset=plural_potmsgset,
267 translations=[u"One translation message",265 translations=[u"One translation message",
268 u"Plural translation message",266 u"Plural translation message",
269 u"Third translation message"])267 u"Third translation message"])
270 found_potmsgsets = list(268 found_potmsgsets = list(
271 self.devel_sr_pofile.findPOTMsgSetsContaining(269 self.devel_pofile.findPOTMsgSetsContaining(
272 u"Plural translation"))270 u"Plural translation"))
273 self.assertEquals(found_potmsgsets, [plural_potmsgset])271 self.assertEquals(found_potmsgsets, [plural_potmsgset])
274272
275 # Search works case insensitively for English strings.273 # Search works case insensitively for English strings.
276 found_potmsgsets = list(274 found_potmsgsets = list(
277 self.devel_sr_pofile.findPOTMsgSetsContaining(u"WiLd"))275 self.devel_pofile.findPOTMsgSetsContaining(u"WiLd"))
278 self.assertEquals(found_potmsgsets, [potmsgset])276 self.assertEquals(found_potmsgsets, [potmsgset])
279 # ...English plural forms.277 # ...English plural forms.
280 found_potmsgsets = list(278 found_potmsgsets = list(
281 self.devel_sr_pofile.findPOTMsgSetsContaining(u"PLurAl"))279 self.devel_pofile.findPOTMsgSetsContaining(u"PLurAl"))
282 self.assertEquals(found_potmsgsets, [plural_potmsgset])280 self.assertEquals(found_potmsgsets, [plural_potmsgset])
283 # ...translations.281 # ...translations.
284 found_potmsgsets = list(282 found_potmsgsets = list(
285 self.devel_sr_pofile.findPOTMsgSetsContaining(u"tRANSlaTIon"))283 self.devel_pofile.findPOTMsgSetsContaining(u"tRANSlaTIon"))
286 self.assertEquals(found_potmsgsets, [potmsgset, plural_potmsgset])284 self.assertEquals(found_potmsgsets, [potmsgset, plural_potmsgset])
287 # ...and translated plurals.285 # ...and translated plurals.
288 found_potmsgsets = list(286 found_potmsgsets = list(
289 self.devel_sr_pofile.findPOTMsgSetsContaining(u"THIRD"))287 self.devel_pofile.findPOTMsgSetsContaining(u"THIRD"))
290 self.assertEquals(found_potmsgsets, [plural_potmsgset])288 self.assertEquals(found_potmsgsets, [plural_potmsgset])
291289
292 def test_getTranslationsFilteredBy(self):290 def test_getTranslationsFilteredBy(self):
@@ -299,27 +297,27 @@
299297
300 # When there are no translations, empty list is returned.298 # When there are no translations, empty list is returned.
301 found_translations = list(299 found_translations = list(
302 self.devel_sr_pofile.getTranslationsFilteredBy(submitter))300 self.devel_pofile.getTranslationsFilteredBy(submitter))
303 self.assertEquals(found_translations, [])301 self.assertEquals(found_translations, [])
304302
305 # If 'submitter' provides a translation, it's returned in a list.303 # If 'submitter' provides a translation, it's returned in a list.
306 translation = self.factory.makeTranslationMessage(304 translation = self.factory.makeTranslationMessage(
307 pofile=self.devel_sr_pofile, potmsgset=potmsgset,305 pofile=self.devel_pofile, potmsgset=potmsgset,
308 translations=[u"Translation message"],306 translations=[u"Translation message"],
309 translator=submitter)307 translator=submitter)
310 found_translations = list(308 found_translations = list(
311 self.devel_sr_pofile.getTranslationsFilteredBy(submitter))309 self.devel_pofile.getTranslationsFilteredBy(submitter))
312 self.assertEquals(found_translations, [translation])310 self.assertEquals(found_translations, [translation])
313311
314 # If somebody else provides a translation, it's not added to the312 # If somebody else provides a translation, it's not added to the
315 # list of submitter's translations.313 # list of submitter's translations.
316 someone_else = self.factory.makePerson()314 someone_else = self.factory.makePerson()
317 self.factory.makeTranslationMessage(315 self.factory.makeTranslationMessage(
318 pofile=self.devel_sr_pofile, potmsgset=potmsgset,316 pofile=self.devel_pofile, potmsgset=potmsgset,
319 translations=[u"Another translation"],317 translations=[u"Another translation"],
320 translator=someone_else)318 translator=someone_else)
321 found_translations = list(319 found_translations = list(
322 self.devel_sr_pofile.getTranslationsFilteredBy(submitter))320 self.devel_pofile.getTranslationsFilteredBy(submitter))
323 self.assertEquals(found_translations, [translation])321 self.assertEquals(found_translations, [translation])
324322
325 # Adding a translation for same POTMsgSet, but to a different323 # Adding a translation for same POTMsgSet, but to a different
@@ -332,17 +330,17 @@
332 translations=[u"Yet another translation"],330 translations=[u"Yet another translation"],
333 translator=submitter)331 translator=submitter)
334 found_translations = list(332 found_translations = list(
335 self.devel_sr_pofile.getTranslationsFilteredBy(submitter))333 self.devel_pofile.getTranslationsFilteredBy(submitter))
336 self.assertEquals(found_translations, [translation])334 self.assertEquals(found_translations, [translation])
337335
338 # If a POTMsgSet is shared between two templates, a336 # If a POTMsgSet is shared between two templates, a
339 # translation is listed on both.337 # translation is listed on both.
340 potmsgset.setSequence(self.stable_potemplate, 1)338 potmsgset.setSequence(self.stable_potemplate, 1)
341 found_translations = list(339 found_translations = list(
342 self.stable_sr_pofile.getTranslationsFilteredBy(submitter))340 self.stable_pofile.getTranslationsFilteredBy(submitter))
343 self.assertEquals(found_translations, [translation])341 self.assertEquals(found_translations, [translation])
344 found_translations = list(342 found_translations = list(
345 self.devel_sr_pofile.getTranslationsFilteredBy(submitter))343 self.devel_pofile.getTranslationsFilteredBy(submitter))
346 self.assertEquals(found_translations, [translation])344 self.assertEquals(found_translations, [translation])
347345
348 def test_getPOTMsgSetTranslated_NoShared(self):346 def test_getPOTMsgSetTranslated_NoShared(self):
@@ -351,23 +349,23 @@
351349
352 # When there is no diverged translation either, nothing is returned.350 # When there is no diverged translation either, nothing is returned.
353 found_translations = list(351 found_translations = list(
354 self.devel_sr_pofile.getPOTMsgSetTranslated())352 self.devel_pofile.getPOTMsgSetTranslated())
355 self.assertEquals(found_translations, [])353 self.assertEquals(found_translations, [])
356354
357 # When a diverged translation is added, the potmsgset is returned.355 # When a diverged translation is added, the potmsgset is returned.
358 self.factory.makeTranslationMessage(356 self.factory.makeTranslationMessage(
359 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,357 pofile=self.devel_pofile, potmsgset=self.potmsgset,
360 translations=[u"Translation"])358 translations=[u"Translation"])
361 found_translations = list(359 found_translations = list(
362 self.devel_sr_pofile.getPOTMsgSetTranslated())360 self.devel_pofile.getPOTMsgSetTranslated())
363 self.assertEquals(found_translations, [self.potmsgset])361 self.assertEquals(found_translations, [self.potmsgset])
364362
365 # If diverged translation is empty, POTMsgSet is not listed.363 # If diverged translation is empty, POTMsgSet is not listed.
366 self.factory.makeTranslationMessage(364 self.factory.makeTranslationMessage(
367 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,365 pofile=self.devel_pofile, potmsgset=self.potmsgset,
368 translations=[u""])366 translations=[u""])
369 found_translations = list(367 found_translations = list(
370 self.devel_sr_pofile.getPOTMsgSetTranslated())368 self.devel_pofile.getPOTMsgSetTranslated())
371 self.assertEquals(found_translations, [])369 self.assertEquals(found_translations, [])
372370
373 def test_getPOTMsgSetTranslated_Shared(self):371 def test_getPOTMsgSetTranslated_Shared(self):
@@ -376,28 +374,28 @@
376374
377 # We create a shared translation first.375 # We create a shared translation first.
378 self.factory.makeSharedTranslationMessage(376 self.factory.makeSharedTranslationMessage(
379 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,377 pofile=self.devel_pofile, potmsgset=self.potmsgset,
380 translations=[u"Shared translation"])378 translations=[u"Shared translation"])
381379
382 # When there is no diverged translation, shared one is returned.380 # When there is no diverged translation, shared one is returned.
383 found_translations = list(381 found_translations = list(
384 self.devel_sr_pofile.getPOTMsgSetTranslated())382 self.devel_pofile.getPOTMsgSetTranslated())
385 self.assertEquals(found_translations, [self.potmsgset])383 self.assertEquals(found_translations, [self.potmsgset])
386384
387 # When an empty diverged translation is added, nothing is listed.385 # When an empty diverged translation is added, nothing is listed.
388 self.factory.makeTranslationMessage(386 self.factory.makeTranslationMessage(
389 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,387 pofile=self.devel_pofile, potmsgset=self.potmsgset,
390 translations=[u""])388 translations=[u""])
391 found_translations = list(389 found_translations = list(
392 self.devel_sr_pofile.getPOTMsgSetTranslated())390 self.devel_pofile.getPOTMsgSetTranslated())
393 self.assertEquals(found_translations, [])391 self.assertEquals(found_translations, [])
394392
395 # If diverged translation is non-empty, POTMsgSet is listed.393 # If diverged translation is non-empty, POTMsgSet is listed.
396 self.factory.makeTranslationMessage(394 self.factory.makeTranslationMessage(
397 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,395 pofile=self.devel_pofile, potmsgset=self.potmsgset,
398 translations=[u"Translation"])396 translations=[u"Translation"])
399 found_translations = list(397 found_translations = list(
400 self.devel_sr_pofile.getPOTMsgSetTranslated())398 self.devel_pofile.getPOTMsgSetTranslated())
401 self.assertEquals(found_translations, [self.potmsgset])399 self.assertEquals(found_translations, [self.potmsgset])
402400
403 def test_getPOTMsgSetTranslated_EmptyShared(self):401 def test_getPOTMsgSetTranslated_EmptyShared(self):
@@ -406,29 +404,29 @@
406404
407 # We create an empty shared translation first.405 # We create an empty shared translation first.
408 self.factory.makeSharedTranslationMessage(406 self.factory.makeSharedTranslationMessage(
409 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,407 pofile=self.devel_pofile, potmsgset=self.potmsgset,
410 translations=[u""])408 translations=[u""])
411409
412 # When there is no diverged translation, shared one is returned,410 # When there is no diverged translation, shared one is returned,
413 # but since it's empty, there are no results.411 # but since it's empty, there are no results.
414 found_translations = list(412 found_translations = list(
415 self.devel_sr_pofile.getPOTMsgSetTranslated())413 self.devel_pofile.getPOTMsgSetTranslated())
416 self.assertEquals(found_translations, [])414 self.assertEquals(found_translations, [])
417415
418 # When an empty diverged translation is added, nothing is listed.416 # When an empty diverged translation is added, nothing is listed.
419 self.factory.makeTranslationMessage(417 self.factory.makeTranslationMessage(
420 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,418 pofile=self.devel_pofile, potmsgset=self.potmsgset,
421 translations=[u""])419 translations=[u""])
422 found_translations = list(420 found_translations = list(
423 self.devel_sr_pofile.getPOTMsgSetTranslated())421 self.devel_pofile.getPOTMsgSetTranslated())
424 self.assertEquals(found_translations, [])422 self.assertEquals(found_translations, [])
425423
426 # If diverged translation is non-empty, POTMsgSet is listed.424 # If diverged translation is non-empty, POTMsgSet is listed.
427 self.factory.makeTranslationMessage(425 self.factory.makeTranslationMessage(
428 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,426 pofile=self.devel_pofile, potmsgset=self.potmsgset,
429 translations=[u"Translation"])427 translations=[u"Translation"])
430 found_translations = list(428 found_translations = list(
431 self.devel_sr_pofile.getPOTMsgSetTranslated())429 self.devel_pofile.getPOTMsgSetTranslated())
432 self.assertEquals(found_translations, [self.potmsgset])430 self.assertEquals(found_translations, [self.potmsgset])
433431
434 def test_getPOTMsgSetTranslated_Multiple(self):432 def test_getPOTMsgSetTranslated_Multiple(self):
@@ -437,7 +435,7 @@
437435
438 # Add a diverged translation on the included POTMsgSet...436 # Add a diverged translation on the included POTMsgSet...
439 self.factory.makeTranslationMessage(437 self.factory.makeTranslationMessage(
440 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,438 pofile=self.devel_pofile, potmsgset=self.potmsgset,
441 translations=[u"Diverged translation"])439 translations=[u"Diverged translation"])
442440
443 # and a shared translation on newly added POTMsgSet...441 # and a shared translation on newly added POTMsgSet...
@@ -446,12 +444,12 @@
446 potmsgset.setSequence(self.devel_potemplate, 2)444 potmsgset.setSequence(self.devel_potemplate, 2)
447445
448 self.factory.makeSharedTranslationMessage(446 self.factory.makeSharedTranslationMessage(
449 pofile=self.devel_sr_pofile, potmsgset=potmsgset,447 pofile=self.devel_pofile, potmsgset=potmsgset,
450 translations=[u"Shared translation"])448 translations=[u"Shared translation"])
451449
452 # Both POTMsgSets are listed.450 # Both POTMsgSets are listed.
453 found_translations = list(451 found_translations = list(
454 self.devel_sr_pofile.getPOTMsgSetTranslated())452 self.devel_pofile.getPOTMsgSetTranslated())
455 self.assertEquals(found_translations, [self.potmsgset, potmsgset])453 self.assertEquals(found_translations, [self.potmsgset, potmsgset])
456454
457 def test_getPOTMsgSetUntranslated_NoShared(self):455 def test_getPOTMsgSetUntranslated_NoShared(self):
@@ -460,23 +458,23 @@
460458
461 # When there is no diverged translation either, nothing is returned.459 # When there is no diverged translation either, nothing is returned.
462 found_translations = list(460 found_translations = list(
463 self.devel_sr_pofile.getPOTMsgSetUntranslated())461 self.devel_pofile.getPOTMsgSetUntranslated())
464 self.assertEquals(found_translations, [self.potmsgset])462 self.assertEquals(found_translations, [self.potmsgset])
465463
466 # When a diverged translation is added, the potmsgset is returned.464 # When a diverged translation is added, the potmsgset is returned.
467 self.factory.makeTranslationMessage(465 self.factory.makeTranslationMessage(
468 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,466 pofile=self.devel_pofile, potmsgset=self.potmsgset,
469 translations=[u"Translation"])467 translations=[u"Translation"])
470 found_translations = list(468 found_translations = list(
471 self.devel_sr_pofile.getPOTMsgSetUntranslated())469 self.devel_pofile.getPOTMsgSetUntranslated())
472 self.assertEquals(found_translations, [])470 self.assertEquals(found_translations, [])
473471
474 # If diverged translation is empty, POTMsgSet is not listed.472 # If diverged translation is empty, POTMsgSet is not listed.
475 self.factory.makeTranslationMessage(473 self.factory.makeTranslationMessage(
476 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,474 pofile=self.devel_pofile, potmsgset=self.potmsgset,
477 translations=[u""])475 translations=[u""])
478 found_translations = list(476 found_translations = list(
479 self.devel_sr_pofile.getPOTMsgSetUntranslated())477 self.devel_pofile.getPOTMsgSetUntranslated())
480 self.assertEquals(found_translations, [self.potmsgset])478 self.assertEquals(found_translations, [self.potmsgset])
481479
482 def test_getPOTMsgSetUntranslated_Shared(self):480 def test_getPOTMsgSetUntranslated_Shared(self):
@@ -485,28 +483,28 @@
485483
486 # We create a shared translation first.484 # We create a shared translation first.
487 self.factory.makeSharedTranslationMessage(485 self.factory.makeSharedTranslationMessage(
488 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,486 pofile=self.devel_pofile, potmsgset=self.potmsgset,
489 translations=[u"Shared translation"])487 translations=[u"Shared translation"])
490488
491 # When there is no diverged translation, shared one is returned.489 # When there is no diverged translation, shared one is returned.
492 found_translations = list(490 found_translations = list(
493 self.devel_sr_pofile.getPOTMsgSetUntranslated())491 self.devel_pofile.getPOTMsgSetUntranslated())
494 self.assertEquals(found_translations, [])492 self.assertEquals(found_translations, [])
495493
496 # When an empty diverged translation is added, nothing is listed.494 # When an empty diverged translation is added, nothing is listed.
497 self.factory.makeTranslationMessage(495 self.factory.makeTranslationMessage(
498 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,496 pofile=self.devel_pofile, potmsgset=self.potmsgset,
499 translations=[u""])497 translations=[u""])
500 found_translations = list(498 found_translations = list(
501 self.devel_sr_pofile.getPOTMsgSetUntranslated())499 self.devel_pofile.getPOTMsgSetUntranslated())
502 self.assertEquals(found_translations, [self.potmsgset])500 self.assertEquals(found_translations, [self.potmsgset])
503501
504 # If diverged translation is non-empty, POTMsgSet is listed.502 # If diverged translation is non-empty, POTMsgSet is listed.
505 self.factory.makeTranslationMessage(503 self.factory.makeTranslationMessage(
506 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,504 pofile=self.devel_pofile, potmsgset=self.potmsgset,
507 translations=[u"Translation"])505 translations=[u"Translation"])
508 found_translations = list(506 found_translations = list(
509 self.devel_sr_pofile.getPOTMsgSetUntranslated())507 self.devel_pofile.getPOTMsgSetUntranslated())
510 self.assertEquals(found_translations, [])508 self.assertEquals(found_translations, [])
511509
512 def test_getPOTMsgSetUntranslated_EmptyShared(self):510 def test_getPOTMsgSetUntranslated_EmptyShared(self):
@@ -515,29 +513,29 @@
515513
516 # We create an empty shared translation first.514 # We create an empty shared translation first.
517 self.factory.makeSharedTranslationMessage(515 self.factory.makeSharedTranslationMessage(
518 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,516 pofile=self.devel_pofile, potmsgset=self.potmsgset,
519 translations=[u""])517 translations=[u""])
520518
521 # When there is no diverged translation, shared one is returned,519 # When there is no diverged translation, shared one is returned,
522 # but since it's empty, there are no results.520 # but since it's empty, there are no results.
523 found_translations = list(521 found_translations = list(
524 self.devel_sr_pofile.getPOTMsgSetUntranslated())522 self.devel_pofile.getPOTMsgSetUntranslated())
525 self.assertEquals(found_translations, [self.potmsgset])523 self.assertEquals(found_translations, [self.potmsgset])
526524
527 # When an empty diverged translation is added, nothing is listed.525 # When an empty diverged translation is added, nothing is listed.
528 self.factory.makeTranslationMessage(526 self.factory.makeTranslationMessage(
529 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,527 pofile=self.devel_pofile, potmsgset=self.potmsgset,
530 translations=[u""])528 translations=[u""])
531 found_translations = list(529 found_translations = list(
532 self.devel_sr_pofile.getPOTMsgSetUntranslated())530 self.devel_pofile.getPOTMsgSetUntranslated())
533 self.assertEquals(found_translations, [self.potmsgset])531 self.assertEquals(found_translations, [self.potmsgset])
534532
535 # If diverged translation is non-empty, POTMsgSet is listed.533 # If diverged translation is non-empty, POTMsgSet is listed.
536 self.factory.makeTranslationMessage(534 self.factory.makeTranslationMessage(
537 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,535 pofile=self.devel_pofile, potmsgset=self.potmsgset,
538 translations=[u"Translation"])536 translations=[u"Translation"])
539 found_translations = list(537 found_translations = list(
540 self.devel_sr_pofile.getPOTMsgSetUntranslated())538 self.devel_pofile.getPOTMsgSetUntranslated())
541 self.assertEquals(found_translations, [])539 self.assertEquals(found_translations, [])
542540
543 def test_getPOTMsgSetUntranslated_Multiple(self):541 def test_getPOTMsgSetUntranslated_Multiple(self):
@@ -546,7 +544,7 @@
546544
547 # Add an empty translation to the included POTMsgSet...545 # Add an empty translation to the included POTMsgSet...
548 self.factory.makeTranslationMessage(546 self.factory.makeTranslationMessage(
549 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,547 pofile=self.devel_pofile, potmsgset=self.potmsgset,
550 translations=[u""])548 translations=[u""])
551549
552 # ...and a new untranslated POTMsgSet.550 # ...and a new untranslated POTMsgSet.
@@ -556,7 +554,7 @@
556554
557 # Both POTMsgSets are listed.555 # Both POTMsgSets are listed.
558 found_translations = list(556 found_translations = list(
559 self.devel_sr_pofile.getPOTMsgSetUntranslated())557 self.devel_pofile.getPOTMsgSetUntranslated())
560 self.assertEquals(found_translations, [self.potmsgset, potmsgset])558 self.assertEquals(found_translations, [self.potmsgset, potmsgset])
561559
562 def test_getPOTMsgSetWithNewSuggestions(self):560 def test_getPOTMsgSetWithNewSuggestions(self):
@@ -564,17 +562,17 @@
564562
565 # When there are no suggestions, nothing is returned.563 # When there are no suggestions, nothing is returned.
566 found_translations = list(564 found_translations = list(
567 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())565 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
568 self.assertEquals(found_translations, [])566 self.assertEquals(found_translations, [])
569567
570 # When a suggestion is added, the potmsgset is returned.568 # When a suggestion is added, the potmsgset is returned.
571 translation = self.factory.makeSuggestion(569 translation = self.factory.makeSuggestion(
572 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,570 pofile=self.devel_pofile, potmsgset=self.potmsgset,
573 translations=[u"Suggestion"])571 translations=[u"Suggestion"])
574 self.assertEquals(translation.is_current_ubuntu, False)572 self.assertEquals(translation.is_current_ubuntu, False)
575573
576 found_translations = list(574 found_translations = list(
577 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())575 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
578 self.assertEquals(found_translations, [self.potmsgset])576 self.assertEquals(found_translations, [self.potmsgset])
579577
580 def test_getPOTMsgSetWithNewSuggestions_multiple(self):578 def test_getPOTMsgSetWithNewSuggestions_multiple(self):
@@ -582,7 +580,7 @@
582580
583 # One POTMsgSet has no translations, but only a suggestion.581 # One POTMsgSet has no translations, but only a suggestion.
584 self.factory.makeSuggestion(582 self.factory.makeSuggestion(
585 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,583 pofile=self.devel_pofile, potmsgset=self.potmsgset,
586 translations=[u"New suggestion"])584 translations=[u"New suggestion"])
587585
588 # Another POTMsgSet has both a translation and a suggestion.586 # Another POTMsgSet has both a translation and a suggestion.
@@ -591,36 +589,36 @@
591 potmsgset.setSequence(self.devel_potemplate, 2)589 potmsgset.setSequence(self.devel_potemplate, 2)
592 date_created = datetime.now(pytz.UTC) - timedelta(5)590 date_created = datetime.now(pytz.UTC) - timedelta(5)
593 self.factory.makeTranslationMessage(591 self.factory.makeTranslationMessage(
594 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,592 pofile=self.devel_pofile, potmsgset=self.potmsgset,
595 translations=[u"Translation"], date_updated=date_created)593 translations=[u"Translation"], date_updated=date_created)
596 suggestion_date = date_created + timedelta(1)594 suggestion_date = date_created + timedelta(1)
597 self.factory.makeSuggestion(595 self.factory.makeSuggestion(
598 pofile=self.devel_sr_pofile, potmsgset=potmsgset,596 pofile=self.devel_pofile, potmsgset=potmsgset,
599 translations=[u"New suggestion"], date_updated=suggestion_date)597 translations=[u"New suggestion"], date_created=suggestion_date)
600598
601 # Both POTMsgSets are listed.599 # Both POTMsgSets are listed.
602 found_translations = list(600 found_translations = list(
603 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())601 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
604 self.assertEquals(found_translations, [self.potmsgset, potmsgset])602 self.assertEquals(found_translations, [self.potmsgset, potmsgset])
605603
606 def test_getPOTMsgSetWithNewSuggestions_distinct(self):604 def test_getPOTMsgSetWithNewSuggestions_distinct(self):
607 # Provide two suggestions on a single message and make sure605 # Provide two suggestions on a single message and make sure
608 # a POTMsgSet is returned only once.606 # a POTMsgSet is returned only once.
609 self.factory.makeSuggestion(607 self.factory.makeSuggestion(
610 pofile=self.devel_sr_pofile,608 pofile=self.devel_pofile,
611 potmsgset=self.potmsgset,609 potmsgset=self.potmsgset,
612 translations=["A suggestion"])610 translations=["A suggestion"])
613 self.factory.makeSuggestion(611 self.factory.makeSuggestion(
614 pofile=self.devel_sr_pofile,612 pofile=self.devel_pofile,
615 potmsgset=self.potmsgset,613 potmsgset=self.potmsgset,
616 translations=["Another suggestion"])614 translations=["Another suggestion"])
617615
618 potmsgsets = list(616 potmsgsets = list(
619 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())617 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
620 self.assertEquals(potmsgsets,618 self.assertEquals(potmsgsets,
621 [self.potmsgset])619 [self.potmsgset])
622 self.assertEquals(620 self.assertEquals(
623 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions().count(),621 self.devel_pofile.getPOTMsgSetWithNewSuggestions().count(),
624 1)622 1)
625623
626 def test_getPOTMsgSetWithNewSuggestions_empty(self):624 def test_getPOTMsgSetWithNewSuggestions_empty(self):
@@ -628,12 +626,12 @@
628626
629 # When an empty suggestion is added, the potmsgset is NOT returned.627 # When an empty suggestion is added, the potmsgset is NOT returned.
630 translation = self.factory.makeSuggestion(628 translation = self.factory.makeSuggestion(
631 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,629 pofile=self.devel_pofile, potmsgset=self.potmsgset,
632 translations=[None])630 translations=[])
633 self.assertEquals(False, translation.is_current_ubuntu)631 self.assertEquals(False, translation.is_current_ubuntu)
634632
635 found_translations = list(633 found_translations = list(
636 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())634 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
637 self.assertEquals([], found_translations)635 self.assertEquals([], found_translations)
638636
639 def test_getPOTMsgSetChangedInUbuntu(self):637 def test_getPOTMsgSetChangedInUbuntu(self):
@@ -641,72 +639,72 @@
641639
642 # If there are no translations in Ubuntu, nothing is listed.640 # If there are no translations in Ubuntu, nothing is listed.
643 found_translations = list(641 found_translations = list(
644 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())642 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
645 self.assertEquals(found_translations, [])643 self.assertEquals(found_translations, [])
646644
647 # Adding a non-imported current translation doesn't change anything.645 # Adding a non-imported current translation doesn't change anything.
648 translation = self.factory.makeSharedTranslationMessage(646 translation = self.factory.makeSharedTranslationMessage(
649 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,647 pofile=self.devel_pofile, potmsgset=self.potmsgset,
650 translations=[u"Non-imported translation"])648 translations=[u"Non-imported translation"])
651 self.assertEquals(translation.is_current_upstream, False)649 self.assertEquals(translation.is_current_upstream, False)
652 found_translations = list(650 found_translations = list(
653 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())651 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
654 self.assertEquals(found_translations, [])652 self.assertEquals(found_translations, [])
655653
656 # Adding an imported translation which is also current indicates654 # Adding an imported translation which is also current indicates
657 # that there are no changes.655 # that there are no changes.
658 translation = self.factory.makeSharedTranslationMessage(656 translation = self.factory.makeSharedTranslationMessage(
659 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,657 pofile=self.devel_pofile, potmsgset=self.potmsgset,
660 translations=[u"Imported translation"], is_current_upstream=True)658 translations=[u"Imported translation"], is_current_upstream=True)
661 self.assertEquals(translation.is_current_upstream, True)659 self.assertEquals(translation.is_current_upstream, True)
662 self.assertEquals(translation.is_current_ubuntu, True)660 self.assertEquals(translation.is_current_ubuntu, True)
663 found_translations = list(661 found_translations = list(
664 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())662 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
665 self.assertEquals(found_translations, [])663 self.assertEquals(found_translations, [])
666664
667 # However, changing current translation to a non-imported one665 # However, changing current translation to a non-imported one
668 # makes this a changed in Ubuntu translation.666 # makes this a changed in Ubuntu translation.
669 translation = self.factory.makeSharedTranslationMessage(667 translation = self.factory.makeSharedTranslationMessage(
670 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,668 pofile=self.devel_pofile, potmsgset=self.potmsgset,
671 translations=[u"Changed translation"], is_current_upstream=False)669 translations=[u"Changed translation"], is_current_upstream=False)
672 self.assertEquals(translation.is_current_upstream, False)670 self.assertEquals(translation.is_current_upstream, False)
673 self.assertEquals(translation.is_current_ubuntu, True)671 self.assertEquals(translation.is_current_ubuntu, True)
674 found_translations = list(672 found_translations = list(
675 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())673 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
676 self.assertEquals(found_translations, [self.potmsgset])674 self.assertEquals(found_translations, [self.potmsgset])
677675
678 # Adding a diverged, non-imported translation, still lists676 # Adding a diverged, non-imported translation, still lists
679 # it as a changed translation.677 # it as a changed translation.
680 translation = self.factory.makeTranslationMessage(678 translation = self.factory.makeTranslationMessage(
681 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,679 pofile=self.devel_pofile, potmsgset=self.potmsgset,
682 translations=[u"Diverged translation"], is_current_upstream=False)680 translations=[u"Diverged translation"], is_current_upstream=False)
683 self.assertEquals(translation.is_current_upstream, False)681 self.assertEquals(translation.is_current_upstream, False)
684 self.assertEquals(translation.is_current_ubuntu, True)682 self.assertEquals(translation.is_current_ubuntu, True)
685 found_translations = list(683 found_translations = list(
686 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())684 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
687 self.assertEquals(found_translations, [self.potmsgset])685 self.assertEquals(found_translations, [self.potmsgset])
688686
689 # But adding a diverged current and imported translation means687 # But adding a diverged current and imported translation means
690 # that it's not changed anymore.688 # that it's not changed anymore.
691 translation = self.factory.makeTranslationMessage(689 translation = self.factory.makeTranslationMessage(
692 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,690 pofile=self.devel_pofile, potmsgset=self.potmsgset,
693 translations=[u"Diverged imported"], is_current_upstream=True,691 translations=[u"Diverged imported"], is_current_upstream=True,
694 force_diverged=True)692 force_diverged=True)
695 self.assertEquals(translation.is_current_upstream, True)693 self.assertEquals(translation.is_current_upstream, True)
696 self.assertEquals(translation.is_current_ubuntu, True)694 self.assertEquals(translation.is_current_ubuntu, True)
697 found_translations = list(695 found_translations = list(
698 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())696 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
699 self.assertEquals(found_translations, [])697 self.assertEquals(found_translations, [])
700698
701 # Changing from a diverged, imported translation is correctly699 # Changing from a diverged, imported translation is correctly
702 # detected.700 # detected.
703 translation = self.factory.makeTranslationMessage(701 translation = self.factory.makeTranslationMessage(
704 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,702 pofile=self.devel_pofile, potmsgset=self.potmsgset,
705 translations=[u"Diverged changed"], is_current_upstream=False)703 translations=[u"Diverged changed"], is_current_upstream=False)
706 self.assertEquals(translation.is_current_upstream, False)704 self.assertEquals(translation.is_current_upstream, False)
707 self.assertEquals(translation.is_current_ubuntu, True)705 self.assertEquals(translation.is_current_ubuntu, True)
708 found_translations = list(706 found_translations = list(
709 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())707 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
710 self.assertEquals(found_translations, [self.potmsgset])708 self.assertEquals(found_translations, [self.potmsgset])
711709
712 def test_getPOTMsgSetChangedInUbuntu_diverged_imported(self):710 def test_getPOTMsgSetChangedInUbuntu_diverged_imported(self):
@@ -720,11 +718,11 @@
720 # 1) Shared imported and current translation.718 # 1) Shared imported and current translation.
721 # 2) Diverged, imported, non-current message.719 # 2) Diverged, imported, non-current message.
722 shared = self.factory.makeSharedTranslationMessage(720 shared = self.factory.makeSharedTranslationMessage(
723 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,721 pofile=self.devel_pofile, potmsgset=self.potmsgset,
724 translations=[u"Shared imported current"],722 translations=[u"Shared imported current"],
725 is_current_upstream=True)723 is_current_upstream=True)
726 diverged = self.factory.makeTranslationMessage(724 diverged = self.factory.makeTranslationMessage(
727 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,725 pofile=self.devel_pofile, potmsgset=self.potmsgset,
728 translations=[u"Diverged imported non-current"],726 translations=[u"Diverged imported non-current"],
729 is_current_upstream=True, force_diverged=True)727 is_current_upstream=True, force_diverged=True)
730 # As we can't come to this situation using existing code,728 # As we can't come to this situation using existing code,
@@ -740,7 +738,7 @@
740738
741 # Such POTMsgSet is not considered changed in this PO file.739 # Such POTMsgSet is not considered changed in this PO file.
742 found_translations = list(740 found_translations = list(
743 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())741 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
744 self.assertEquals(found_translations, [])742 self.assertEquals(found_translations, [])
745743
746 def test_getPOTMsgSetChangedInUbuntu_SharedDiverged(self):744 def test_getPOTMsgSetChangedInUbuntu_SharedDiverged(self):
@@ -749,34 +747,34 @@
749 # Adding an imported translation which is also current indicates747 # Adding an imported translation which is also current indicates
750 # that there are no changes.748 # that there are no changes.
751 translation = self.factory.makeSharedTranslationMessage(749 translation = self.factory.makeSharedTranslationMessage(
752 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,750 pofile=self.devel_pofile, potmsgset=self.potmsgset,
753 translations=[u"Imported translation"], is_current_upstream=True)751 translations=[u"Imported translation"], is_current_upstream=True)
754 self.assertEquals(translation.is_current_upstream, True)752 self.assertEquals(translation.is_current_upstream, True)
755 self.assertEquals(translation.is_current_ubuntu, True)753 self.assertEquals(translation.is_current_ubuntu, True)
756 found_translations = list(754 found_translations = list(
757 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())755 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
758 self.assertEquals(found_translations, [])756 self.assertEquals(found_translations, [])
759757
760 # Adding a diverged, non-imported translation makes it appear758 # Adding a diverged, non-imported translation makes it appear
761 # as changed.759 # as changed.
762 translation = self.factory.makeTranslationMessage(760 translation = self.factory.makeTranslationMessage(
763 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,761 pofile=self.devel_pofile, potmsgset=self.potmsgset,
764 translations=[u"Changed translation"], is_current_upstream=False)762 translations=[u"Changed translation"], is_current_upstream=False)
765 self.assertEquals(translation.is_current_upstream, False)763 self.assertEquals(translation.is_current_upstream, False)
766 self.assertEquals(translation.is_current_ubuntu, True)764 self.assertEquals(translation.is_current_ubuntu, True)
767 found_translations = list(765 found_translations = list(
768 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())766 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
769 self.assertEquals(found_translations, [self.potmsgset])767 self.assertEquals(found_translations, [self.potmsgset])
770768
771 def test_getPOTMsgSetWithErrors(self):769 def test_getPOTMsgSetWithErrors(self):
772 # Test listing of POTMsgSets with errors in translations.770 # Test listing of POTMsgSets with errors in translations.
773 translation = self.factory.makeSharedTranslationMessage(771 translation = self.factory.makeSharedTranslationMessage(
774 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,772 pofile=self.devel_pofile, potmsgset=self.potmsgset,
775 translations=[u"Imported translation"], is_current_upstream=True)773 translations=[u"Imported translation"], is_current_upstream=True)
776 removeSecurityProxy(translation).validation_status = (774 removeSecurityProxy(translation).validation_status = (
777 TranslationValidationStatus.UNKNOWNERROR)775 TranslationValidationStatus.UNKNOWNERROR)
778 found_translations = list(776 found_translations = list(
779 self.devel_sr_pofile.getPOTMsgSetWithErrors())777 self.devel_pofile.getPOTMsgSetWithErrors())
780 self.assertEquals(found_translations, [self.potmsgset])778 self.assertEquals(found_translations, [self.potmsgset])
781779
782 def test_updateStatistics(self):780 def test_updateStatistics(self):
@@ -796,71 +794,71 @@
796 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)794 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)
797 potmsgset.setSequence(self.devel_potemplate, 2)795 potmsgset.setSequence(self.devel_potemplate, 2)
798 self.factory.makeSuggestion(796 self.factory.makeSuggestion(
799 pofile=self.devel_sr_pofile, potmsgset=potmsgset,797 pofile=self.devel_pofile, potmsgset=potmsgset,
800 translations=[u"Unreviewed suggestion"])798 translations=[u"Unreviewed suggestion"])
801799
802 # Third POTMsgSet is translated, and with a suggestion.800 # Third POTMsgSet is translated, and with a suggestion.
803 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)801 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)
804 potmsgset.setSequence(self.devel_potemplate, 3)802 potmsgset.setSequence(self.devel_potemplate, 3)
805 self.factory.makeTranslationMessage(803 self.factory.makeTranslationMessage(
806 pofile=self.devel_sr_pofile, potmsgset=potmsgset,804 pofile=self.devel_pofile, potmsgset=potmsgset,
807 translations=[u"Translation"],805 translations=[u"Translation"],
808 date_updated=datetime.now(pytz.UTC)-timedelta(1))806 date_updated=datetime.now(pytz.UTC)-timedelta(1))
809 self.factory.makeSuggestion(807 self.factory.makeSuggestion(
810 pofile=self.devel_sr_pofile, potmsgset=potmsgset,808 pofile=self.devel_pofile, potmsgset=potmsgset,
811 translations=[u"Another suggestion"])809 translations=[u"Another suggestion"])
812810
813 # Fourth POTMsgSet is translated in import.811 # Fourth POTMsgSet is translated in import.
814 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)812 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)
815 potmsgset.setSequence(self.devel_potemplate, 4)813 potmsgset.setSequence(self.devel_potemplate, 4)
816 self.factory.makeTranslationMessage(814 self.factory.makeTranslationMessage(
817 pofile=self.devel_sr_pofile, potmsgset=potmsgset,815 pofile=self.devel_pofile, potmsgset=potmsgset,
818 translations=[u"Imported translation"], is_current_upstream=True)816 translations=[u"Imported translation"], is_current_upstream=True)
819817
820 # Fifth POTMsgSet is translated in import, but changed in Ubuntu.818 # Fifth POTMsgSet is translated in import, but changed in Ubuntu.
821 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)819 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)
822 potmsgset.setSequence(self.devel_potemplate, 5)820 potmsgset.setSequence(self.devel_potemplate, 5)
823 self.factory.makeTranslationMessage(821 self.factory.makeTranslationMessage(
824 pofile=self.devel_sr_pofile, potmsgset=potmsgset,822 pofile=self.devel_pofile, potmsgset=potmsgset,
825 translations=[u"Imported translation"], is_current_upstream=True)823 translations=[u"Imported translation"], is_current_upstream=True)
826 translation = self.factory.makeTranslationMessage(824 translation = self.factory.makeTranslationMessage(
827 pofile=self.devel_sr_pofile, potmsgset=potmsgset,825 pofile=self.devel_pofile, potmsgset=potmsgset,
828 translations=[u"LP translation"], is_current_upstream=False)826 translations=[u"LP translation"], is_current_upstream=False)
829827
830 # Sixth POTMsgSet is translated in LP only.828 # Sixth POTMsgSet is translated in LP only.
831 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)829 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)
832 potmsgset.setSequence(self.devel_potemplate, 6)830 potmsgset.setSequence(self.devel_potemplate, 6)
833 self.factory.makeTranslationMessage(831 self.factory.makeTranslationMessage(
834 pofile=self.devel_sr_pofile, potmsgset=potmsgset,832 pofile=self.devel_pofile, potmsgset=potmsgset,
835 translations=[u"New translation"], is_current_upstream=False)833 translations=[u"New translation"], is_current_upstream=False)
836834
837 removeSecurityProxy(self.devel_potemplate).messagecount = (835 removeSecurityProxy(self.devel_potemplate).messagecount = (
838 self.devel_potemplate.getPOTMsgSetsCount())836 self.devel_potemplate.getPOTMsgSetsCount())
839837
840 # Returns current, updates, rosetta, unreviewed counts.838 # Returns current, updates, rosetta, unreviewed counts.
841 stats = self.devel_sr_pofile.updateStatistics()839 stats = self.devel_pofile.updateStatistics()
842 self.assertEquals((1, 1, 3, 2), stats)840 self.assertEquals((1, 1, 3, 2), stats)
843841
844 self.assertEquals(6, self.devel_sr_pofile.messageCount())842 self.assertEquals(6, self.devel_pofile.messageCount())
845 self.assertEquals(4, self.devel_sr_pofile.translatedCount())843 self.assertEquals(4, self.devel_pofile.translatedCount())
846 self.assertEquals(2, self.devel_sr_pofile.untranslatedCount())844 self.assertEquals(2, self.devel_pofile.untranslatedCount())
847 self.assertEquals(1, self.devel_sr_pofile.currentCount())845 self.assertEquals(1, self.devel_pofile.currentCount())
848 self.assertEquals(3, self.devel_sr_pofile.rosettaCount())846 self.assertEquals(3, self.devel_pofile.rosettaCount())
849 self.assertEquals(1, self.devel_sr_pofile.updatesCount())847 self.assertEquals(1, self.devel_pofile.updatesCount())
850 self.assertEquals(2, self.devel_sr_pofile.unreviewedCount())848 self.assertEquals(2, self.devel_pofile.unreviewedCount())
851849
852 def test_TranslationFileData_adapter(self):850 def test_TranslationFileData_adapter(self):
853 # Test that exporting works correctly with shared and diverged851 # Test that exporting works correctly with shared and diverged
854 # messages.852 # messages.
855 self.factory.makeSharedTranslationMessage(853 self.factory.makeSharedTranslationMessage(
856 pofile=self.devel_sr_pofile,854 pofile=self.devel_pofile,
857 potmsgset=self.potmsgset,855 potmsgset=self.potmsgset,
858 translations=["Shared translation"])856 translations=["Shared translation"])
859857
860 # Get the adapter and extract only English singular and858 # Get the adapter and extract only English singular and
861 # first translation form from all messages.859 # first translation form from all messages.
862 translation_file_data = getAdapter(860 translation_file_data = getAdapter(
863 self.devel_sr_pofile, ITranslationFileData, 'all_messages')861 self.devel_pofile, ITranslationFileData, 'all_messages')
864 exported_messages = [862 exported_messages = [
865 (msg.singular_text, msg.translations[0])863 (msg.singular_text, msg.translations[0])
866 for msg in translation_file_data.messages]864 for msg in translation_file_data.messages]
@@ -870,7 +868,7 @@
870868
871 # When we add a diverged translation, only that is exported.869 # When we add a diverged translation, only that is exported.
872 self.factory.makeTranslationMessage(870 self.factory.makeTranslationMessage(
873 pofile=self.devel_sr_pofile,871 pofile=self.devel_pofile,
874 potmsgset=self.potmsgset,872 potmsgset=self.potmsgset,
875 translations=["Diverged translation"],873 translations=["Diverged translation"],
876 force_diverged=True)874 force_diverged=True)
@@ -878,7 +876,7 @@
878 # Get the adapter and extract only English singular and876 # Get the adapter and extract only English singular and
879 # first translation form from all messages.877 # first translation form from all messages.
880 translation_file_data = getAdapter(878 translation_file_data = getAdapter(
881 self.devel_sr_pofile, ITranslationFileData, 'all_messages')879 self.devel_pofile, ITranslationFileData, 'all_messages')
882 exported_messages = [880 exported_messages = [
883 (msg.singular_text, msg.translations[0])881 (msg.singular_text, msg.translations[0])
884 for msg in translation_file_data.messages]882 for msg in translation_file_data.messages]
@@ -1041,9 +1039,9 @@
1041 name="messages")1039 name="messages")
10421040
1043 # We'll use two PO files, one for each series.1041 # We'll use two PO files, one for each series.
1044 self.devel_sr_pofile = self.factory.makePOFile(1042 self.devel_pofile = self.factory.makePOFile(
1045 'sr', self.devel_potemplate)1043 'sr', self.devel_potemplate)
1046 self.stable_sr_pofile = self.factory.makePOFile(1044 self.stable_pofile = self.factory.makePOFile(
1047 'sr', self.stable_potemplate)1045 'sr', self.stable_potemplate)
10481046
1049 # Create two POTMsgSets that can be used to test in what order1047 # Create two POTMsgSets that can be used to test in what order
@@ -1054,19 +1052,19 @@
1054 self.potmsgset2.setSequence(self.devel_potemplate, 2)1052 self.potmsgset2.setSequence(self.devel_potemplate, 2)
10551053
1056 def test_getPOTMsgSetTranslated_ordering(self):1054 def test_getPOTMsgSetTranslated_ordering(self):
1057 # Translate both POTMsgSets in devel_sr_pofile, so1055 # Translate both POTMsgSets in devel_pofile, so
1058 # they are returned with getPOTMsgSetTranslated() call.1056 # they are returned with getPOTMsgSetTranslated() call.
1059 self.factory.makeSharedTranslationMessage(1057 self.factory.makeSharedTranslationMessage(
1060 pofile=self.devel_sr_pofile,1058 pofile=self.devel_pofile,
1061 potmsgset=self.potmsgset1,1059 potmsgset=self.potmsgset1,
1062 translations=["Shared translation"])1060 translations=["Shared translation"])
1063 self.factory.makeSharedTranslationMessage(1061 self.factory.makeSharedTranslationMessage(
1064 pofile=self.devel_sr_pofile,1062 pofile=self.devel_pofile,
1065 potmsgset=self.potmsgset2,1063 potmsgset=self.potmsgset2,
1066 translations=["Another shared translation"])1064 translations=["Another shared translation"])
10671065
1068 translated_potmsgsets = list(1066 translated_potmsgsets = list(
1069 self.devel_sr_pofile.getPOTMsgSetTranslated())1067 self.devel_pofile.getPOTMsgSetTranslated())
1070 self.assertEquals(1068 self.assertEquals(
1071 [self.potmsgset1, self.potmsgset2], translated_potmsgsets)1069 [self.potmsgset1, self.potmsgset2], translated_potmsgsets)
10721070
@@ -1077,20 +1075,20 @@
10771075
1078 # And they are returned in the new order as desired.1076 # And they are returned in the new order as desired.
1079 translated_potmsgsets = list(1077 translated_potmsgsets = list(
1080 self.stable_sr_pofile.getPOTMsgSetTranslated())1078 self.stable_pofile.getPOTMsgSetTranslated())
1081 self.assertEquals(1079 self.assertEquals(
1082 [self.potmsgset2, self.potmsgset1], translated_potmsgsets)1080 [self.potmsgset2, self.potmsgset1], translated_potmsgsets)
10831081
1084 # Order is unchanged for the previous template.1082 # Order is unchanged for the previous template.
1085 translated_potmsgsets = list(1083 translated_potmsgsets = list(
1086 self.devel_sr_pofile.getPOTMsgSetTranslated())1084 self.devel_pofile.getPOTMsgSetTranslated())
1087 self.assertEquals(1085 self.assertEquals(
1088 [self.potmsgset1, self.potmsgset2], translated_potmsgsets)1086 [self.potmsgset1, self.potmsgset2], translated_potmsgsets)
10891087
1090 def test_getPOTMsgSetUntranslated_ordering(self):1088 def test_getPOTMsgSetUntranslated_ordering(self):
1091 # Both POTMsgSets in devel_sr_pofile are untranslated.1089 # Both POTMsgSets in devel_pofile are untranslated.
1092 untranslated_potmsgsets = list(1090 untranslated_potmsgsets = list(
1093 self.devel_sr_pofile.getPOTMsgSetUntranslated())1091 self.devel_pofile.getPOTMsgSetUntranslated())
1094 self.assertEquals(1092 self.assertEquals(
1095 [self.potmsgset1, self.potmsgset2], untranslated_potmsgsets)1093 [self.potmsgset1, self.potmsgset2], untranslated_potmsgsets)
10961094
@@ -1101,42 +1099,42 @@
11011099
1102 # And they are returned in the new order as desired.1100 # And they are returned in the new order as desired.
1103 untranslated_potmsgsets = list(1101 untranslated_potmsgsets = list(
1104 self.stable_sr_pofile.getPOTMsgSetUntranslated())1102 self.stable_pofile.getPOTMsgSetUntranslated())
1105 self.assertEquals(1103 self.assertEquals(
1106 [self.potmsgset2, self.potmsgset1], untranslated_potmsgsets)1104 [self.potmsgset2, self.potmsgset1], untranslated_potmsgsets)
11071105
1108 # Order is unchanged for the previous template.1106 # Order is unchanged for the previous template.
1109 untranslated_potmsgsets = list(1107 untranslated_potmsgsets = list(
1110 self.devel_sr_pofile.getPOTMsgSetUntranslated())1108 self.devel_pofile.getPOTMsgSetUntranslated())
1111 self.assertEquals(1109 self.assertEquals(
1112 [self.potmsgset1, self.potmsgset2], untranslated_potmsgsets)1110 [self.potmsgset1, self.potmsgset2], untranslated_potmsgsets)
11131111
1114 def test_getPOTMsgSetChangedInUbuntu_ordering(self):1112 def test_getPOTMsgSetChangedInUbuntu_ordering(self):
1115 # Suggest a translation on both POTMsgSets in devel_sr_pofile,1113 # Suggest a translation on both POTMsgSets in devel_pofile,
1116 # so they are returned with getPOTMsgSetWithNewSuggestions() call.1114 # so they are returned with getPOTMsgSetWithNewSuggestions() call.
1117 self.factory.makeSharedTranslationMessage(1115 self.factory.makeSharedTranslationMessage(
1118 pofile=self.devel_sr_pofile,1116 pofile=self.devel_pofile,
1119 potmsgset=self.potmsgset1,1117 potmsgset=self.potmsgset1,
1120 translations=["Imported"],1118 translations=["Imported"],
1121 is_current_upstream=True)1119 is_current_upstream=True)
1122 self.factory.makeSharedTranslationMessage(1120 self.factory.makeSharedTranslationMessage(
1123 pofile=self.devel_sr_pofile,1121 pofile=self.devel_pofile,
1124 potmsgset=self.potmsgset1,1122 potmsgset=self.potmsgset1,
1125 translations=["Changed"],1123 translations=["Changed"],
1126 is_current_upstream=False)1124 is_current_upstream=False)
1127 self.factory.makeSharedTranslationMessage(1125 self.factory.makeSharedTranslationMessage(
1128 pofile=self.devel_sr_pofile,1126 pofile=self.devel_pofile,
1129 potmsgset=self.potmsgset2,1127 potmsgset=self.potmsgset2,
1130 translations=["Another imported"],1128 translations=["Another imported"],
1131 is_current_upstream=True)1129 is_current_upstream=True)
1132 self.factory.makeSharedTranslationMessage(1130 self.factory.makeSharedTranslationMessage(
1133 pofile=self.devel_sr_pofile,1131 pofile=self.devel_pofile,
1134 potmsgset=self.potmsgset2,1132 potmsgset=self.potmsgset2,
1135 translations=["Another changed"],1133 translations=["Another changed"],
1136 is_current_upstream=False)1134 is_current_upstream=False)
11371135
1138 potmsgsets = list(1136 potmsgsets = list(
1139 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())1137 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
1140 self.assertEquals(1138 self.assertEquals(
1141 [self.potmsgset1, self.potmsgset2], potmsgsets)1139 [self.potmsgset1, self.potmsgset2], potmsgsets)
11421140
@@ -1147,28 +1145,28 @@
11471145
1148 # And they are returned in the new order as desired.1146 # And they are returned in the new order as desired.
1149 potmsgsets = list(1147 potmsgsets = list(
1150 self.stable_sr_pofile.getPOTMsgSetChangedInUbuntu())1148 self.stable_pofile.getPOTMsgSetChangedInUbuntu())
1151 self.assertEquals(1149 self.assertEquals(
1152 [self.potmsgset2, self.potmsgset1], potmsgsets)1150 [self.potmsgset2, self.potmsgset1], potmsgsets)
11531151
1154 # Order is unchanged for the previous template.1152 # Order is unchanged for the previous template.
1155 potmsgsets = list(1153 potmsgsets = list(
1156 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())1154 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
1157 self.assertEquals(1155 self.assertEquals(
1158 [self.potmsgset1, self.potmsgset2], potmsgsets)1156 [self.potmsgset1, self.potmsgset2], potmsgsets)
11591157
1160 def test_getPOTMsgSetWithErrors_ordering(self):1158 def test_getPOTMsgSetWithErrors_ordering(self):
1161 # Suggest a translation on both POTMsgSets in devel_sr_pofile,1159 # Suggest a translation on both POTMsgSets in devel_pofile,
1162 # so they are returned with getPOTMsgSetWithNewSuggestions() call.1160 # so they are returned with getPOTMsgSetWithNewSuggestions() call.
1163 imported1 = self.factory.makeSharedTranslationMessage(1161 imported1 = self.factory.makeSharedTranslationMessage(
1164 pofile=self.devel_sr_pofile,1162 pofile=self.devel_pofile,
1165 potmsgset=self.potmsgset1,1163 potmsgset=self.potmsgset1,
1166 translations=["Imported"],1164 translations=["Imported"],
1167 is_current_upstream=True)1165 is_current_upstream=True)
1168 removeSecurityProxy(imported1).validation_status = (1166 removeSecurityProxy(imported1).validation_status = (
1169 TranslationValidationStatus.UNKNOWNERROR)1167 TranslationValidationStatus.UNKNOWNERROR)
1170 imported2 = self.factory.makeSharedTranslationMessage(1168 imported2 = self.factory.makeSharedTranslationMessage(
1171 pofile=self.devel_sr_pofile,1169 pofile=self.devel_pofile,
1172 potmsgset=self.potmsgset2,1170 potmsgset=self.potmsgset2,
1173 translations=["Another imported"],1171 translations=["Another imported"],
1174 is_current_upstream=True)1172 is_current_upstream=True)
@@ -1176,7 +1174,7 @@
1176 TranslationValidationStatus.UNKNOWNERROR)1174 TranslationValidationStatus.UNKNOWNERROR)
11771175
1178 potmsgsets = list(1176 potmsgsets = list(
1179 self.devel_sr_pofile.getPOTMsgSetWithErrors())1177 self.devel_pofile.getPOTMsgSetWithErrors())
1180 self.assertEquals(1178 self.assertEquals(
1181 [self.potmsgset1, self.potmsgset2], potmsgsets)1179 [self.potmsgset1, self.potmsgset2], potmsgsets)
11821180
@@ -1187,13 +1185,13 @@
11871185
1188 # And they are returned in the new order as desired.1186 # And they are returned in the new order as desired.
1189 potmsgsets = list(1187 potmsgsets = list(
1190 self.stable_sr_pofile.getPOTMsgSetWithErrors())1188 self.stable_pofile.getPOTMsgSetWithErrors())
1191 self.assertEquals(1189 self.assertEquals(
1192 [self.potmsgset2, self.potmsgset1], potmsgsets)1190 [self.potmsgset2, self.potmsgset1], potmsgsets)
11931191
1194 # Order is unchanged for the previous template.1192 # Order is unchanged for the previous template.
1195 potmsgsets = list(1193 potmsgsets = list(
1196 self.devel_sr_pofile.getPOTMsgSetWithErrors())1194 self.devel_pofile.getPOTMsgSetWithErrors())
1197 self.assertEquals(1195 self.assertEquals(
1198 [self.potmsgset1, self.potmsgset2], potmsgsets)1196 [self.potmsgset1, self.potmsgset2], potmsgsets)
11991197
@@ -1228,11 +1226,11 @@
12281226
1229 # Give the method something to search for.1227 # Give the method something to search for.
1230 self.factory.makeSharedTranslationMessage(1228 self.factory.makeSharedTranslationMessage(
1231 pofile=self.devel_sr_pofile,1229 pofile=self.devel_pofile,
1232 potmsgset=self.potmsgset1,1230 potmsgset=self.potmsgset1,
1233 translations=["Shared translation"])1231 translations=["Shared translation"])
1234 self.factory.makeSharedTranslationMessage(1232 self.factory.makeSharedTranslationMessage(
1235 pofile=self.devel_sr_pofile,1233 pofile=self.devel_pofile,
1236 potmsgset=self.potmsgset2,1234 potmsgset=self.potmsgset2,
1237 translations=["Another shared translation"])1235 translations=["Another shared translation"])
12381236
@@ -1241,7 +1239,7 @@
1241 removeSecurityProxy(self.potmsgset2).sequence = 11239 removeSecurityProxy(self.potmsgset2).sequence = 1
12421240
1243 potmsgsets = list(1241 potmsgsets = list(
1244 self.devel_sr_pofile.findPOTMsgSetsContaining("translation"))1242 self.devel_pofile.findPOTMsgSetsContaining("translation"))
12451243
1246 # Order ignores potmsgset.sequence.1244 # Order ignores potmsgset.sequence.
1247 self.assertEquals(1245 self.assertEquals(
12481246
=== modified file 'lib/lp/translations/tests/test_translatablemessage.py'
--- lib/lp/translations/tests/test_translatablemessage.py 2010-08-16 09:01:35 +0000
+++ lib/lp/translations/tests/test_translatablemessage.py 2010-08-16 15:11:45 +0000
@@ -47,7 +47,7 @@
47 if is_suggestion:47 if is_suggestion:
48 return self.factory.makeSuggestion(48 return self.factory.makeSuggestion(
49 pofile=self.pofile, potmsgset=self.potmsgset,49 pofile=self.pofile, potmsgset=self.potmsgset,
50 translations=translation, date_updated=date_updated)50 translations=translation, date_created=date_updated)
51 else:51 else:
52 return self.factory.makeTranslationMessage(52 return self.factory.makeTranslationMessage(
53 pofile=self.pofile, potmsgset=self.potmsgset,53 pofile=self.pofile, potmsgset=self.potmsgset,
5454
=== modified file 'lib/lp/translations/tests/test_translations_to_review.py'
--- lib/lp/translations/tests/test_translations_to_review.py 2010-08-16 09:01:35 +0000
+++ lib/lp/translations/tests/test_translations_to_review.py 2010-08-16 15:11:55 +0000
@@ -86,7 +86,7 @@
86 self.factory.makeSuggestion(86 self.factory.makeSuggestion(
87 potmsgset=self.potmsgset, pofile=self.pofile,87 potmsgset=self.potmsgset, pofile=self.pofile,
88 translator=self.factory.makePerson(), translations=['wi'],88 translator=self.factory.makePerson(), translations=['wi'],
89 date_updated=later_time))89 date_created=later_time))
9090
91 self.assertTrue(self.translation.is_current_ubuntu)91 self.assertTrue(self.translation.is_current_ubuntu)
92 self.pofile.updateStatistics()92 self.pofile.updateStatistics()
Revision history for this message
Jeroen T. Vermeulen (jtv) wrote :

Thanks for all the work you put in cleaning things up! I'm perfectly happy for you to reject cleanups I suggested (but did not require) in pre-existing code. The goal of a review is to get the branch in, not to keep it out or delay it. It's good as it is.

The only part of this tome that needs any further follow-up AFAIC is this bit:

>> # Setting a suggestion as current makes it have no unreviewed
>> # suggestions.
>>
>> As far as I know, that only happens if the review date is also updated.
>> (The creation or last-update date may be used as a fallback if the review
>> date is not set; I don't recall off the top of my head). In that case,
>> the new current translation is presumably newer than all suggestions and
>> so leaves no new suggestions. But the test code there only sets the
>> flag. I think this passes more or less by accident; what if there's
>> another suggestion that's newer than the suggestion that's being made
>> current?
>
> Didn't the old validators do all that? I agree though, that this most
> likely passes by accident now and I am pretty sure there may be more tests
> that do.

The validators only disabled the incumbent current message (if any). They did not set the review timestamp.

> This branch was meant as a mechanical replacement, though, so I think
> trying to check and fix all tests is beyond the scope.

That's fine with me. Could you add a note though, so we don't miss this when we debug problems with this test in the future? No need even to be completely 100% sure of what happens, just point out to future readers that there may possibly be a pitfall there.

Oh, and... Congratulations. :-)

Jeroen

review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/testing/factory.py'
--- lib/lp/testing/factory.py 2010-08-10 17:28:08 +0000
+++ lib/lp/testing/factory.py 2010-08-17 09:48:55 +0000
@@ -2072,8 +2072,7 @@
2072 if pofile is None:2072 if pofile is None:
2073 pofile = self.makePOFile('sr')2073 pofile = self.makePOFile('sr')
2074 if potmsgset is None:2074 if potmsgset is None:
2075 potmsgset = self.makePOTMsgSet(pofile.potemplate)2075 potmsgset = self.makePOTMsgSet(pofile.potemplate, sequence=1)
2076 potmsgset.setSequence(pofile.potemplate, 1)
2077 if translator is None:2076 if translator is None:
2078 translator = self.makePerson()2077 translator = self.makePerson()
2079 if translations is None:2078 if translations is None:
@@ -2092,6 +2091,42 @@
2092 naked_translation_message.sync()2091 naked_translation_message.sync()
2093 return translation_message2092 return translation_message
20942093
2094 def _makeTranslationsDict(self, translations=None):
2095 """Make sure translations are stored in a dict, e.g. {0: "foo"}.
2096
2097 If translations is already dict, it is returned unchanged.
2098 If translations is a sequence, it is enumerated into a dict.
2099 If translations is None, an arbitrary single translation is created.
2100 """
2101 if translations is None:
2102 return {0: self.getUniqueString()}
2103 if isinstance(translations, dict):
2104 return translations
2105 assert isinstance(translations, (list, tuple)), (
2106 "Expecting either a dict or a sequence." )
2107 return dict(enumerate(translations))
2108
2109 def makeSuggestion(self, pofile=None, potmsgset=None, translator=None,
2110 translations=None, date_created=None):
2111 """Make a new suggested `TranslationMessage` in the given PO file."""
2112 if pofile is None:
2113 pofile = self.makePOFile('sr')
2114 if potmsgset is None:
2115 potmsgset = self.makePOTMsgSet(pofile.potemplate, sequence=1)
2116 if translator is None:
2117 translator = self.makePerson()
2118 translations = self._makeTranslationsDict(translations)
2119 translation_message = potmsgset.submitSuggestion(
2120 pofile, translator, translations)
2121 assert translation_message is not None, (
2122 "Cannot make suggestion on translation credits POTMsgSet.")
2123 if date_created is not None:
2124 naked_translation_message = removeSecurityProxy(
2125 translation_message)
2126 naked_translation_message.date_created = date_created
2127 naked_translation_message.sync()
2128 return translation_message
2129
2095 def makeSharedTranslationMessage(self, pofile=None, potmsgset=None,2130 def makeSharedTranslationMessage(self, pofile=None, potmsgset=None,
2096 translator=None, suggestion=False,2131 translator=None, suggestion=False,
2097 reviewer=None, translations=None,2132 reviewer=None, translations=None,
20982133
=== modified file 'lib/lp/translations/browser/tests/test_pofile_view.py'
--- lib/lp/translations/browser/tests/test_pofile_view.py 2010-08-04 11:00:51 +0000
+++ lib/lp/translations/browser/tests/test_pofile_view.py 2010-08-17 09:48:55 +0000
@@ -45,9 +45,8 @@
45 self.factory.makeTranslationMessage(45 self.factory.makeTranslationMessage(
46 self.pofile, self.new_suggestion,46 self.pofile, self.new_suggestion,
47 date_updated=self.now())47 date_updated=self.now())
48 self.factory.makeTranslationMessage(48 self.factory.makeSuggestion(
49 self.pofile, self.new_suggestion, suggestion=True,49 self.pofile, self.new_suggestion, date_created=self.now())
50 date_updated=self.now())
51 # An upstream that was changed in Ubuntu.50 # An upstream that was changed in Ubuntu.
52 self.changed = self.factory.makePOTMsgSet(51 self.changed = self.factory.makePOTMsgSet(
53 self.potemplate, sequence=4)52 self.potemplate, sequence=4)
@@ -171,8 +170,3 @@
171 def setUp(self):170 def setUp(self):
172 super(TestPOFileTranslateViewInvalidFiltering, self).setUp()171 super(TestPOFileTranslateViewInvalidFiltering, self).setUp()
173 self.pofile = self.factory.makePOFile('eo')172 self.pofile = self.factory.makePOFile('eo')
174
175
176def test_suite():
177 return TestLoader().loadTestsFromName(__name__)
178
179173
=== modified file 'lib/lp/translations/browser/tests/test_translationmessage_view.py'
--- lib/lp/translations/browser/tests/test_translationmessage_view.py 2010-03-23 19:49:56 +0000
+++ lib/lp/translations/browser/tests/test_translationmessage_view.py 2010-08-17 09:48:55 +0000
@@ -51,13 +51,20 @@
51 translations = translation51 translations = translation
52 else:52 else:
53 translations = [translation]53 translations = [translation]
54 message = self.factory.makeTranslationMessage(54 if suggestion:
55 self.pofile, self.potmsgset,55 message = self.factory.makeSuggestion(
56 translations=translations,56 self.pofile, self.potmsgset,
57 suggestion=suggestion,57 translations=translations,
58 is_current_upstream=is_packaged,58 translator=self.owner,
59 translator=self.owner,59 date_created=self.now())
60 date_updated=self.now())60 else:
61 message = self.factory.makeTranslationMessage(
62 self.pofile, self.potmsgset,
63 translations=translations,
64 suggestion=suggestion,
65 is_current_upstream=is_packaged,
66 translator=self.owner,
67 date_updated=self.now())
61 message.browser_pofile = self.pofile68 message.browser_pofile = self.pofile
62 return message69 return message
6370
6471
=== modified file 'lib/lp/translations/browser/translationmessage.py'
--- lib/lp/translations/browser/translationmessage.py 2010-08-04 11:00:51 +0000
+++ lib/lp/translations/browser/translationmessage.py 2010-08-17 09:48:55 +0000
@@ -58,12 +58,10 @@
58from canonical.launchpad.webapp.batching import BatchNavigator58from canonical.launchpad.webapp.batching import BatchNavigator
59from canonical.launchpad.webapp.menu import structured59from canonical.launchpad.webapp.menu import structured
6060
61
62#61#
63# Exceptions and helper classes62# Exceptions and helper classes
64#63#
6564
66
67class POTMsgSetBatchNavigator(BatchNavigator):65class POTMsgSetBatchNavigator(BatchNavigator):
6866
69 def __init__(self, results, request, start=0, size=1):67 def __init__(self, results, request, start=0, size=1):
@@ -138,6 +136,7 @@
138#136#
139# Standard UI classes137# Standard UI classes
140#138#
139
141class CurrentTranslationMessageFacets(POTemplateFacets):140class CurrentTranslationMessageFacets(POTemplateFacets):
142 usedfor = ITranslationMessage141 usedfor = ITranslationMessage
143142
@@ -171,6 +170,7 @@
171#170#
172# Views171# Views
173#172#
173
174class CurrentTranslationMessageIndexView:174class CurrentTranslationMessageIndexView:
175 """A view to forward to the translation form."""175 """A view to forward to the translation form."""
176176
@@ -536,7 +536,7 @@
536 elif fallback_language is not None:536 elif fallback_language is not None:
537 # If there's a standard alternative language and no537 # If there's a standard alternative language and no
538 # user-specified language was provided, preselect it.538 # user-specified language was provided, preselect it.
539 alternative_language = fallback_language539 alternative_language = fallback_language
540 second_lang_code = fallback_language.code540 second_lang_code = fallback_language.code
541 else:541 else:
542 # The second_lang_code is None and there is no fallback_language.542 # The second_lang_code is None and there is no fallback_language.
@@ -1511,10 +1511,6 @@
15111511
1512 implements(ITranslationMessageSuggestions)1512 implements(ITranslationMessageSuggestions)
15131513
1514 def isFromSamePOFile(self, submission):
1515 """Return if submission is from the same PO file as a POMsgSet."""
1516 return self.pofile == submission['pofile']
1517
1518 def __init__(self, title, translation, submissions,1514 def __init__(self, title, translation, submissions,
1519 user_is_official_translator, form_is_writeable,1515 user_is_official_translator, form_is_writeable,
1520 plural_form, seen_translations=None, legal_warning=False):1516 plural_form, seen_translations=None, legal_warning=False):
15211517
=== modified file 'lib/lp/translations/tests/test_pofile.py'
--- lib/lp/translations/tests/test_pofile.py 2010-08-10 14:39:46 +0000
+++ lib/lp/translations/tests/test_pofile.py 2010-08-17 09:48:55 +0000
@@ -1,8 +1,6 @@
1# Copyright 2009-2010 Canonical Ltd. This software is licensed under the1# Copyright 2009-2010 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).2# GNU Affero General Public License version 3 (see the file LICENSE).
33
4# pylint: disable-msg=C0102
5
6__metaclass__ = type4__metaclass__ = type
75
8from datetime import datetime, timedelta6from datetime import datetime, timedelta
@@ -25,6 +23,171 @@
25from canonical.launchpad.webapp.publisher import canonical_url23from canonical.launchpad.webapp.publisher import canonical_url
2624
2725
26class TestTranslationSharedPOFileSourcePackage(TestCaseWithFactory):
27 """Test behavior of PO files with shared POTMsgSets on a source package.
28 """
29
30 layer = ZopelessDatabaseLayer
31
32 def setUp(self):
33 # Create a product with two series and a shared POTemplate
34 # in different series ('devel' and 'stable').
35 super(TestTranslationSharedPOFileSourcePackage, self).setUp()
36 self.foo = self.factory.makeDistribution()
37 self.foo_devel = self.factory.makeDistroSeries(
38 name='devel', distribution=self.foo)
39 self.foo_stable = self.factory.makeDistroSeries(
40 name='stable', distribution=self.foo)
41 self.foo.official_rosetta = True
42 self.sourcepackagename = self.factory.makeSourcePackageName()
43
44 # Two POTemplates share translations if they have the same name,
45 # in this case 'messages'.
46 self.devel_potemplate = self.factory.makePOTemplate(
47 distroseries=self.foo_devel,
48 sourcepackagename=self.sourcepackagename,
49 name="messages")
50 self.stable_potemplate = self.factory.makePOTemplate(
51 distroseries=self.foo_stable,
52 sourcepackagename=self.sourcepackagename,
53 name="messages")
54
55 # We'll use two PO files, one for each series.
56 self.devel_pofile = self.factory.makePOFile(
57 'sr', self.devel_potemplate)
58 self.stable_pofile = self.factory.makePOFile(
59 'sr', self.stable_potemplate)
60
61 # The POTMsgSet is added to only one of the POTemplates.
62 self.potmsgset = self.factory.makePOTMsgSet(
63 self.devel_potemplate, sequence=1)
64
65 def test_getPOTMsgSetWithNewSuggestions_shared(self):
66 # Test listing of suggestions for POTMsgSets with a shared
67 # translation.
68
69 # A POTMsgSet has a shared, current translation created 5 days ago.
70 date_created = datetime.now(pytz.UTC) - timedelta(5)
71 translation = self.factory.makeSuggestion(
72 pofile=self.devel_pofile, potmsgset=self.potmsgset,
73 translations=[u"Translation"], date_created=date_created)
74 translation.is_current_ubuntu = True
75
76 # When there are no suggestions, nothing is returned.
77 found_translations = list(
78 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
79 self.assertEquals(found_translations, [])
80
81 # When a suggestion is added one day after, the potmsgset is returned.
82 suggestion_date = date_created + timedelta(1)
83 suggestion = self.factory.makeSuggestion(
84 pofile=self.devel_pofile, potmsgset=self.potmsgset,
85 translations=[u"Suggestion"], date_created=suggestion_date)
86 self.assertEquals(suggestion.is_current_ubuntu, False)
87
88 found_translations = list(
89 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
90 self.assertEquals(found_translations, [self.potmsgset])
91
92 # Setting a suggestion as current makes it have no unreviewed
93 # suggestions.
94 # XXX henninge 2010-08-17: It looks like this test passes by
95 # accident as the suggestion already is the newest translation
96 # available. Other tests may be passing just by accident, too.
97 # This will have to be investigated when all bits and pieces are in
98 # place.
99 translation.is_current_ubuntu = False
100 suggestion.is_current_ubuntu = True
101 found_translations = list(
102 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
103 self.assertEquals(found_translations, [])
104
105 # And adding another suggestion 2 days later, the potmsgset is
106 # again returned.
107 suggestion_date += timedelta(2)
108 translation = self.factory.makeSuggestion(
109 pofile=self.devel_pofile, potmsgset=self.potmsgset,
110 translations=[u"New suggestion"], date_created=suggestion_date)
111 self.assertEquals(translation.is_current_ubuntu, False)
112
113 found_translations = list(
114 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
115 self.assertEquals(found_translations, [self.potmsgset])
116
117 def test_getPOTMsgSetWithNewSuggestions_diverged(self):
118 # Test listing of suggestions for POTMsgSets with a shared
119 # translation and a later diverged one.
120
121 # First we create a shared translation (5 days old), a diverged
122 # translation 1 day later.
123 # Then we make sure that getting unreviewed messages works when:
124 # * A suggestion is added 1 day after (shows as unreviewed).
125 # * A new diverged translation is added another day later (nothing).
126 # * A new suggestion is added after another day (shows).
127 # * Suggestion is made active (nothing).
128
129 # A POTMsgSet has a shared, current translation created 5 days ago.
130 date_created = datetime.now(pytz.UTC) - timedelta(5)
131 translation = self.factory.makeSuggestion(
132 pofile=self.devel_pofile, potmsgset=self.potmsgset,
133 translations=[u"Shared translation"], date_created=date_created)
134 translation.is_current_ubuntu = True
135
136 # And we also have a diverged translation created a day after a shared
137 # current translation.
138 diverged_date = date_created + timedelta(1)
139 diverged_translation = self.factory.makeSuggestion(
140 pofile=self.devel_pofile, potmsgset=self.potmsgset,
141 translations=[u"Old translation"], date_created=diverged_date)
142 diverged_translation.potemplate = self.devel_potemplate
143 diverged_translation.is_current_ubuntu = True
144
145 # There is also a suggestion against the shared translation
146 # created 2 days after the shared translation.
147 suggestion_date = date_created + timedelta(2)
148 suggestion = self.factory.makeSuggestion(
149 pofile=self.devel_pofile, potmsgset=self.potmsgset,
150 translations=[u"Shared suggestion"], date_created=suggestion_date)
151 self.assertEquals(suggestion.is_current_ubuntu, False)
152
153 # A suggestion is shown since diverged_date < suggestion_date.
154 found_translations = list(
155 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
156 self.assertEquals(found_translations, [self.potmsgset])
157
158 # When a diverged translation is added after the shared suggestion,
159 # there are no unreviewed suggestions.
160 diverged_date = suggestion_date + timedelta(1)
161 diverged_translation_2 = self.factory.makeTranslationMessage(
162 pofile=self.devel_pofile, potmsgset=self.potmsgset,
163 translations=[u"Translation"], date_updated=diverged_date)
164 diverged_translation.is_current_ubuntu = False
165 diverged_translation_2.potemplate = self.devel_potemplate
166 diverged_translation_2.is_current_ubuntu = True
167 found_translations = list(
168 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
169 self.assertEquals(found_translations, [])
170
171 # When a suggestion is added one day after, the potmsgset is returned.
172 suggestion_date = diverged_date + timedelta(1)
173 suggestion = self.factory.makeSuggestion(
174 pofile=self.devel_pofile, potmsgset=self.potmsgset,
175 translations=[u"Suggestion"], date_created=suggestion_date)
176 self.assertEquals(suggestion.is_current_ubuntu, False)
177
178 found_translations = list(
179 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
180 self.assertEquals(found_translations, [self.potmsgset])
181
182 # Setting a suggestion as current makes it have no unreviewed
183 # suggestions.
184 translation.is_current_ubuntu = False
185 suggestion.is_current_ubuntu = True
186 found_translations = list(
187 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
188 self.assertEquals(found_translations, [])
189
190
28class TestTranslationSharedPOFile(TestCaseWithFactory):191class TestTranslationSharedPOFile(TestCaseWithFactory):
29 """Test behaviour of PO files with shared POTMsgSets."""192 """Test behaviour of PO files with shared POTMsgSets."""
30193
@@ -41,22 +204,22 @@
41 name='stable', product=self.foo)204 name='stable', product=self.foo)
42 self.foo.official_rosetta = True205 self.foo.official_rosetta = True
43206
44 # POTemplate is 'shared' if it has the same name ('messages').207 # Two POTemplates share translations if they have the same name,
208 # in this case 'messages'.
45 self.devel_potemplate = self.factory.makePOTemplate(209 self.devel_potemplate = self.factory.makePOTemplate(
46 productseries=self.foo_devel, name="messages")210 productseries=self.foo_devel, name="messages")
47 self.stable_potemplate = self.factory.makePOTemplate(self.foo_stable,211 self.stable_potemplate = self.factory.makePOTemplate(self.foo_stable,
48 name="messages")212 name="messages")
49213
50 # We'll use two PO files, one for each series.214 # We'll use two PO files, one for each series.
51 self.devel_sr_pofile = self.factory.makePOFile(215 self.devel_pofile = self.factory.makePOFile(
52 'sr', self.devel_potemplate)216 'sr', self.devel_potemplate)
53 self.stable_sr_pofile = self.factory.makePOFile(217 self.stable_pofile = self.factory.makePOFile(
54 'sr', self.stable_potemplate)218 'sr', self.stable_potemplate)
55219
56 # Create a single POTMsgSet that is used across all tests,220 # The POTMsgSet is added to only one of the POTemplates.
57 # and add it to only one of the POTemplates.221 self.potmsgset = self.factory.makePOTMsgSet(
58 self.potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)222 self.devel_potemplate, sequence=1)
59 self.potmsgset.setSequence(self.devel_potemplate, 1)
60223
61 def test_findPOTMsgSetsContaining(self):224 def test_findPOTMsgSetsContaining(self):
62 # Test that search works correctly.225 # Test that search works correctly.
@@ -67,14 +230,14 @@
67 potmsgset.setSequence(self.devel_potemplate, 2)230 potmsgset.setSequence(self.devel_potemplate, 2)
68231
69 found_potmsgsets = list(232 found_potmsgsets = list(
70 self.devel_sr_pofile.findPOTMsgSetsContaining(u"wild"))233 self.devel_pofile.findPOTMsgSetsContaining(u"wild"))
71 self.assertEquals(found_potmsgsets, [potmsgset])234 self.assertEquals(found_potmsgsets, [potmsgset])
72235
73 # Just linking an existing POTMsgSet into another POTemplate236 # Just linking an existing POTMsgSet into another POTemplate
74 # will make it be returned in searches.237 # will make it be returned in searches.
75 potmsgset.setSequence(self.stable_potemplate, 2)238 potmsgset.setSequence(self.stable_potemplate, 2)
76 found_potmsgsets = list(239 found_potmsgsets = list(
77 self.stable_sr_pofile.findPOTMsgSetsContaining(u"wild"))240 self.stable_pofile.findPOTMsgSetsContaining(u"wild"))
78 self.assertEquals(found_potmsgsets, [potmsgset])241 self.assertEquals(found_potmsgsets, [potmsgset])
79242
80 # Searching for singular in plural messages works as well.243 # Searching for singular in plural messages works as well.
@@ -84,49 +247,49 @@
84 plural_potmsgset.setSequence(self.devel_potemplate, 3)247 plural_potmsgset.setSequence(self.devel_potemplate, 3)
85248
86 found_potmsgsets = list(249 found_potmsgsets = list(
87 self.devel_sr_pofile.findPOTMsgSetsContaining(u"singular"))250 self.devel_pofile.findPOTMsgSetsContaining(u"singular"))
88 self.assertEquals(found_potmsgsets, [plural_potmsgset])251 self.assertEquals(found_potmsgsets, [plural_potmsgset])
89252
90 # And searching for plural text returns only the matching plural253 # And searching for plural text returns only the matching plural
91 # message.254 # message.
92 found_potmsgsets = list(255 found_potmsgsets = list(
93 self.devel_sr_pofile.findPOTMsgSetsContaining(u"plural"))256 self.devel_pofile.findPOTMsgSetsContaining(u"plural"))
94 self.assertEquals(found_potmsgsets, [plural_potmsgset])257 self.assertEquals(found_potmsgsets, [plural_potmsgset])
95258
96 # Search translations as well.259 # Search translations as well.
97 self.factory.makeTranslationMessage(260 self.factory.makeTranslationMessage(
98 pofile=self.devel_sr_pofile, potmsgset=potmsgset,261 pofile=self.devel_pofile, potmsgset=potmsgset,
99 translations=[u"One translation message"])262 translations=[u"One translation message"])
100 found_potmsgsets = list(263 found_potmsgsets = list(
101 self.devel_sr_pofile.findPOTMsgSetsContaining(u"translation"))264 self.devel_pofile.findPOTMsgSetsContaining(u"translation"))
102 self.assertEquals(found_potmsgsets, [potmsgset])265 self.assertEquals(found_potmsgsets, [potmsgset])
103266
104 # Search matches all plural forms.267 # Search matches all plural forms.
105 self.factory.makeTranslationMessage(268 self.factory.makeTranslationMessage(
106 pofile=self.devel_sr_pofile, potmsgset=plural_potmsgset,269 pofile=self.devel_pofile, potmsgset=plural_potmsgset,
107 translations=[u"One translation message",270 translations=[u"One translation message",
108 u"Plural translation message",271 u"Plural translation message",
109 u"Third translation message"])272 u"Third translation message"])
110 found_potmsgsets = list(273 found_potmsgsets = list(
111 self.devel_sr_pofile.findPOTMsgSetsContaining(274 self.devel_pofile.findPOTMsgSetsContaining(
112 u"Plural translation"))275 u"Plural translation"))
113 self.assertEquals(found_potmsgsets, [plural_potmsgset])276 self.assertEquals(found_potmsgsets, [plural_potmsgset])
114277
115 # Search works case insensitively for English strings.278 # Search works case insensitively for English strings.
116 found_potmsgsets = list(279 found_potmsgsets = list(
117 self.devel_sr_pofile.findPOTMsgSetsContaining(u"WiLd"))280 self.devel_pofile.findPOTMsgSetsContaining(u"WiLd"))
118 self.assertEquals(found_potmsgsets, [potmsgset])281 self.assertEquals(found_potmsgsets, [potmsgset])
119 # ...English plural forms.282 # ...English plural forms.
120 found_potmsgsets = list(283 found_potmsgsets = list(
121 self.devel_sr_pofile.findPOTMsgSetsContaining(u"PLurAl"))284 self.devel_pofile.findPOTMsgSetsContaining(u"PLurAl"))
122 self.assertEquals(found_potmsgsets, [plural_potmsgset])285 self.assertEquals(found_potmsgsets, [plural_potmsgset])
123 # ...translations.286 # ...translations.
124 found_potmsgsets = list(287 found_potmsgsets = list(
125 self.devel_sr_pofile.findPOTMsgSetsContaining(u"tRANSlaTIon"))288 self.devel_pofile.findPOTMsgSetsContaining(u"tRANSlaTIon"))
126 self.assertEquals(found_potmsgsets, [potmsgset, plural_potmsgset])289 self.assertEquals(found_potmsgsets, [potmsgset, plural_potmsgset])
127 # ...and translated plurals.290 # ...and translated plurals.
128 found_potmsgsets = list(291 found_potmsgsets = list(
129 self.devel_sr_pofile.findPOTMsgSetsContaining(u"THIRD"))292 self.devel_pofile.findPOTMsgSetsContaining(u"THIRD"))
130 self.assertEquals(found_potmsgsets, [plural_potmsgset])293 self.assertEquals(found_potmsgsets, [plural_potmsgset])
131294
132 def test_getTranslationsFilteredBy(self):295 def test_getTranslationsFilteredBy(self):
@@ -139,27 +302,27 @@
139302
140 # When there are no translations, empty list is returned.303 # When there are no translations, empty list is returned.
141 found_translations = list(304 found_translations = list(
142 self.devel_sr_pofile.getTranslationsFilteredBy(submitter))305 self.devel_pofile.getTranslationsFilteredBy(submitter))
143 self.assertEquals(found_translations, [])306 self.assertEquals(found_translations, [])
144307
145 # If 'submitter' provides a translation, it's returned in a list.308 # If 'submitter' provides a translation, it's returned in a list.
146 translation = self.factory.makeTranslationMessage(309 translation = self.factory.makeTranslationMessage(
147 pofile=self.devel_sr_pofile, potmsgset=potmsgset,310 pofile=self.devel_pofile, potmsgset=potmsgset,
148 translations=[u"Translation message"],311 translations=[u"Translation message"],
149 translator=submitter)312 translator=submitter)
150 found_translations = list(313 found_translations = list(
151 self.devel_sr_pofile.getTranslationsFilteredBy(submitter))314 self.devel_pofile.getTranslationsFilteredBy(submitter))
152 self.assertEquals(found_translations, [translation])315 self.assertEquals(found_translations, [translation])
153316
154 # If somebody else provides a translation, it's not added to the317 # If somebody else provides a translation, it's not added to the
155 # list of submitter's translations.318 # list of submitter's translations.
156 someone_else = self.factory.makePerson()319 someone_else = self.factory.makePerson()
157 self.factory.makeTranslationMessage(320 self.factory.makeTranslationMessage(
158 pofile=self.devel_sr_pofile, potmsgset=potmsgset,321 pofile=self.devel_pofile, potmsgset=potmsgset,
159 translations=[u"Another translation"],322 translations=[u"Another translation"],
160 translator=someone_else)323 translator=someone_else)
161 found_translations = list(324 found_translations = list(
162 self.devel_sr_pofile.getTranslationsFilteredBy(submitter))325 self.devel_pofile.getTranslationsFilteredBy(submitter))
163 self.assertEquals(found_translations, [translation])326 self.assertEquals(found_translations, [translation])
164327
165 # Adding a translation for same POTMsgSet, but to a different328 # Adding a translation for same POTMsgSet, but to a different
@@ -175,17 +338,17 @@
175 translations=[u"Yet another translation"],338 translations=[u"Yet another translation"],
176 translator=submitter)339 translator=submitter)
177 found_translations = list(340 found_translations = list(
178 self.devel_sr_pofile.getTranslationsFilteredBy(submitter))341 self.devel_pofile.getTranslationsFilteredBy(submitter))
179 self.assertEquals(found_translations, [translation])342 self.assertEquals(found_translations, [translation])
180343
181 # If a POTMsgSet is shared between two templates, a344 # If a POTMsgSet is shared between two templates, a
182 # translation is listed on both.345 # translation is listed on both.
183 potmsgset.setSequence(self.stable_potemplate, 1)346 potmsgset.setSequence(self.stable_potemplate, 1)
184 found_translations = list(347 found_translations = list(
185 self.stable_sr_pofile.getTranslationsFilteredBy(submitter))348 self.stable_pofile.getTranslationsFilteredBy(submitter))
186 self.assertEquals(found_translations, [translation])349 self.assertEquals(found_translations, [translation])
187 found_translations = list(350 found_translations = list(
188 self.devel_sr_pofile.getTranslationsFilteredBy(submitter))351 self.devel_pofile.getTranslationsFilteredBy(submitter))
189 self.assertEquals(found_translations, [translation])352 self.assertEquals(found_translations, [translation])
190353
191 def test_getPOTMsgSetTranslated_NoShared(self):354 def test_getPOTMsgSetTranslated_NoShared(self):
@@ -194,23 +357,23 @@
194357
195 # When there is no diverged translation either, nothing is returned.358 # When there is no diverged translation either, nothing is returned.
196 found_translations = list(359 found_translations = list(
197 self.devel_sr_pofile.getPOTMsgSetTranslated())360 self.devel_pofile.getPOTMsgSetTranslated())
198 self.assertEquals(found_translations, [])361 self.assertEquals(found_translations, [])
199362
200 # When a diverged translation is added, the potmsgset is returned.363 # When a diverged translation is added, the potmsgset is returned.
201 self.factory.makeTranslationMessage(364 self.factory.makeTranslationMessage(
202 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,365 pofile=self.devel_pofile, potmsgset=self.potmsgset,
203 translations=[u"Translation"])366 translations=[u"Translation"])
204 found_translations = list(367 found_translations = list(
205 self.devel_sr_pofile.getPOTMsgSetTranslated())368 self.devel_pofile.getPOTMsgSetTranslated())
206 self.assertEquals(found_translations, [self.potmsgset])369 self.assertEquals(found_translations, [self.potmsgset])
207370
208 # If diverged translation is empty, POTMsgSet is not listed.371 # If diverged translation is empty, POTMsgSet is not listed.
209 self.factory.makeTranslationMessage(372 self.factory.makeTranslationMessage(
210 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,373 pofile=self.devel_pofile, potmsgset=self.potmsgset,
211 translations=[u""])374 translations=[u""])
212 found_translations = list(375 found_translations = list(
213 self.devel_sr_pofile.getPOTMsgSetTranslated())376 self.devel_pofile.getPOTMsgSetTranslated())
214 self.assertEquals(found_translations, [])377 self.assertEquals(found_translations, [])
215378
216 def test_getPOTMsgSetTranslated_Shared(self):379 def test_getPOTMsgSetTranslated_Shared(self):
@@ -219,28 +382,28 @@
219382
220 # We create a shared translation first.383 # We create a shared translation first.
221 self.factory.makeSharedTranslationMessage(384 self.factory.makeSharedTranslationMessage(
222 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,385 pofile=self.devel_pofile, potmsgset=self.potmsgset,
223 translations=[u"Shared translation"])386 translations=[u"Shared translation"])
224387
225 # When there is no diverged translation, shared one is returned.388 # When there is no diverged translation, shared one is returned.
226 found_translations = list(389 found_translations = list(
227 self.devel_sr_pofile.getPOTMsgSetTranslated())390 self.devel_pofile.getPOTMsgSetTranslated())
228 self.assertEquals(found_translations, [self.potmsgset])391 self.assertEquals(found_translations, [self.potmsgset])
229392
230 # When an empty diverged translation is added, nothing is listed.393 # When an empty diverged translation is added, nothing is listed.
231 self.factory.makeTranslationMessage(394 self.factory.makeTranslationMessage(
232 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,395 pofile=self.devel_pofile, potmsgset=self.potmsgset,
233 translations=[u""])396 translations=[u""])
234 found_translations = list(397 found_translations = list(
235 self.devel_sr_pofile.getPOTMsgSetTranslated())398 self.devel_pofile.getPOTMsgSetTranslated())
236 self.assertEquals(found_translations, [])399 self.assertEquals(found_translations, [])
237400
238 # If diverged translation is non-empty, POTMsgSet is listed.401 # If diverged translation is non-empty, POTMsgSet is listed.
239 self.factory.makeTranslationMessage(402 self.factory.makeTranslationMessage(
240 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,403 pofile=self.devel_pofile, potmsgset=self.potmsgset,
241 translations=[u"Translation"])404 translations=[u"Translation"])
242 found_translations = list(405 found_translations = list(
243 self.devel_sr_pofile.getPOTMsgSetTranslated())406 self.devel_pofile.getPOTMsgSetTranslated())
244 self.assertEquals(found_translations, [self.potmsgset])407 self.assertEquals(found_translations, [self.potmsgset])
245408
246 def test_getPOTMsgSetTranslated_EmptyShared(self):409 def test_getPOTMsgSetTranslated_EmptyShared(self):
@@ -249,29 +412,29 @@
249412
250 # We create an empty shared translation first.413 # We create an empty shared translation first.
251 self.factory.makeSharedTranslationMessage(414 self.factory.makeSharedTranslationMessage(
252 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,415 pofile=self.devel_pofile, potmsgset=self.potmsgset,
253 translations=[u""])416 translations=[u""])
254417
255 # When there is no diverged translation, shared one is returned,418 # When there is no diverged translation, shared one is returned,
256 # but since it's empty, there are no results.419 # but since it's empty, there are no results.
257 found_translations = list(420 found_translations = list(
258 self.devel_sr_pofile.getPOTMsgSetTranslated())421 self.devel_pofile.getPOTMsgSetTranslated())
259 self.assertEquals(found_translations, [])422 self.assertEquals(found_translations, [])
260423
261 # When an empty diverged translation is added, nothing is listed.424 # When an empty diverged translation is added, nothing is listed.
262 self.factory.makeTranslationMessage(425 self.factory.makeTranslationMessage(
263 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,426 pofile=self.devel_pofile, potmsgset=self.potmsgset,
264 translations=[u""])427 translations=[u""])
265 found_translations = list(428 found_translations = list(
266 self.devel_sr_pofile.getPOTMsgSetTranslated())429 self.devel_pofile.getPOTMsgSetTranslated())
267 self.assertEquals(found_translations, [])430 self.assertEquals(found_translations, [])
268431
269 # If diverged translation is non-empty, POTMsgSet is listed.432 # If diverged translation is non-empty, POTMsgSet is listed.
270 self.factory.makeTranslationMessage(433 self.factory.makeTranslationMessage(
271 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,434 pofile=self.devel_pofile, potmsgset=self.potmsgset,
272 translations=[u"Translation"])435 translations=[u"Translation"])
273 found_translations = list(436 found_translations = list(
274 self.devel_sr_pofile.getPOTMsgSetTranslated())437 self.devel_pofile.getPOTMsgSetTranslated())
275 self.assertEquals(found_translations, [self.potmsgset])438 self.assertEquals(found_translations, [self.potmsgset])
276439
277 def test_getPOTMsgSetTranslated_Multiple(self):440 def test_getPOTMsgSetTranslated_Multiple(self):
@@ -280,7 +443,7 @@
280443
281 # Add a diverged translation on the included POTMsgSet...444 # Add a diverged translation on the included POTMsgSet...
282 self.factory.makeTranslationMessage(445 self.factory.makeTranslationMessage(
283 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,446 pofile=self.devel_pofile, potmsgset=self.potmsgset,
284 translations=[u"Diverged translation"])447 translations=[u"Diverged translation"])
285448
286 # and a shared translation on newly added POTMsgSet...449 # and a shared translation on newly added POTMsgSet...
@@ -289,12 +452,12 @@
289 potmsgset.setSequence(self.devel_potemplate, 2)452 potmsgset.setSequence(self.devel_potemplate, 2)
290453
291 self.factory.makeSharedTranslationMessage(454 self.factory.makeSharedTranslationMessage(
292 pofile=self.devel_sr_pofile, potmsgset=potmsgset,455 pofile=self.devel_pofile, potmsgset=potmsgset,
293 translations=[u"Shared translation"])456 translations=[u"Shared translation"])
294457
295 # Both POTMsgSets are listed.458 # Both POTMsgSets are listed.
296 found_translations = list(459 found_translations = list(
297 self.devel_sr_pofile.getPOTMsgSetTranslated())460 self.devel_pofile.getPOTMsgSetTranslated())
298 self.assertEquals(found_translations, [self.potmsgset, potmsgset])461 self.assertEquals(found_translations, [self.potmsgset, potmsgset])
299462
300 def test_getPOTMsgSetUntranslated_NoShared(self):463 def test_getPOTMsgSetUntranslated_NoShared(self):
@@ -303,23 +466,23 @@
303466
304 # When there is no diverged translation either, nothing is returned.467 # When there is no diverged translation either, nothing is returned.
305 found_translations = list(468 found_translations = list(
306 self.devel_sr_pofile.getPOTMsgSetUntranslated())469 self.devel_pofile.getPOTMsgSetUntranslated())
307 self.assertEquals(found_translations, [self.potmsgset])470 self.assertEquals(found_translations, [self.potmsgset])
308471
309 # When a diverged translation is added, the potmsgset is returned.472 # When a diverged translation is added, the potmsgset is returned.
310 self.factory.makeTranslationMessage(473 self.factory.makeTranslationMessage(
311 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,474 pofile=self.devel_pofile, potmsgset=self.potmsgset,
312 translations=[u"Translation"])475 translations=[u"Translation"])
313 found_translations = list(476 found_translations = list(
314 self.devel_sr_pofile.getPOTMsgSetUntranslated())477 self.devel_pofile.getPOTMsgSetUntranslated())
315 self.assertEquals(found_translations, [])478 self.assertEquals(found_translations, [])
316479
317 # If diverged translation is empty, POTMsgSet is not listed.480 # If diverged translation is empty, POTMsgSet is not listed.
318 self.factory.makeTranslationMessage(481 self.factory.makeTranslationMessage(
319 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,482 pofile=self.devel_pofile, potmsgset=self.potmsgset,
320 translations=[u""])483 translations=[u""])
321 found_translations = list(484 found_translations = list(
322 self.devel_sr_pofile.getPOTMsgSetUntranslated())485 self.devel_pofile.getPOTMsgSetUntranslated())
323 self.assertEquals(found_translations, [self.potmsgset])486 self.assertEquals(found_translations, [self.potmsgset])
324487
325 def test_getPOTMsgSetUntranslated_Shared(self):488 def test_getPOTMsgSetUntranslated_Shared(self):
@@ -328,28 +491,28 @@
328491
329 # We create a shared translation first.492 # We create a shared translation first.
330 self.factory.makeSharedTranslationMessage(493 self.factory.makeSharedTranslationMessage(
331 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,494 pofile=self.devel_pofile, potmsgset=self.potmsgset,
332 translations=[u"Shared translation"])495 translations=[u"Shared translation"])
333496
334 # When there is no diverged translation, shared one is returned.497 # When there is no diverged translation, shared one is returned.
335 found_translations = list(498 found_translations = list(
336 self.devel_sr_pofile.getPOTMsgSetUntranslated())499 self.devel_pofile.getPOTMsgSetUntranslated())
337 self.assertEquals(found_translations, [])500 self.assertEquals(found_translations, [])
338501
339 # When an empty diverged translation is added, nothing is listed.502 # When an empty diverged translation is added, nothing is listed.
340 self.factory.makeTranslationMessage(503 self.factory.makeTranslationMessage(
341 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,504 pofile=self.devel_pofile, potmsgset=self.potmsgset,
342 translations=[u""])505 translations=[u""])
343 found_translations = list(506 found_translations = list(
344 self.devel_sr_pofile.getPOTMsgSetUntranslated())507 self.devel_pofile.getPOTMsgSetUntranslated())
345 self.assertEquals(found_translations, [self.potmsgset])508 self.assertEquals(found_translations, [self.potmsgset])
346509
347 # If diverged translation is non-empty, POTMsgSet is listed.510 # If diverged translation is non-empty, POTMsgSet is listed.
348 self.factory.makeTranslationMessage(511 self.factory.makeTranslationMessage(
349 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,512 pofile=self.devel_pofile, potmsgset=self.potmsgset,
350 translations=[u"Translation"])513 translations=[u"Translation"])
351 found_translations = list(514 found_translations = list(
352 self.devel_sr_pofile.getPOTMsgSetUntranslated())515 self.devel_pofile.getPOTMsgSetUntranslated())
353 self.assertEquals(found_translations, [])516 self.assertEquals(found_translations, [])
354517
355 def test_getPOTMsgSetUntranslated_EmptyShared(self):518 def test_getPOTMsgSetUntranslated_EmptyShared(self):
@@ -358,29 +521,29 @@
358521
359 # We create an empty shared translation first.522 # We create an empty shared translation first.
360 self.factory.makeSharedTranslationMessage(523 self.factory.makeSharedTranslationMessage(
361 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,524 pofile=self.devel_pofile, potmsgset=self.potmsgset,
362 translations=[u""])525 translations=[u""])
363526
364 # When there is no diverged translation, shared one is returned,527 # When there is no diverged translation, shared one is returned,
365 # but since it's empty, there are no results.528 # but since it's empty, there are no results.
366 found_translations = list(529 found_translations = list(
367 self.devel_sr_pofile.getPOTMsgSetUntranslated())530 self.devel_pofile.getPOTMsgSetUntranslated())
368 self.assertEquals(found_translations, [self.potmsgset])531 self.assertEquals(found_translations, [self.potmsgset])
369532
370 # When an empty diverged translation is added, nothing is listed.533 # When an empty diverged translation is added, nothing is listed.
371 self.factory.makeTranslationMessage(534 self.factory.makeTranslationMessage(
372 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,535 pofile=self.devel_pofile, potmsgset=self.potmsgset,
373 translations=[u""])536 translations=[u""])
374 found_translations = list(537 found_translations = list(
375 self.devel_sr_pofile.getPOTMsgSetUntranslated())538 self.devel_pofile.getPOTMsgSetUntranslated())
376 self.assertEquals(found_translations, [self.potmsgset])539 self.assertEquals(found_translations, [self.potmsgset])
377540
378 # If diverged translation is non-empty, POTMsgSet is listed.541 # If diverged translation is non-empty, POTMsgSet is listed.
379 self.factory.makeTranslationMessage(542 self.factory.makeTranslationMessage(
380 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,543 pofile=self.devel_pofile, potmsgset=self.potmsgset,
381 translations=[u"Translation"])544 translations=[u"Translation"])
382 found_translations = list(545 found_translations = list(
383 self.devel_sr_pofile.getPOTMsgSetUntranslated())546 self.devel_pofile.getPOTMsgSetUntranslated())
384 self.assertEquals(found_translations, [])547 self.assertEquals(found_translations, [])
385548
386 def test_getPOTMsgSetUntranslated_Multiple(self):549 def test_getPOTMsgSetUntranslated_Multiple(self):
@@ -389,7 +552,7 @@
389552
390 # Add an empty translation to the included POTMsgSet...553 # Add an empty translation to the included POTMsgSet...
391 self.factory.makeTranslationMessage(554 self.factory.makeTranslationMessage(
392 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,555 pofile=self.devel_pofile, potmsgset=self.potmsgset,
393 translations=[u""])556 translations=[u""])
394557
395 # ...and a new untranslated POTMsgSet.558 # ...and a new untranslated POTMsgSet.
@@ -399,7 +562,7 @@
399562
400 # Both POTMsgSets are listed.563 # Both POTMsgSets are listed.
401 found_translations = list(564 found_translations = list(
402 self.devel_sr_pofile.getPOTMsgSetUntranslated())565 self.devel_pofile.getPOTMsgSetUntranslated())
403 self.assertEquals(found_translations, [self.potmsgset, potmsgset])566 self.assertEquals(found_translations, [self.potmsgset, potmsgset])
404567
405 def test_getPOTMsgSetWithNewSuggestions(self):568 def test_getPOTMsgSetWithNewSuggestions(self):
@@ -407,142 +570,26 @@
407570
408 # When there are no suggestions, nothing is returned.571 # When there are no suggestions, nothing is returned.
409 found_translations = list(572 found_translations = list(
410 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())573 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
411 self.assertEquals(found_translations, [])574 self.assertEquals(found_translations, [])
412575
413 # When a suggestion is added, the potmsgset is returned.576 # When a suggestion is added, the potmsgset is returned.
414 translation = self.factory.makeTranslationMessage(577 translation = self.factory.makeSuggestion(
415 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,578 pofile=self.devel_pofile, potmsgset=self.potmsgset,
416 translations=[u"Suggestion"], suggestion=True)579 translations=[u"Suggestion"])
417 self.assertEquals(translation.is_current_ubuntu, False)580 self.assertEquals(translation.is_current_ubuntu, False)
418581
419 found_translations = list(582 found_translations = list(
420 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())583 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
421 self.assertEquals(found_translations, [self.potmsgset])584 self.assertEquals(found_translations, [self.potmsgset])
422585
423 def test_getPOTMsgSetWithNewSuggestions_Shared(self):586 def test_getPOTMsgSetWithNewSuggestions_multiple(self):
424 # Test listing of suggestions for POTMsgSets with a shared
425 # translation.
426
427 # A POTMsgSet has a shared, current translation created 5 days ago.
428 date_created = datetime.now(pytz.UTC)-timedelta(5)
429 translation = self.factory.makeSharedTranslationMessage(
430 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,
431 translations=[u"Translation"], date_updated=date_created)
432 self.assertEquals(translation.is_current_ubuntu, True)
433
434 # When there are no suggestions, nothing is returned.
435 found_translations = list(
436 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())
437 self.assertEquals(found_translations, [])
438
439 # When a suggestion is added one day after, the potmsgset is returned.
440 suggestion_date = date_created + timedelta(1)
441 translation = self.factory.makeTranslationMessage(
442 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,
443 translations=[u"Suggestion"], suggestion=True,
444 date_updated=suggestion_date)
445 self.assertEquals(translation.is_current_ubuntu, False)
446
447 found_translations = list(
448 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())
449 self.assertEquals(found_translations, [self.potmsgset])
450
451 # Setting a suggestion as current makes it have no unreviewed
452 # suggestions.
453 translation.is_current_ubuntu = True
454 found_translations = list(
455 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())
456 self.assertEquals(found_translations, [])
457
458 # And adding another suggestion 2 days later, the potmsgset is
459 # again returned.
460 suggestion_date += timedelta(2)
461 translation = self.factory.makeTranslationMessage(
462 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,
463 translations=[u"New suggestion"], suggestion=True,
464 date_updated=suggestion_date)
465 self.assertEquals(translation.is_current_ubuntu, False)
466
467 found_translations = list(
468 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())
469 self.assertEquals(found_translations, [self.potmsgset])
470
471 def test_getPOTMsgSetWithNewSuggestions_Diverged(self):
472 # Test listing of suggestions for POTMsgSets with a shared
473 # translation and a later diverged one.
474
475 # First we create a shared translation (5 days old), a diverged
476 # translation 1 day later.
477 # Then we make sure that getting unreviewed messages works when:
478 # * A suggestion is added 1 day after (shows as unreviewed).
479 # * A new diverged translation is added another day later (nothing).
480 # * A new suggestion is added after another day (shows).
481 # * Suggestion is made active (nothing).
482
483 # A POTMsgSet has a shared, current translation created 5 days ago.
484 date_created = datetime.now(pytz.UTC)-timedelta(5)
485 self.factory.makeSharedTranslationMessage(
486 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,
487 translations=[u"Shared translation"], date_updated=date_created)
488
489 # And we also have a diverged translation created a day after shared
490 # current translation.
491 diverged_date = date_created + timedelta(1)
492 self.factory.makeTranslationMessage(
493 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,
494 translations=[u"Old translation"], date_updated=diverged_date)
495
496 # There is also a suggestion against the shared translation
497 # created 2 days after the shared translation.
498 suggestion_date = date_created + timedelta(2)
499 translation = self.factory.makeSharedTranslationMessage(
500 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,
501 translations=[u"Shared suggestion"], suggestion=True,
502 date_updated=suggestion_date)
503 self.assertEquals(translation.is_current_ubuntu, False)
504
505 # Shared suggestion is shown since diverged_date < suggestion_date.
506 found_translations = list(
507 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())
508 self.assertEquals(found_translations, [self.potmsgset])
509
510 # When a diverged translation is done after the shared suggestion,
511 # there are no unreviewed suggestions.
512 diverged_date = suggestion_date + timedelta(1)
513 translation = self.factory.makeTranslationMessage(
514 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,
515 translations=[u"Translation"], date_updated=diverged_date)
516 found_translations = list(
517 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())
518 self.assertEquals(found_translations, [])
519
520 # When a suggestion is added one day after, the potmsgset is returned.
521 suggestion_date = diverged_date + timedelta(1)
522 translation = self.factory.makeTranslationMessage(
523 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,
524 translations=[u"Suggestion"], suggestion=True,
525 date_updated=suggestion_date)
526 self.assertEquals(translation.is_current_ubuntu, False)
527
528 found_translations = list(
529 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())
530 self.assertEquals(found_translations, [self.potmsgset])
531
532 # Setting a suggestion as current makes it have no unreviewed
533 # suggestions.
534 translation.is_current_ubuntu = True
535 found_translations = list(
536 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())
537 self.assertEquals(found_translations, [])
538
539 def test_getPOTMsgSetWithNewSuggestions_Multiple(self):
540 # Test that multiple unreviewed POTMsgSets are returned.587 # Test that multiple unreviewed POTMsgSets are returned.
541588
542 # One POTMsgSet has no translations, but only a suggestion.589 # One POTMsgSet has no translations, but only a suggestion.
543 self.factory.makeTranslationMessage(590 self.factory.makeSuggestion(
544 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,591 pofile=self.devel_pofile, potmsgset=self.potmsgset,
545 translations=[u"New suggestion"], suggestion=True)592 translations=[u"New suggestion"])
546593
547 # Another POTMsgSet has both a translation and a suggestion.594 # Another POTMsgSet has both a translation and a suggestion.
548 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate,595 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate,
@@ -550,52 +597,49 @@
550 potmsgset.setSequence(self.devel_potemplate, 2)597 potmsgset.setSequence(self.devel_potemplate, 2)
551 date_created = datetime.now(pytz.UTC) - timedelta(5)598 date_created = datetime.now(pytz.UTC) - timedelta(5)
552 self.factory.makeTranslationMessage(599 self.factory.makeTranslationMessage(
553 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,600 pofile=self.devel_pofile, potmsgset=self.potmsgset,
554 translations=[u"Translation"], date_updated=date_created)601 translations=[u"Translation"], date_updated=date_created)
555 suggestion_date = date_created + timedelta(1)602 suggestion_date = date_created + timedelta(1)
556 self.factory.makeTranslationMessage(603 self.factory.makeSuggestion(
557 pofile=self.devel_sr_pofile, potmsgset=potmsgset,604 pofile=self.devel_pofile, potmsgset=potmsgset,
558 translations=[u"New suggestion"], suggestion=True,605 translations=[u"New suggestion"], date_created=suggestion_date)
559 date_updated=suggestion_date)
560606
561 # Both POTMsgSets are listed.607 # Both POTMsgSets are listed.
562 found_translations = list(608 found_translations = list(
563 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())609 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
564 self.assertEquals(found_translations, [self.potmsgset, potmsgset])610 self.assertEquals(found_translations, [self.potmsgset, potmsgset])
565611
566 def test_getPOTMsgSetWithNewSuggestions_distinct(self):612 def test_getPOTMsgSetWithNewSuggestions_distinct(self):
567 # Provide two suggestions on a single message and make sure613 # Provide two suggestions on a single message and make sure
568 # a POTMsgSet is returned only once.614 # a POTMsgSet is returned only once.
569 self.factory.makeSharedTranslationMessage(615 self.factory.makeSuggestion(
570 pofile=self.devel_sr_pofile,616 pofile=self.devel_pofile,
571 potmsgset=self.potmsgset,617 potmsgset=self.potmsgset,
572 translations=["A suggestion"],618 translations=["A suggestion"])
573 suggestion=True)619 self.factory.makeSuggestion(
574 self.factory.makeSharedTranslationMessage(620 pofile=self.devel_pofile,
575 pofile=self.devel_sr_pofile,621 potmsgset=self.potmsgset,
576 potmsgset=self.potmsgset,622 translations=["Another suggestion"])
577 translations=["Another suggestion"],
578 suggestion=True)
579623
580 potmsgsets = list(624 potmsgsets = list(
581 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())625 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
582 self.assertEquals(potmsgsets,626 self.assertEquals(potmsgsets,
583 [self.potmsgset])627 [self.potmsgset])
584 self.assertEquals(628 self.assertEquals(
585 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions().count(),629 self.devel_pofile.getPOTMsgSetWithNewSuggestions().count(),
586 1)630 1)
587631
588 def test_getPOTMsgSetWithNewSuggestions_empty(self):632 def test_getPOTMsgSetWithNewSuggestions_empty(self):
589 # Test listing of POTMsgSets with empty strings as suggestions.633 # Test listing of POTMsgSets with empty strings as suggestions.
590634
591 # When an empty suggestion is added, the potmsgset is NOT returned.635 # When an empty suggestion is added, the potmsgset is NOT returned.
592 translation = self.factory.makeTranslationMessage(636 translation = self.factory.makeSuggestion(
593 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,637 pofile=self.devel_pofile, potmsgset=self.potmsgset,
594 translations=[u""], suggestion=True)638 translations=[])
595 self.assertEquals(False, translation.is_current_ubuntu)639 self.assertEquals(False, translation.is_current_ubuntu)
596640
597 found_translations = list(641 found_translations = list(
598 self.devel_sr_pofile.getPOTMsgSetWithNewSuggestions())642 self.devel_pofile.getPOTMsgSetWithNewSuggestions())
599 self.assertEquals([], found_translations)643 self.assertEquals([], found_translations)
600644
601 def test_getPOTMsgSetChangedInUbuntu(self):645 def test_getPOTMsgSetChangedInUbuntu(self):
@@ -603,72 +647,72 @@
603647
604 # If there are no translations in Ubuntu, nothing is listed.648 # If there are no translations in Ubuntu, nothing is listed.
605 found_translations = list(649 found_translations = list(
606 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())650 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
607 self.assertEquals(found_translations, [])651 self.assertEquals(found_translations, [])
608652
609 # Adding a non-imported current translation doesn't change anything.653 # Adding a non-imported current translation doesn't change anything.
610 translation = self.factory.makeSharedTranslationMessage(654 translation = self.factory.makeSharedTranslationMessage(
611 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,655 pofile=self.devel_pofile, potmsgset=self.potmsgset,
612 translations=[u"Non-imported translation"])656 translations=[u"Non-imported translation"])
613 self.assertEquals(translation.is_current_upstream, False)657 self.assertEquals(translation.is_current_upstream, False)
614 found_translations = list(658 found_translations = list(
615 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())659 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
616 self.assertEquals(found_translations, [])660 self.assertEquals(found_translations, [])
617661
618 # Adding an imported translation which is also current indicates662 # Adding an imported translation which is also current indicates
619 # that there are no changes.663 # that there are no changes.
620 translation = self.factory.makeSharedTranslationMessage(664 translation = self.factory.makeSharedTranslationMessage(
621 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,665 pofile=self.devel_pofile, potmsgset=self.potmsgset,
622 translations=[u"Imported translation"], is_current_upstream=True)666 translations=[u"Imported translation"], is_current_upstream=True)
623 self.assertEquals(translation.is_current_upstream, True)667 self.assertEquals(translation.is_current_upstream, True)
624 self.assertEquals(translation.is_current_ubuntu, True)668 self.assertEquals(translation.is_current_ubuntu, True)
625 found_translations = list(669 found_translations = list(
626 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())670 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
627 self.assertEquals(found_translations, [])671 self.assertEquals(found_translations, [])
628672
629 # However, changing current translation to a non-imported one673 # However, changing current translation to a non-imported one
630 # makes this a changed in Ubuntu translation.674 # makes this a changed in Ubuntu translation.
631 translation = self.factory.makeSharedTranslationMessage(675 translation = self.factory.makeSharedTranslationMessage(
632 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,676 pofile=self.devel_pofile, potmsgset=self.potmsgset,
633 translations=[u"Changed translation"], is_current_upstream=False)677 translations=[u"Changed translation"], is_current_upstream=False)
634 self.assertEquals(translation.is_current_upstream, False)678 self.assertEquals(translation.is_current_upstream, False)
635 self.assertEquals(translation.is_current_ubuntu, True)679 self.assertEquals(translation.is_current_ubuntu, True)
636 found_translations = list(680 found_translations = list(
637 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())681 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
638 self.assertEquals(found_translations, [self.potmsgset])682 self.assertEquals(found_translations, [self.potmsgset])
639683
640 # Adding a diverged, non-imported translation, still lists684 # Adding a diverged, non-imported translation, still lists
641 # it as a changed translation.685 # it as a changed translation.
642 translation = self.factory.makeTranslationMessage(686 translation = self.factory.makeTranslationMessage(
643 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,687 pofile=self.devel_pofile, potmsgset=self.potmsgset,
644 translations=[u"Diverged translation"], is_current_upstream=False)688 translations=[u"Diverged translation"], is_current_upstream=False)
645 self.assertEquals(translation.is_current_upstream, False)689 self.assertEquals(translation.is_current_upstream, False)
646 self.assertEquals(translation.is_current_ubuntu, True)690 self.assertEquals(translation.is_current_ubuntu, True)
647 found_translations = list(691 found_translations = list(
648 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())692 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
649 self.assertEquals(found_translations, [self.potmsgset])693 self.assertEquals(found_translations, [self.potmsgset])
650694
651 # But adding a diverged current and imported translation means695 # But adding a diverged current and imported translation means
652 # that it's not changed anymore.696 # that it's not changed anymore.
653 translation = self.factory.makeTranslationMessage(697 translation = self.factory.makeTranslationMessage(
654 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,698 pofile=self.devel_pofile, potmsgset=self.potmsgset,
655 translations=[u"Diverged imported"], is_current_upstream=True,699 translations=[u"Diverged imported"], is_current_upstream=True,
656 force_diverged=True)700 force_diverged=True)
657 self.assertEquals(translation.is_current_upstream, True)701 self.assertEquals(translation.is_current_upstream, True)
658 self.assertEquals(translation.is_current_ubuntu, True)702 self.assertEquals(translation.is_current_ubuntu, True)
659 found_translations = list(703 found_translations = list(
660 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())704 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
661 self.assertEquals(found_translations, [])705 self.assertEquals(found_translations, [])
662706
663 # Changing from a diverged, imported translation is correctly707 # Changing from a diverged, imported translation is correctly
664 # detected.708 # detected.
665 translation = self.factory.makeTranslationMessage(709 translation = self.factory.makeTranslationMessage(
666 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,710 pofile=self.devel_pofile, potmsgset=self.potmsgset,
667 translations=[u"Diverged changed"], is_current_upstream=False)711 translations=[u"Diverged changed"], is_current_upstream=False)
668 self.assertEquals(translation.is_current_upstream, False)712 self.assertEquals(translation.is_current_upstream, False)
669 self.assertEquals(translation.is_current_ubuntu, True)713 self.assertEquals(translation.is_current_ubuntu, True)
670 found_translations = list(714 found_translations = list(
671 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())715 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
672 self.assertEquals(found_translations, [self.potmsgset])716 self.assertEquals(found_translations, [self.potmsgset])
673717
674 def test_getPOTMsgSetChangedInUbuntu_diverged_imported(self):718 def test_getPOTMsgSetChangedInUbuntu_diverged_imported(self):
@@ -682,11 +726,11 @@
682 # 1) Shared imported and current translation.726 # 1) Shared imported and current translation.
683 # 2) Diverged, imported, non-current message.727 # 2) Diverged, imported, non-current message.
684 shared = self.factory.makeSharedTranslationMessage(728 shared = self.factory.makeSharedTranslationMessage(
685 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,729 pofile=self.devel_pofile, potmsgset=self.potmsgset,
686 translations=[u"Shared imported current"],730 translations=[u"Shared imported current"],
687 is_current_upstream=True)731 is_current_upstream=True)
688 diverged = self.factory.makeTranslationMessage(732 diverged = self.factory.makeTranslationMessage(
689 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,733 pofile=self.devel_pofile, potmsgset=self.potmsgset,
690 translations=[u"Diverged imported non-current"],734 translations=[u"Diverged imported non-current"],
691 is_current_upstream=True, force_diverged=True)735 is_current_upstream=True, force_diverged=True)
692 # As we can't come to this situation using existing code,736 # As we can't come to this situation using existing code,
@@ -702,7 +746,7 @@
702746
703 # Such POTMsgSet is not considered changed in this PO file.747 # Such POTMsgSet is not considered changed in this PO file.
704 found_translations = list(748 found_translations = list(
705 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())749 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
706 self.assertEquals(found_translations, [])750 self.assertEquals(found_translations, [])
707751
708 def test_getPOTMsgSetChangedInUbuntu_SharedDiverged(self):752 def test_getPOTMsgSetChangedInUbuntu_SharedDiverged(self):
@@ -711,34 +755,34 @@
711 # Adding an imported translation which is also current indicates755 # Adding an imported translation which is also current indicates
712 # that there are no changes.756 # that there are no changes.
713 translation = self.factory.makeSharedTranslationMessage(757 translation = self.factory.makeSharedTranslationMessage(
714 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,758 pofile=self.devel_pofile, potmsgset=self.potmsgset,
715 translations=[u"Imported translation"], is_current_upstream=True)759 translations=[u"Imported translation"], is_current_upstream=True)
716 self.assertEquals(translation.is_current_upstream, True)760 self.assertEquals(translation.is_current_upstream, True)
717 self.assertEquals(translation.is_current_ubuntu, True)761 self.assertEquals(translation.is_current_ubuntu, True)
718 found_translations = list(762 found_translations = list(
719 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())763 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
720 self.assertEquals(found_translations, [])764 self.assertEquals(found_translations, [])
721765
722 # Adding a diverged, non-imported translation makes it appear766 # Adding a diverged, non-imported translation makes it appear
723 # as changed.767 # as changed.
724 translation = self.factory.makeTranslationMessage(768 translation = self.factory.makeTranslationMessage(
725 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,769 pofile=self.devel_pofile, potmsgset=self.potmsgset,
726 translations=[u"Changed translation"], is_current_upstream=False)770 translations=[u"Changed translation"], is_current_upstream=False)
727 self.assertEquals(translation.is_current_upstream, False)771 self.assertEquals(translation.is_current_upstream, False)
728 self.assertEquals(translation.is_current_ubuntu, True)772 self.assertEquals(translation.is_current_ubuntu, True)
729 found_translations = list(773 found_translations = list(
730 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())774 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
731 self.assertEquals(found_translations, [self.potmsgset])775 self.assertEquals(found_translations, [self.potmsgset])
732776
733 def test_getPOTMsgSetWithErrors(self):777 def test_getPOTMsgSetWithErrors(self):
734 # Test listing of POTMsgSets with errors in translations.778 # Test listing of POTMsgSets with errors in translations.
735 translation = self.factory.makeSharedTranslationMessage(779 translation = self.factory.makeSharedTranslationMessage(
736 pofile=self.devel_sr_pofile, potmsgset=self.potmsgset,780 pofile=self.devel_pofile, potmsgset=self.potmsgset,
737 translations=[u"Imported translation"], is_current_upstream=True)781 translations=[u"Imported translation"], is_current_upstream=True)
738 removeSecurityProxy(translation).validation_status = (782 removeSecurityProxy(translation).validation_status = (
739 TranslationValidationStatus.UNKNOWNERROR)783 TranslationValidationStatus.UNKNOWNERROR)
740 found_translations = list(784 found_translations = list(
741 self.devel_sr_pofile.getPOTMsgSetWithErrors())785 self.devel_pofile.getPOTMsgSetWithErrors())
742 self.assertEquals(found_translations, [self.potmsgset])786 self.assertEquals(found_translations, [self.potmsgset])
743787
744 def test_updateStatistics(self):788 def test_updateStatistics(self):
@@ -757,72 +801,72 @@
757 # Second POTMsgSet is untranslated, but with a suggestion.801 # Second POTMsgSet is untranslated, but with a suggestion.
758 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)802 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)
759 potmsgset.setSequence(self.devel_potemplate, 2)803 potmsgset.setSequence(self.devel_potemplate, 2)
760 self.factory.makeTranslationMessage(804 self.factory.makeSuggestion(
761 pofile=self.devel_sr_pofile, potmsgset=potmsgset,805 pofile=self.devel_pofile, potmsgset=potmsgset,
762 translations=[u"Unreviewed suggestion"], suggestion=True)806 translations=[u"Unreviewed suggestion"])
763807
764 # Third POTMsgSet is translated, and with a suggestion.808 # Third POTMsgSet is translated, and with a suggestion.
765 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)809 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)
766 potmsgset.setSequence(self.devel_potemplate, 3)810 potmsgset.setSequence(self.devel_potemplate, 3)
767 self.factory.makeTranslationMessage(811 self.factory.makeTranslationMessage(
768 pofile=self.devel_sr_pofile, potmsgset=potmsgset,812 pofile=self.devel_pofile, potmsgset=potmsgset,
769 translations=[u"Translation"], suggestion=False,813 translations=[u"Translation"],
770 date_updated=datetime.now(pytz.UTC)-timedelta(1))814 date_updated=datetime.now(pytz.UTC)-timedelta(1))
771 self.factory.makeTranslationMessage(815 self.factory.makeSuggestion(
772 pofile=self.devel_sr_pofile, potmsgset=potmsgset,816 pofile=self.devel_pofile, potmsgset=potmsgset,
773 translations=[u"Another suggestion"], suggestion=True)817 translations=[u"Another suggestion"])
774818
775 # Fourth POTMsgSet is translated in import.819 # Fourth POTMsgSet is translated in import.
776 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)820 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)
777 potmsgset.setSequence(self.devel_potemplate, 4)821 potmsgset.setSequence(self.devel_potemplate, 4)
778 self.factory.makeTranslationMessage(822 self.factory.makeTranslationMessage(
779 pofile=self.devel_sr_pofile, potmsgset=potmsgset,823 pofile=self.devel_pofile, potmsgset=potmsgset,
780 translations=[u"Imported translation"], is_current_upstream=True)824 translations=[u"Imported translation"], is_current_upstream=True)
781825
782 # Fifth POTMsgSet is translated in import, but changed in Ubuntu.826 # Fifth POTMsgSet is translated in import, but changed in Ubuntu.
783 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)827 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)
784 potmsgset.setSequence(self.devel_potemplate, 5)828 potmsgset.setSequence(self.devel_potemplate, 5)
785 self.factory.makeTranslationMessage(829 self.factory.makeTranslationMessage(
786 pofile=self.devel_sr_pofile, potmsgset=potmsgset,830 pofile=self.devel_pofile, potmsgset=potmsgset,
787 translations=[u"Imported translation"], is_current_upstream=True)831 translations=[u"Imported translation"], is_current_upstream=True)
788 translation = self.factory.makeTranslationMessage(832 translation = self.factory.makeTranslationMessage(
789 pofile=self.devel_sr_pofile, potmsgset=potmsgset,833 pofile=self.devel_pofile, potmsgset=potmsgset,
790 translations=[u"LP translation"], is_current_upstream=False)834 translations=[u"LP translation"], is_current_upstream=False)
791835
792 # Sixth POTMsgSet is translated in LP only.836 # Sixth POTMsgSet is translated in LP only.
793 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)837 potmsgset = self.factory.makePOTMsgSet(self.devel_potemplate)
794 potmsgset.setSequence(self.devel_potemplate, 6)838 potmsgset.setSequence(self.devel_potemplate, 6)
795 self.factory.makeTranslationMessage(839 self.factory.makeTranslationMessage(
796 pofile=self.devel_sr_pofile, potmsgset=potmsgset,840 pofile=self.devel_pofile, potmsgset=potmsgset,
797 translations=[u"New translation"], is_current_upstream=False)841 translations=[u"New translation"], is_current_upstream=False)
798842
799 removeSecurityProxy(self.devel_potemplate).messagecount = (843 removeSecurityProxy(self.devel_potemplate).messagecount = (
800 self.devel_potemplate.getPOTMsgSetsCount())844 self.devel_potemplate.getPOTMsgSetsCount())
801845
802 # Returns current, updates, rosetta, unreviewed counts.846 # Returns current, updates, rosetta, unreviewed counts.
803 stats = self.devel_sr_pofile.updateStatistics()847 stats = self.devel_pofile.updateStatistics()
804 self.assertEquals(stats, (1, 1, 3, 2))848 self.assertEquals((1, 1, 3, 2), stats)
805849
806 self.assertEquals(self.devel_sr_pofile.messageCount(), 6)850 self.assertEquals(6, self.devel_pofile.messageCount())
807 self.assertEquals(self.devel_sr_pofile.translatedCount(), 4)851 self.assertEquals(4, self.devel_pofile.translatedCount())
808 self.assertEquals(self.devel_sr_pofile.untranslatedCount(), 2)852 self.assertEquals(2, self.devel_pofile.untranslatedCount())
809 self.assertEquals(self.devel_sr_pofile.currentCount(), 1)853 self.assertEquals(1, self.devel_pofile.currentCount())
810 self.assertEquals(self.devel_sr_pofile.rosettaCount(), 3)854 self.assertEquals(3, self.devel_pofile.rosettaCount())
811 self.assertEquals(self.devel_sr_pofile.updatesCount(), 1)855 self.assertEquals(1, self.devel_pofile.updatesCount())
812 self.assertEquals(self.devel_sr_pofile.unreviewedCount(), 2)856 self.assertEquals(2, self.devel_pofile.unreviewedCount())
813857
814 def test_TranslationFileData_adapter(self):858 def test_TranslationFileData_adapter(self):
815 # Test that exporting works correctly with shared and diverged859 # Test that exporting works correctly with shared and diverged
816 # messages.860 # messages.
817 self.factory.makeSharedTranslationMessage(861 self.factory.makeSharedTranslationMessage(
818 pofile=self.devel_sr_pofile,862 pofile=self.devel_pofile,
819 potmsgset=self.potmsgset,863 potmsgset=self.potmsgset,
820 translations=["Shared translation"])864 translations=["Shared translation"])
821865
822 # Get the adapter and extract only English singular and866 # Get the adapter and extract only English singular and
823 # first translation form from all messages.867 # first translation form from all messages.
824 translation_file_data = getAdapter(868 translation_file_data = getAdapter(
825 self.devel_sr_pofile, ITranslationFileData, 'all_messages')869 self.devel_pofile, ITranslationFileData, 'all_messages')
826 exported_messages = [870 exported_messages = [
827 (msg.singular_text, msg.translations[0])871 (msg.singular_text, msg.translations[0])
828 for msg in translation_file_data.messages]872 for msg in translation_file_data.messages]
@@ -832,7 +876,7 @@
832876
833 # When we add a diverged translation, only that is exported.877 # When we add a diverged translation, only that is exported.
834 self.factory.makeTranslationMessage(878 self.factory.makeTranslationMessage(
835 pofile=self.devel_sr_pofile,879 pofile=self.devel_pofile,
836 potmsgset=self.potmsgset,880 potmsgset=self.potmsgset,
837 translations=["Diverged translation"],881 translations=["Diverged translation"],
838 force_diverged=True)882 force_diverged=True)
@@ -840,7 +884,7 @@
840 # Get the adapter and extract only English singular and884 # Get the adapter and extract only English singular and
841 # first translation form from all messages.885 # first translation form from all messages.
842 translation_file_data = getAdapter(886 translation_file_data = getAdapter(
843 self.devel_sr_pofile, ITranslationFileData, 'all_messages')887 self.devel_pofile, ITranslationFileData, 'all_messages')
844 exported_messages = [888 exported_messages = [
845 (msg.singular_text, msg.translations[0])889 (msg.singular_text, msg.translations[0])
846 for msg in translation_file_data.messages]890 for msg in translation_file_data.messages]
@@ -1003,9 +1047,9 @@
1003 name="messages")1047 name="messages")
10041048
1005 # We'll use two PO files, one for each series.1049 # We'll use two PO files, one for each series.
1006 self.devel_sr_pofile = self.factory.makePOFile(1050 self.devel_pofile = self.factory.makePOFile(
1007 'sr', self.devel_potemplate)1051 'sr', self.devel_potemplate)
1008 self.stable_sr_pofile = self.factory.makePOFile(1052 self.stable_pofile = self.factory.makePOFile(
1009 'sr', self.stable_potemplate)1053 'sr', self.stable_potemplate)
10101054
1011 # Create two POTMsgSets that can be used to test in what order1055 # Create two POTMsgSets that can be used to test in what order
@@ -1016,19 +1060,19 @@
1016 self.potmsgset2.setSequence(self.devel_potemplate, 2)1060 self.potmsgset2.setSequence(self.devel_potemplate, 2)
10171061
1018 def test_getPOTMsgSetTranslated_ordering(self):1062 def test_getPOTMsgSetTranslated_ordering(self):
1019 # Translate both POTMsgSets in devel_sr_pofile, so1063 # Translate both POTMsgSets in devel_pofile, so
1020 # they are returned with getPOTMsgSetTranslated() call.1064 # they are returned with getPOTMsgSetTranslated() call.
1021 self.factory.makeSharedTranslationMessage(1065 self.factory.makeSharedTranslationMessage(
1022 pofile=self.devel_sr_pofile,1066 pofile=self.devel_pofile,
1023 potmsgset=self.potmsgset1,1067 potmsgset=self.potmsgset1,
1024 translations=["Shared translation"])1068 translations=["Shared translation"])
1025 self.factory.makeSharedTranslationMessage(1069 self.factory.makeSharedTranslationMessage(
1026 pofile=self.devel_sr_pofile,1070 pofile=self.devel_pofile,
1027 potmsgset=self.potmsgset2,1071 potmsgset=self.potmsgset2,
1028 translations=["Another shared translation"])1072 translations=["Another shared translation"])
10291073
1030 translated_potmsgsets = list(1074 translated_potmsgsets = list(
1031 self.devel_sr_pofile.getPOTMsgSetTranslated())1075 self.devel_pofile.getPOTMsgSetTranslated())
1032 self.assertEquals(1076 self.assertEquals(
1033 [self.potmsgset1, self.potmsgset2], translated_potmsgsets)1077 [self.potmsgset1, self.potmsgset2], translated_potmsgsets)
10341078
@@ -1039,20 +1083,20 @@
10391083
1040 # And they are returned in the new order as desired.1084 # And they are returned in the new order as desired.
1041 translated_potmsgsets = list(1085 translated_potmsgsets = list(
1042 self.stable_sr_pofile.getPOTMsgSetTranslated())1086 self.stable_pofile.getPOTMsgSetTranslated())
1043 self.assertEquals(1087 self.assertEquals(
1044 [self.potmsgset2, self.potmsgset1], translated_potmsgsets)1088 [self.potmsgset2, self.potmsgset1], translated_potmsgsets)
10451089
1046 # Order is unchanged for the previous template.1090 # Order is unchanged for the previous template.
1047 translated_potmsgsets = list(1091 translated_potmsgsets = list(
1048 self.devel_sr_pofile.getPOTMsgSetTranslated())1092 self.devel_pofile.getPOTMsgSetTranslated())
1049 self.assertEquals(1093 self.assertEquals(
1050 [self.potmsgset1, self.potmsgset2], translated_potmsgsets)1094 [self.potmsgset1, self.potmsgset2], translated_potmsgsets)
10511095
1052 def test_getPOTMsgSetUntranslated_ordering(self):1096 def test_getPOTMsgSetUntranslated_ordering(self):
1053 # Both POTMsgSets in devel_sr_pofile are untranslated.1097 # Both POTMsgSets in devel_pofile are untranslated.
1054 untranslated_potmsgsets = list(1098 untranslated_potmsgsets = list(
1055 self.devel_sr_pofile.getPOTMsgSetUntranslated())1099 self.devel_pofile.getPOTMsgSetUntranslated())
1056 self.assertEquals(1100 self.assertEquals(
1057 [self.potmsgset1, self.potmsgset2], untranslated_potmsgsets)1101 [self.potmsgset1, self.potmsgset2], untranslated_potmsgsets)
10581102
@@ -1063,42 +1107,42 @@
10631107
1064 # And they are returned in the new order as desired.1108 # And they are returned in the new order as desired.
1065 untranslated_potmsgsets = list(1109 untranslated_potmsgsets = list(
1066 self.stable_sr_pofile.getPOTMsgSetUntranslated())1110 self.stable_pofile.getPOTMsgSetUntranslated())
1067 self.assertEquals(1111 self.assertEquals(
1068 [self.potmsgset2, self.potmsgset1], untranslated_potmsgsets)1112 [self.potmsgset2, self.potmsgset1], untranslated_potmsgsets)
10691113
1070 # Order is unchanged for the previous template.1114 # Order is unchanged for the previous template.
1071 untranslated_potmsgsets = list(1115 untranslated_potmsgsets = list(
1072 self.devel_sr_pofile.getPOTMsgSetUntranslated())1116 self.devel_pofile.getPOTMsgSetUntranslated())
1073 self.assertEquals(1117 self.assertEquals(
1074 [self.potmsgset1, self.potmsgset2], untranslated_potmsgsets)1118 [self.potmsgset1, self.potmsgset2], untranslated_potmsgsets)
10751119
1076 def test_getPOTMsgSetChangedInUbuntu_ordering(self):1120 def test_getPOTMsgSetChangedInUbuntu_ordering(self):
1077 # Suggest a translation on both POTMsgSets in devel_sr_pofile,1121 # Suggest a translation on both POTMsgSets in devel_pofile,
1078 # so they are returned with getPOTMsgSetWithNewSuggestions() call.1122 # so they are returned with getPOTMsgSetWithNewSuggestions() call.
1079 self.factory.makeSharedTranslationMessage(1123 self.factory.makeSharedTranslationMessage(
1080 pofile=self.devel_sr_pofile,1124 pofile=self.devel_pofile,
1081 potmsgset=self.potmsgset1,1125 potmsgset=self.potmsgset1,
1082 translations=["Imported"],1126 translations=["Imported"],
1083 is_current_upstream=True)1127 is_current_upstream=True)
1084 self.factory.makeSharedTranslationMessage(1128 self.factory.makeSharedTranslationMessage(
1085 pofile=self.devel_sr_pofile,1129 pofile=self.devel_pofile,
1086 potmsgset=self.potmsgset1,1130 potmsgset=self.potmsgset1,
1087 translations=["Changed"],1131 translations=["Changed"],
1088 is_current_upstream=False)1132 is_current_upstream=False)
1089 self.factory.makeSharedTranslationMessage(1133 self.factory.makeSharedTranslationMessage(
1090 pofile=self.devel_sr_pofile,1134 pofile=self.devel_pofile,
1091 potmsgset=self.potmsgset2,1135 potmsgset=self.potmsgset2,
1092 translations=["Another imported"],1136 translations=["Another imported"],
1093 is_current_upstream=True)1137 is_current_upstream=True)
1094 self.factory.makeSharedTranslationMessage(1138 self.factory.makeSharedTranslationMessage(
1095 pofile=self.devel_sr_pofile,1139 pofile=self.devel_pofile,
1096 potmsgset=self.potmsgset2,1140 potmsgset=self.potmsgset2,
1097 translations=["Another changed"],1141 translations=["Another changed"],
1098 is_current_upstream=False)1142 is_current_upstream=False)
10991143
1100 potmsgsets = list(1144 potmsgsets = list(
1101 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())1145 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
1102 self.assertEquals(1146 self.assertEquals(
1103 [self.potmsgset1, self.potmsgset2], potmsgsets)1147 [self.potmsgset1, self.potmsgset2], potmsgsets)
11041148
@@ -1109,28 +1153,28 @@
11091153
1110 # And they are returned in the new order as desired.1154 # And they are returned in the new order as desired.
1111 potmsgsets = list(1155 potmsgsets = list(
1112 self.stable_sr_pofile.getPOTMsgSetChangedInUbuntu())1156 self.stable_pofile.getPOTMsgSetChangedInUbuntu())
1113 self.assertEquals(1157 self.assertEquals(
1114 [self.potmsgset2, self.potmsgset1], potmsgsets)1158 [self.potmsgset2, self.potmsgset1], potmsgsets)
11151159
1116 # Order is unchanged for the previous template.1160 # Order is unchanged for the previous template.
1117 potmsgsets = list(1161 potmsgsets = list(
1118 self.devel_sr_pofile.getPOTMsgSetChangedInUbuntu())1162 self.devel_pofile.getPOTMsgSetChangedInUbuntu())
1119 self.assertEquals(1163 self.assertEquals(
1120 [self.potmsgset1, self.potmsgset2], potmsgsets)1164 [self.potmsgset1, self.potmsgset2], potmsgsets)
11211165
1122 def test_getPOTMsgSetWithErrors_ordering(self):1166 def test_getPOTMsgSetWithErrors_ordering(self):
1123 # Suggest a translation on both POTMsgSets in devel_sr_pofile,1167 # Suggest a translation on both POTMsgSets in devel_pofile,
1124 # so they are returned with getPOTMsgSetWithNewSuggestions() call.1168 # so they are returned with getPOTMsgSetWithNewSuggestions() call.
1125 imported1 = self.factory.makeSharedTranslationMessage(1169 imported1 = self.factory.makeSharedTranslationMessage(
1126 pofile=self.devel_sr_pofile,1170 pofile=self.devel_pofile,
1127 potmsgset=self.potmsgset1,1171 potmsgset=self.potmsgset1,
1128 translations=["Imported"],1172 translations=["Imported"],
1129 is_current_upstream=True)1173 is_current_upstream=True)
1130 removeSecurityProxy(imported1).validation_status = (1174 removeSecurityProxy(imported1).validation_status = (
1131 TranslationValidationStatus.UNKNOWNERROR)1175 TranslationValidationStatus.UNKNOWNERROR)
1132 imported2 = self.factory.makeSharedTranslationMessage(1176 imported2 = self.factory.makeSharedTranslationMessage(
1133 pofile=self.devel_sr_pofile,1177 pofile=self.devel_pofile,
1134 potmsgset=self.potmsgset2,1178 potmsgset=self.potmsgset2,
1135 translations=["Another imported"],1179 translations=["Another imported"],
1136 is_current_upstream=True)1180 is_current_upstream=True)
@@ -1138,7 +1182,7 @@
1138 TranslationValidationStatus.UNKNOWNERROR)1182 TranslationValidationStatus.UNKNOWNERROR)
11391183
1140 potmsgsets = list(1184 potmsgsets = list(
1141 self.devel_sr_pofile.getPOTMsgSetWithErrors())1185 self.devel_pofile.getPOTMsgSetWithErrors())
1142 self.assertEquals(1186 self.assertEquals(
1143 [self.potmsgset1, self.potmsgset2], potmsgsets)1187 [self.potmsgset1, self.potmsgset2], potmsgsets)
11441188
@@ -1149,13 +1193,13 @@
11491193
1150 # And they are returned in the new order as desired.1194 # And they are returned in the new order as desired.
1151 potmsgsets = list(1195 potmsgsets = list(
1152 self.stable_sr_pofile.getPOTMsgSetWithErrors())1196 self.stable_pofile.getPOTMsgSetWithErrors())
1153 self.assertEquals(1197 self.assertEquals(
1154 [self.potmsgset2, self.potmsgset1], potmsgsets)1198 [self.potmsgset2, self.potmsgset1], potmsgsets)
11551199
1156 # Order is unchanged for the previous template.1200 # Order is unchanged for the previous template.
1157 potmsgsets = list(1201 potmsgsets = list(
1158 self.devel_sr_pofile.getPOTMsgSetWithErrors())1202 self.devel_pofile.getPOTMsgSetWithErrors())
1159 self.assertEquals(1203 self.assertEquals(
1160 [self.potmsgset1, self.potmsgset2], potmsgsets)1204 [self.potmsgset1, self.potmsgset2], potmsgsets)
11611205
@@ -1190,11 +1234,11 @@
11901234
1191 # Give the method something to search for.1235 # Give the method something to search for.
1192 self.factory.makeSharedTranslationMessage(1236 self.factory.makeSharedTranslationMessage(
1193 pofile=self.devel_sr_pofile,1237 pofile=self.devel_pofile,
1194 potmsgset=self.potmsgset1,1238 potmsgset=self.potmsgset1,
1195 translations=["Shared translation"])1239 translations=["Shared translation"])
1196 self.factory.makeSharedTranslationMessage(1240 self.factory.makeSharedTranslationMessage(
1197 pofile=self.devel_sr_pofile,1241 pofile=self.devel_pofile,
1198 potmsgset=self.potmsgset2,1242 potmsgset=self.potmsgset2,
1199 translations=["Another shared translation"])1243 translations=["Another shared translation"])
12001244
@@ -1203,7 +1247,7 @@
1203 removeSecurityProxy(self.potmsgset2).sequence = 11247 removeSecurityProxy(self.potmsgset2).sequence = 1
12041248
1205 potmsgsets = list(1249 potmsgsets = list(
1206 self.devel_sr_pofile.findPOTMsgSetsContaining("translation"))1250 self.devel_pofile.findPOTMsgSetsContaining("translation"))
12071251
1208 # Order ignores potmsgset.sequence.1252 # Order ignores potmsgset.sequence.
1209 self.assertEquals(1253 self.assertEquals(
@@ -1627,11 +1671,10 @@
1627 # Adding a suggestion (i.e. unused translation)1671 # Adding a suggestion (i.e. unused translation)
1628 # will not change the current count when there's1672 # will not change the current count when there's
1629 # already an imported message.1673 # already an imported message.
1630 self.factory.makeTranslationMessage(1674 self.factory.makeSuggestion(
1631 pofile=self.pofile,1675 pofile=self.pofile,
1632 potmsgset=self.potmsgset,1676 potmsgset=self.potmsgset,
1633 translations=["A suggestion"],1677 translations=["A suggestion"])
1634 suggestion=True)
1635 self.pofile.updateStatistics()1678 self.pofile.updateStatistics()
1636 self.assertEquals(self.pofile.currentCount(), 1)1679 self.assertEquals(self.pofile.currentCount(), 1)
16371680
16381681
=== modified file 'lib/lp/translations/tests/test_potmsgset.py'
--- lib/lp/translations/tests/test_potmsgset.py 2010-08-13 05:02:57 +0000
+++ lib/lp/translations/tests/test_potmsgset.py 2010-08-17 09:48:55 +0000
@@ -273,56 +273,54 @@
273 serbian = sr_pofile.language273 serbian = sr_pofile.language
274274
275 # When there are no suggestions, empty list is returned.275 # When there are no suggestions, empty list is returned.
276 self.assertEquals(276 self.assertContentEqual(
277 set(self.potmsgset.getLocalTranslationMessages(277 [],
278 self.devel_potemplate, serbian)),278 self.potmsgset.getLocalTranslationMessages(
279 set([]))279 self.devel_potemplate, serbian))
280280
281 # A shared suggestion is shown in both templates.281 # A shared suggestion is shown in both templates.
282 shared_suggestion = self.factory.makeSharedTranslationMessage(282 shared_suggestion = self.factory.makeSuggestion(
283 pofile=sr_pofile, potmsgset=self.potmsgset, suggestion=True)283 pofile=sr_pofile, potmsgset=self.potmsgset)
284 self.assertEquals(284 self.assertContentEqual(
285 set(self.potmsgset.getLocalTranslationMessages(285 [shared_suggestion],
286 self.devel_potemplate, serbian)),286 self.potmsgset.getLocalTranslationMessages(
287 set([shared_suggestion]))287 self.devel_potemplate, serbian))
288 self.assertEquals(288 self.assertContentEqual(
289 set(self.potmsgset.getLocalTranslationMessages(289 [shared_suggestion],
290 self.stable_potemplate, serbian)),290 self.potmsgset.getLocalTranslationMessages(
291 set([shared_suggestion]))291 self.stable_potemplate, serbian))
292292
293 # A suggestion on another PO file is still shown in both templates.293 # A suggestion on another PO file is still shown in both templates.
294 another_suggestion = self.factory.makeSharedTranslationMessage(294 another_suggestion = self.factory.makeSuggestion(
295 pofile=sr_stable_pofile, potmsgset=self.potmsgset,295 pofile=sr_stable_pofile, potmsgset=self.potmsgset)
296 suggestion=True)296 self.assertContentEqual(
297 self.assertEquals(297 [shared_suggestion, another_suggestion],
298 set(self.potmsgset.getLocalTranslationMessages(298 self.potmsgset.getLocalTranslationMessages(
299 self.devel_potemplate, serbian)),299 self.devel_potemplate, serbian))
300 set([shared_suggestion, another_suggestion]))300 self.assertContentEqual(
301 self.assertEquals(301 [shared_suggestion, another_suggestion],
302 set(self.potmsgset.getLocalTranslationMessages(302 self.potmsgset.getLocalTranslationMessages(
303 self.stable_potemplate, serbian)),303 self.stable_potemplate, serbian))
304 set([shared_suggestion, another_suggestion]))
305304
306 # Setting one of the suggestions as current will leave305 # Setting one of the suggestions as current will leave
307 # them both 'reviewed' and thus hidden.306 # them both 'reviewed' and thus hidden.
308 current_translation = self.factory.makeSharedTranslationMessage(307 current_translation = self.factory.makeSharedTranslationMessage(
309 pofile=sr_pofile, potmsgset=self.potmsgset, suggestion=False)308 pofile=sr_pofile, potmsgset=self.potmsgset)
310 self.assertEquals(309 self.assertContentEqual(
311 set(self.potmsgset.getLocalTranslationMessages(310 [],
312 self.devel_potemplate, serbian)),311 self.potmsgset.getLocalTranslationMessages(
313 set([]))312 self.devel_potemplate, serbian))
314313
315 def test_getLocalTranslationMessages_empty_message(self):314 def test_getLocalTranslationMessages_empty_message(self):
316 # An empty suggestion is never returned.315 # An empty suggestion is never returned.
317 self.potmsgset.setSequence(self.stable_potemplate, 1)316 self.potmsgset.setSequence(self.stable_potemplate, 1)
318 pofile = self.factory.makePOFile('sr', self.stable_potemplate)317 pofile = self.factory.makePOFile('sr', self.stable_potemplate)
319 empty_suggestion = self.factory.makeSharedTranslationMessage(318 empty_suggestion = self.factory.makeSuggestion(
320 pofile=pofile, potmsgset=self.potmsgset, suggestion=True,319 pofile=pofile, potmsgset=self.potmsgset, translations=[None])
321 translations=[""])320 self.assertContentEqual(
322 self.assertEquals(321 [],
323 set([]),322 self.potmsgset.getLocalTranslationMessages(
324 set(self.potmsgset.getLocalTranslationMessages(323 self.stable_potemplate, pofile.language))
325 self.stable_potemplate, pofile.language)))
326324
327 def test_getExternallyUsedTranslationMessages(self):325 def test_getExternallyUsedTranslationMessages(self):
328 """Test retrieval of externally used translations."""326 """Test retrieval of externally used translations."""
@@ -349,9 +347,8 @@
349347
350 # If there are only suggestions on the external POTMsgSet,348 # If there are only suggestions on the external POTMsgSet,
351 # no externally used suggestions are returned.349 # no externally used suggestions are returned.
352 external_suggestion = self.factory.makeSharedTranslationMessage(350 external_suggestion = self.factory.makeSuggestion(
353 pofile=external_pofile, potmsgset=external_potmsgset,351 pofile=external_pofile, potmsgset=external_potmsgset)
354 suggestion=True)
355352
356 transaction.commit()353 transaction.commit()
357354
@@ -363,7 +360,7 @@
363 # it is returned as the externally used suggestion.360 # it is returned as the externally used suggestion.
364 imported_translation = self.factory.makeSharedTranslationMessage(361 imported_translation = self.factory.makeSharedTranslationMessage(
365 pofile=external_pofile, potmsgset=external_potmsgset,362 pofile=external_pofile, potmsgset=external_potmsgset,
366 suggestion=False, is_current_upstream=True)363 is_current_upstream=True)
367 imported_translation.makeCurrentUbuntu(False)364 imported_translation.makeCurrentUbuntu(False)
368365
369 transaction.commit()366 transaction.commit()
@@ -376,7 +373,7 @@
376 # it is returned as the externally used suggestion as well.373 # it is returned as the externally used suggestion as well.
377 current_translation = self.factory.makeSharedTranslationMessage(374 current_translation = self.factory.makeSharedTranslationMessage(
378 pofile=external_pofile, potmsgset=external_potmsgset,375 pofile=external_pofile, potmsgset=external_potmsgset,
379 suggestion=False, is_current_upstream=False)376 is_current_upstream=False)
380377
381 transaction.commit()378 transaction.commit()
382379
@@ -409,9 +406,8 @@
409406
410 # If there is a suggestion on the external POTMsgSet,407 # If there is a suggestion on the external POTMsgSet,
411 # it is returned.408 # it is returned.
412 external_suggestion = self.factory.makeSharedTranslationMessage(409 external_suggestion = self.factory.makeSuggestion(
413 pofile=external_pofile, potmsgset=external_potmsgset,410 pofile=external_pofile, potmsgset=external_potmsgset)
414 suggestion=True)
415411
416 transaction.commit()412 transaction.commit()
417413
@@ -423,7 +419,7 @@
423 # POTMsgSet, it is not returned as the external suggestion.419 # POTMsgSet, it is not returned as the external suggestion.
424 imported_translation = self.factory.makeSharedTranslationMessage(420 imported_translation = self.factory.makeSharedTranslationMessage(
425 pofile=external_pofile, potmsgset=external_potmsgset,421 pofile=external_pofile, potmsgset=external_potmsgset,
426 suggestion=False, is_current_upstream=True)422 is_current_upstream=True)
427 imported_translation.makeCurrentUbuntu(False)423 imported_translation.makeCurrentUbuntu(False)
428424
429 transaction.commit()425 transaction.commit()
@@ -436,7 +432,7 @@
436 # considered an external suggestion.432 # considered an external suggestion.
437 current_translation = self.factory.makeSharedTranslationMessage(433 current_translation = self.factory.makeSharedTranslationMessage(
438 pofile=external_pofile, potmsgset=external_potmsgset,434 pofile=external_pofile, potmsgset=external_potmsgset,
439 suggestion=False, is_current_upstream=False)435 is_current_upstream=False)
440436
441 transaction.commit()437 transaction.commit()
442438
@@ -769,13 +765,12 @@
769 removeSecurityProxy(self.pofile), self.potmsgset,765 removeSecurityProxy(self.pofile), self.potmsgset,
770 translations=[u'trans1'], reviewer=self.factory.makePerson(),766 translations=[u'trans1'], reviewer=self.factory.makePerson(),
771 is_current_upstream=True, date_updated=self.now())767 is_current_upstream=True, date_updated=self.now())
772 self.suggestion1 = self.factory.makeTranslationMessage(768 self.suggestion1 = self.factory.makeSuggestion(
773 self.pofile, self.potmsgset, suggestion=True,769 self.pofile, self.potmsgset, translations=[u'sugg1'],
774 translations=[u'sugg1'], reviewer=self.factory.makePerson(),770 date_created=self.now())
775 date_updated=self.now())771 self.suggestion2 = self.factory.makeSuggestion(
776 self.suggestion2 = self.factory.makeTranslationMessage(772 self.pofile, self.potmsgset, translations=[u'sugg2'],
777 self.pofile, self.potmsgset, suggestion=True,773 date_created=self.now())
778 translations=[u'sugg2'], date_updated=self.now())
779 self._setDateCreated(self.suggestion2)774 self._setDateCreated(self.suggestion2)
780775
781 def test_dismiss_all(self):776 def test_dismiss_all(self):
782777
=== modified file 'lib/lp/translations/tests/test_translatablemessage.py'
--- lib/lp/translations/tests/test_translatablemessage.py 2010-03-24 13:56:15 +0000
+++ lib/lp/translations/tests/test_translatablemessage.py 2010-08-17 09:48:55 +0000
@@ -44,13 +44,17 @@
44 is_current_ubuntu or is_current_upstream or is_diverged)44 is_current_ubuntu or is_current_upstream or is_diverged)
45 if translation is not None:45 if translation is not None:
46 translation = [translation]46 translation = [translation]
47 return self.factory.makeTranslationMessage(47 if is_suggestion:
48 pofile=self.pofile, potmsgset=self.potmsgset,48 return self.factory.makeSuggestion(
49 translations=translation,49 pofile=self.pofile, potmsgset=self.potmsgset,
50 suggestion=is_suggestion,50 translations=translation, date_created=date_updated)
51 is_current_upstream=is_current_upstream,51 else:
52 force_diverged=is_diverged,52 return self.factory.makeTranslationMessage(
53 date_updated=date_updated)53 pofile=self.pofile, potmsgset=self.potmsgset,
54 translations=translation,
55 is_current_upstream=is_current_upstream,
56 force_diverged=is_diverged,
57 date_updated=date_updated)
5458
5559
56class TestTranslatableMessage(TestTranslatableMessageBase):60class TestTranslatableMessage(TestTranslatableMessageBase):
@@ -172,24 +176,24 @@
172 super(TestTranslatableMessageSuggestions, self).setUp()176 super(TestTranslatableMessageSuggestions, self).setUp()
173 self.now = self.gen_now().next177 self.now = self.gen_now().next
174 self.suggestion1 = self._createTranslation(date_updated=self.now())178 self.suggestion1 = self._createTranslation(date_updated=self.now())
175 self.current = self._createTranslation(is_current_ubuntu=True,179 self.current = self._createTranslation(
176 date_updated=self.now())180 is_current_ubuntu=True, date_updated=self.now())
177 self.suggestion2 = self._createTranslation(date_updated=self.now())181 self.suggestion2 = self._createTranslation(date_updated=self.now())
178 self.message = TranslatableMessage(self.potmsgset, self.pofile)182 self.message = TranslatableMessage(self.potmsgset, self.pofile)
179183
180 def test_getAllSuggestions(self):184 def test_getAllSuggestions(self):
181 # There are three different methods to return 185 # There are three different methods to return.
182 suggestions = self.message.getAllSuggestions()186 suggestions = self.message.getAllSuggestions()
183 self.assertContentEqual([self.suggestion1, self.suggestion2],187 self.assertContentEqual([self.suggestion1, self.suggestion2],
184 suggestions)188 suggestions)
185189
186 def test_getDismissedSuggestions(self):190 def test_getDismissedSuggestions(self):
187 # There are three different methods to return 191 # There are three different methods to return.
188 suggestions = self.message.getDismissedSuggestions()192 suggestions = self.message.getDismissedSuggestions()
189 self.assertContentEqual([self.suggestion1], suggestions)193 self.assertContentEqual([self.suggestion1], suggestions)
190194
191 def test_getUnreviewedSuggestions(self):195 def test_getUnreviewedSuggestions(self):
192 # There are three different methods to return 196 # There are three different methods to return.
193 suggestions = self.message.getUnreviewedSuggestions()197 suggestions = self.message.getUnreviewedSuggestions()
194 self.assertContentEqual([self.suggestion2], suggestions)198 self.assertContentEqual([self.suggestion2], suggestions)
195199
196200
=== modified file 'lib/lp/translations/tests/test_translations_to_review.py'
--- lib/lp/translations/tests/test_translations_to_review.py 2010-05-07 12:29:23 +0000
+++ lib/lp/translations/tests/test_translations_to_review.py 2010-08-17 09:48:55 +0000
@@ -26,6 +26,7 @@
2626
27class ReviewTestMixin:27class ReviewTestMixin:
28 """Base for testing which translations a reviewer can review."""28 """Base for testing which translations a reviewer can review."""
29
29 def setUpMixin(self, for_product=True):30 def setUpMixin(self, for_product=True):
30 """Set up test environment.31 """Set up test environment.
3132
@@ -82,10 +83,10 @@
8283
83 later_time = self.base_time + timedelta(0, 3600)84 later_time = self.base_time + timedelta(0, 3600)
84 self.suggestion = removeSecurityProxy(85 self.suggestion = removeSecurityProxy(
85 self.factory.makeTranslationMessage(86 self.factory.makeSuggestion(
86 potmsgset=self.potmsgset, pofile=self.pofile,87 potmsgset=self.potmsgset, pofile=self.pofile,
87 translator=self.factory.makePerson(), translations=['wi'],88 translator=self.factory.makePerson(), translations=['wi'],
88 date_updated=later_time, suggestion=True))89 date_created=later_time))
8990
90 self.assertTrue(self.translation.is_current_ubuntu)91 self.assertTrue(self.translation.is_current_ubuntu)
91 self.pofile.updateStatistics()92 self.pofile.updateStatistics()
@@ -109,6 +110,7 @@
109110
110 Can be applied to product or distribution setups.111 Can be applied to product or distribution setups.
111 """112 """
113
112 def test_OneFileToReview(self):114 def test_OneFileToReview(self):
113 # In the base case, the method finds one POFile for self.person115 # In the base case, the method finds one POFile for self.person
114 # to review.116 # to review.
115117
=== modified file 'lib/lp/translations/utilities/sanitize.py'
--- lib/lp/translations/utilities/sanitize.py 2010-03-26 20:14:32 +0000
+++ lib/lp/translations/utilities/sanitize.py 2010-08-17 09:48:55 +0000
@@ -51,8 +51,7 @@
51 """Find out which newline style is used in text."""51 """Find out which newline style is used in text."""
52 error_message = (52 error_message = (
53 "%s text (%r) mixes different newline markers." % (53 "%s text (%r) mixes different newline markers." % (
54 text_name, text)54 text_name, text))
55 )
56 style = None55 style = None
57 # To avoid confusing the single-character newline styles for mac and56 # To avoid confusing the single-character newline styles for mac and
58 # unix with the two-character windows one, remove the windows-style57 # unix with the two-character windows one, remove the windows-style
@@ -169,6 +168,9 @@
169 :param pluralforms: The number of expected pluralforms168 :param pluralforms: The number of expected pluralforms
170 """169 """
171 # Sanitize all given translations.170 # Sanitize all given translations.
171 # Make sure the translations are stored in a dict.
172 if isinstance(translations, (list, tuple)):
173 translations = dict(enumerate(translations))
172 # Unneeded plural forms are stored as well (needed since we may174 # Unneeded plural forms are stored as well (needed since we may
173 # have incorrect plural form data, so we can just reactivate them175 # have incorrect plural form data, so we can just reactivate them
174 # once we fix the plural information for the language)176 # once we fix the plural information for the language)
@@ -188,4 +190,3 @@
188# There will be a different function for translation coming from imports but190# There will be a different function for translation coming from imports but
189# for now it is identical to the one used in browser code.191# for now it is identical to the one used in browser code.
190sanitize_translations_from_import = sanitize_translations_from_webui192sanitize_translations_from_import = sanitize_translations_from_webui
191
192193
=== modified file 'lib/lp/translations/utilities/tests/test_sanitize.py'
--- lib/lp/translations/utilities/tests/test_sanitize.py 2010-03-26 19:37:58 +0000
+++ lib/lp/translations/utilities/tests/test_sanitize.py 2010-08-17 09:48:55 +0000
@@ -203,8 +203,23 @@
203 }203 }
204 self.assertEqual(204 self.assertEqual(
205 expected_sanitized,205 expected_sanitized,
206 sanitize_translations_from_webui(self.english, translations, 3)206 sanitize_translations_from_webui(self.english, translations, 3))
207 )207
208 def test_sanitize_translations_not_in_dict(self):
209 # A list is converted to a dictionary.
210 translations = [
211 u'Pluralform 0',
212 u'Pluralform 1',
213 u'Pluralform 2',
214 ]
215 expected_sanitized = {
216 0: u'Pluralform 0',
217 1: u'Pluralform 1',
218 2: u'Pluralform 2',
219 }
220 self.assertEqual(
221 expected_sanitized,
222 sanitize_translations_from_webui(self.english, translations, 3))
208223
209 def test_sanitize_translations_missing_pluralform(self):224 def test_sanitize_translations_missing_pluralform(self):
210 # Missing plural forms are normalized to None.225 # Missing plural forms are normalized to None.
@@ -219,8 +234,7 @@
219 }234 }
220 self.assertEqual(235 self.assertEqual(
221 expected_sanitized,236 expected_sanitized,
222 sanitize_translations_from_webui(self.english, translations, 3)237 sanitize_translations_from_webui(self.english, translations, 3))
223 )
224238
225 def test_sanitize_translations_excess_pluralform(self):239 def test_sanitize_translations_excess_pluralform(self):
226 # Excess plural forms are sanitized, too.240 # Excess plural forms are sanitized, too.
@@ -238,8 +252,7 @@
238 }252 }
239 self.assertEqual(253 self.assertEqual(
240 expected_sanitized,254 expected_sanitized,
241 sanitize_translations_from_webui(self.english, translations, 3)255 sanitize_translations_from_webui(self.english, translations, 3))
242 )
243256
244257
245def test_suite():258def test_suite():
246259
=== modified file 'lib/lp/translations/utilities/tests/test_superfastimports.py'
--- lib/lp/translations/utilities/tests/test_superfastimports.py 2010-03-23 21:07:11 +0000
+++ lib/lp/translations/utilities/tests/test_superfastimports.py 2010-08-17 09:48:55 +0000
@@ -13,6 +13,7 @@
13from lp.translations.utilities.translation_common_format import (13from lp.translations.utilities.translation_common_format import (
14 TranslationMessageData)14 TranslationMessageData)
1515
16
16class TestSuperFastImports(TestCaseWithFactory):17class TestSuperFastImports(TestCaseWithFactory):
17 """Test how ExistingPOFileInDatabase cache works."""18 """Test how ExistingPOFileInDatabase cache works."""
1819
@@ -66,8 +67,7 @@
66 def test_inactive_messages(self):67 def test_inactive_messages(self):
67 # Make sure non-current messages (i.e. suggestions) are68 # Make sure non-current messages (i.e. suggestions) are
68 # not cached in ExistingPOFileInDatabase.69 # not cached in ExistingPOFileInDatabase.
69 inactive_message = self.factory.makeTranslationMessage(70 inactive_message = self.factory.makeSuggestion(pofile=self.pofile)
70 pofile=self.pofile, suggestion=True)
71 cached_file = ExistingPOFileInDatabase(self.pofile)71 cached_file = ExistingPOFileInDatabase(self.pofile)
72 message_data = self.getTranslationMessageData(inactive_message)72 message_data = self.getTranslationMessageData(inactive_message)
73 self.assertFalse(73 self.assertFalse(
7474
=== modified file 'lib/lp/translations/windmill/tests/test_pofile_translate.py'
--- lib/lp/translations/windmill/tests/test_pofile_translate.py 2010-05-24 16:20:27 +0000
+++ lib/lp/translations/windmill/tests/test_pofile_translate.py 2010-08-17 09:48:55 +0000
@@ -7,6 +7,7 @@
7__all__ = []7__all__ = []
88
9import transaction9import transaction
10from zope.security.proxy import removeSecurityProxy
1011
11from canonical.launchpad.windmill.testing import constants, lpuser12from canonical.launchpad.windmill.testing import constants, lpuser
12from lp.translations.windmill.testing import TranslationsWindmillLayer13from lp.translations.windmill.testing import TranslationsWindmillLayer
@@ -151,9 +152,11 @@
151 current_translation = self.factory.makeTranslationMessage(152 current_translation = self.factory.makeTranslationMessage(
152 pofile=pofile, potmsgset=potmsgset, translations=['current'])153 pofile=pofile, potmsgset=potmsgset, translations=['current'])
153 transaction.commit()154 transaction.commit()
154 suggestion = self.factory.makeTranslationMessage(155 suggestion = self.factory.makeSuggestion(
155 pofile=pofile, potmsgset=potmsgset,156 pofile=pofile, potmsgset=potmsgset, translations=['suggestion'])
156 translations=['suggestion'], suggestion=True)157 # XXX henninge 2010-08-13 bug=597539: The view code depends on the
158 # pofile attribute being set.
159 removeSecurityProxy(suggestion).pofile = pofile
157 transaction.commit()160 transaction.commit()
158 logout()161 logout()
159162
@@ -484,4 +487,3 @@
484 reviewer and current_is_reviewer or487 reviewer and current_is_reviewer or
485 translator and not current_is_reviewer)488 translator and not current_is_reviewer)
486 assert switch_done is True, "Could not switch working mode."489 assert switch_done is True, "Could not switch working mode."
487

Subscribers

People subscribed via source and target branches