~launchpad-pqm/launchpad/devel

12981.5.1 by Julian Edwards
first test and code chunk
1
# Copyright 2011 Canonical Ltd.  This software is licensed under the
2
# GNU Affero General Public License version 3 (see the file LICENSE).
3
7675.1176.9 by Jeroen Vermeulen
Adapter: PackageCopyPolicy to ICopyPolicy.
4
from canonical.launchpad.webapp.testing import verifyObject
7675.1191.8 by Julian Edwards
fix the copy policy checker to take parameters other than the packageupload
5
from canonical.testing.layers import ZopelessDatabaseLayer
12981.5.2 by Julian Edwards
add autoApprove and tests
6
from lp.registry.interfaces.pocket import PackagePublishingPocket
7
from lp.registry.interfaces.series import SeriesStatus
7675.1172.2 by Julian Edwards
Add tests for email policy
8
from lp.soyuz.adapters.copypolicy import (
9
    InsecureCopyPolicy,
7675.1176.13 by Jeroen Vermeulen
Rename SyncPolicy to MassSyncPolicy (and concomitant changes) as per Julian's request.
10
    MassSyncCopyPolicy,
7675.1172.2 by Julian Edwards
Add tests for email policy
11
    )
7675.1176.9 by Jeroen Vermeulen
Adapter: PackageCopyPolicy to ICopyPolicy.
12
from lp.soyuz.enums import (
13
    ArchivePurpose,
14
    PackageCopyPolicy,
15
    )
14550.1.1 by Steve Kowalik
Run format-imports over lib/lp and lib/canonical/launchpad
16
from lp.soyuz.interfaces.copypolicy import ICopyPolicy
7675.1176.9 by Jeroen Vermeulen
Adapter: PackageCopyPolicy to ICopyPolicy.
17
from lp.testing import TestCaseWithFactory
12981.5.1 by Julian Edwards
first test and code chunk
18
19
20
class TestCopyPolicy(TestCaseWithFactory):
21
7675.1191.8 by Julian Edwards
fix the copy policy checker to take parameters other than the packageupload
22
    layer = ZopelessDatabaseLayer
12981.5.1 by Julian Edwards
first test and code chunk
23
7675.1191.8 by Julian Edwards
fix the copy policy checker to take parameters other than the packageupload
24
    def _getUploadCriteria(self, archive_purpose):
12981.5.3 by Julian Edwards
merciless test refactoring
25
        archive = self.factory.makeArchive(purpose=archive_purpose)
7675.1191.8 by Julian Edwards
fix the copy policy checker to take parameters other than the packageupload
26
        distroseries = self.factory.makeDistroSeries()
27
        pocket = self.factory.getAnyPocket()
28
        return archive, distroseries, pocket
12981.5.3 by Julian Edwards
merciless test refactoring
29
30
    def assertApproved(self, archive_purpose, method):
7675.1191.8 by Julian Edwards
fix the copy policy checker to take parameters other than the packageupload
31
        archive, distroseries, pocket = self._getUploadCriteria(
32
            archive_purpose)
33
        approved = method(archive, distroseries, pocket)
12981.5.3 by Julian Edwards
merciless test refactoring
34
        self.assertTrue(approved)
35
36
    def assertUnapproved(self, archive_purpose, method):
7675.1176.9 by Jeroen Vermeulen
Adapter: PackageCopyPolicy to ICopyPolicy.
37
        archive, distroseries, pocket = self._getUploadCriteria(
38
            archive_purpose)
7675.1191.8 by Julian Edwards
fix the copy policy checker to take parameters other than the packageupload
39
        approved = method(archive, distroseries, pocket)
12981.5.3 by Julian Edwards
merciless test refactoring
40
        self.assertFalse(approved)
41
12981.5.1 by Julian Edwards
first test and code chunk
42
    def test_insecure_holds_new_distro_package(self):
43
        cp = InsecureCopyPolicy()
12981.5.3 by Julian Edwards
merciless test refactoring
44
        self.assertUnapproved(ArchivePurpose.PRIMARY, cp.autoApproveNew)
12981.5.1 by Julian Edwards
first test and code chunk
45
46
    def test_insecure_approves_new_ppa_packages(self):
47
        cp = InsecureCopyPolicy()
