diff --git a/britney2/policies/email.py b/britney2/policies/email.py index e04c7d7..5d10ed3 100644 --- a/britney2/policies/email.py +++ b/britney2/policies/email.py @@ -165,10 +165,10 @@ class EmailPolicy(BasePolicy, Rest): 'version': version, }) try: - source = data['entries'][0] + source = next(reversed(data['entries'])) # IndexError means no packages in -proposed matched this name/version, # which is expected to happen when bileto runs britney. - except IndexError: + except StopIteration: self.log('Email getPublishedSources IndexError (%s %s)' % (pkg, version)) return [] return self.scrape_gpg_emails(person_chooser(source)) diff --git a/tests/test_email.py b/tests/test_email.py index f971cf8..ec7e657 100755 --- a/tests/test_email.py +++ b/tests/test_email.py @@ -101,6 +101,19 @@ AUTO_SYNC = dict( sponsor_link='https://api.launchpad.net/1.0/~ubuntu-archive-robot', ) +PROMOTED_AUTO_SYNC = [ + dict( + creator_link=None, + package_creator_link='https://api.launchpad.net/1.0/~pkg-ruby-extras-maintainers', + package_signer_link=None, + sponsor_link=None,), + dict( + creator_link='https://api.launchpad.net/1.0/~katie', + package_creator_link='https://api.launchpad.net/1.0/~pkg-ruby-extras-maintainers', + package_signer_link=None, + sponsor_link='https://api.launchpad.net/1.0/~ubuntu-archive-robot',) +] + # address lists UBUNTU = ['personal@gmail.com', 'ubuntu@ubuntu.com', 'work@canonical.com'] @@ -164,6 +177,27 @@ class T(unittest.TestCase): self.assertEqual(address_chooser(CANONICAL), 'work@canonical.com') self.assertEqual(address_chooser(COMMUNITY), 'personal@gmail.com') + @patch('britney2.policies.email.EmailPolicy.query_rest_api') + @patch('britney2.policies.email.EmailPolicy.query_lp_rest_api') + def test_email_promoted_package(self, lp, rest): + """When a package has been promoted in proposed, we find the older SPPH + and use its details - in the case of an autosync to not email.""" + lp.return_value = dict(entries=PROMOTED_AUTO_SYNC) + e = EmailPolicy(FakeOptions, None) + self.assertEqual(e.lp_get_emails('openstack-doct-tools', '1.5.0-0ubuntu1'), []) + self.assertSequenceEqual(lp.mock_calls, [ + call('testbuntu/+archive/primary', { + 'distro_series': '/testbuntu/zazzy', + 'exact_match': 'true', + 'order_by_date': 'true', + 'pocket': 'Proposed', + 'source_name': 'openstack-doct-tools', + 'version': '1.5.0-0ubuntu1', + 'ws.op': 'getPublishedSources', + }) + ]) + self.assertSequenceEqual(rest.mock_calls, []) + @patch('britney2.policies.email.EmailPolicy.query_rest_api') @patch('britney2.policies.email.EmailPolicy.query_lp_rest_api') def test_email_scraping(self, lp, rest):