12981.5.3 by Julian Edwards
merciless test refactoring
48
        self.assertApproved(ArchivePurpose.PPA, cp.autoApproveNew)
12981.5.2 by Julian Edwards
add autoApprove and tests
49
7675.1176.9 by Jeroen Vermeulen
Adapter: PackageCopyPolicy to ICopyPolicy.
50
    def test_insecure_approves_known_distro_package_to_unfrozen_release(self):
7675.1191.8 by Julian Edwards
fix the copy policy checker to take parameters other than the packageupload
51
        archive = self.factory.makeArchive(purpose=ArchivePurpose.PRIMARY)
52
        distroseries = self.factory.makeDistroSeries()
53
        pocket = PackagePublishingPocket.RELEASE
54
        cp = InsecureCopyPolicy()
55
        approve = cp.autoApprove(archive, distroseries, pocket)
56
        self.assertTrue(approve)
57
58
    def test_insecure_holds_copy_to_updates_pocket_in_frozen_series(self):
59
        archive = self.factory.makeArchive(purpose=ArchivePurpose.PRIMARY)
60
        distroseries = self.factory.makeDistroSeries()
61
        distroseries.status = SeriesStatus.FROZEN
62
        pocket = PackagePublishingPocket.UPDATES
63
        cp = InsecureCopyPolicy()
64
        approve = cp.autoApprove(archive, distroseries, pocket)
65
        self.assertFalse(approve)
12981.5.2 by Julian Edwards
add autoApprove and tests
66
67
    def test_insecure_holds_copy_to_release_pocket_in_frozen_series(self):
68
        archive = self.factory.makeArchive(purpose=ArchivePurpose.PRIMARY)
7675.1191.8 by Julian Edwards
fix the copy policy checker to take parameters other than the packageupload
69
        distroseries = self.factory.makeDistroSeries()
70
        pocket = PackagePublishingPocket.RELEASE
71
        distroseries.status = SeriesStatus.FROZEN
12981.5.2 by Julian Edwards
add autoApprove and tests
72
        cp = InsecureCopyPolicy()
7675.1191.8 by Julian Edwards
fix the copy policy checker to take parameters other than the packageupload
73
        approve = cp.autoApprove(archive, distroseries, pocket)
12981.5.2 by Julian Edwards
add autoApprove and tests
74
        self.assertFalse(approve)
75
76
    def test_insecure_approves_existing_ppa_package(self):
77
        cp = InsecureCopyPolicy()
12981.5.3 by Julian Edwards
merciless test refactoring
78
        self.assertApproved(ArchivePurpose.PPA, cp.autoApprove)
7675.1172.2 by Julian Edwards
Add tests for email policy
79
80
    def test_insecure_sends_emails(self):
81
        cp = InsecureCopyPolicy()
13168.3.1 by Julian Edwards
Copy policies now don't send emails for PPAs
82
        archive = self.factory.makeArchive(purpose=ArchivePurpose.PRIMARY)
83
        self.assertTrue(cp.send_email(archive))
84
85
    def test_insecure_doesnt_send_emails_for_ppa(self):
86
        cp = InsecureCopyPolicy()
87
        archive = self.factory.makeArchive(purpose=ArchivePurpose.PPA)
88
        self.assertFalse(cp.send_email(archive))
7675.1172.2 by Julian Edwards
Add tests for email policy
89
90
    def test_sync_does_not_send_emails(self):
7675.1176.13 by Jeroen Vermeulen
Rename SyncPolicy to MassSyncPolicy (and concomitant changes) as per Julian's request.
91
        cp = MassSyncCopyPolicy()
13168.3.1 by Julian Edwards
Copy policies now don't send emails for PPAs
92
        archive = self.factory.makeArchive(purpose=ArchivePurpose.PRIMARY)
93
        self.assertFalse(cp.send_email(archive))
94
        archive = self.factory.makeArchive(purpose=ArchivePurpose.PPA)
95
        self.assertFalse(cp.send_email(archive))
7675.1172.4 by Julian Edwards
Add policy names
96
7675.1176.9 by Jeroen Vermeulen
Adapter: PackageCopyPolicy to ICopyPolicy.
97
    def test_policies_implement_ICopyPolicy(self):
98
        for policy in PackageCopyPolicy.items:
99
            self.assertTrue(verifyObject(ICopyPolicy, ICopyPolicy(policy)))