Merge lp:~cjwatson/launchpad/snap-webhooks-permissions into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 17936
Proposed branch: lp:~cjwatson/launchpad/snap-webhooks-permissions
Merge into: lp:launchpad
Diff against target: 172 lines (+38/-7)
5 files modified
database/schema/security.cfg (+1/-0)
lib/lp/code/model/tests/test_branchmergeproposal.py (+12/-5)
lib/lp/code/model/tests/test_gitjob.py (+11/-0)
lib/lp/codehosting/scanner/tests/test_bzrsync.py (+6/-1)
lib/lp/snappy/tests/test_snapbuild.py (+8/-1)
To merge this branch: bzr merge lp:~cjwatson/launchpad/snap-webhooks-permissions
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+287851@code.launchpad.net

Commit message

Fix permissions to allow dispatching of snap webhooks.

Description of the change

Fix permissions to allow dispatching of snap webhooks. All webhook-capable models now have tests to ensure that webhook job repr() works.

To post a comment you must log in.
Revision history for this message
William Grant (wgrant) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'database/schema/security.cfg'
--- database/schema/security.cfg 2016-01-19 17:41:11 +0000
+++ database/schema/security.cfg 2016-03-02 21:26:51 +0000
@@ -2503,6 +2503,7 @@
2503public.job = SELECT, UPDATE2503public.job = SELECT, UPDATE
2504public.person = SELECT2504public.person = SELECT
2505public.product = SELECT2505public.product = SELECT
2506public.snap = SELECT
2506public.sourcepackagename = SELECT2507public.sourcepackagename = SELECT
2507public.webhook = SELECT2508public.webhook = SELECT
2508public.webhookjob = SELECT, UPDATE2509public.webhookjob = SELECT, UPDATE
25092510
=== modified file 'lib/lp/code/model/tests/test_branchmergeproposal.py'
--- lib/lp/code/model/tests/test_branchmergeproposal.py 2015-10-15 16:01:50 +0000
+++ lib/lp/code/model/tests/test_branchmergeproposal.py 2016-03-02 21:26:51 +0000
@@ -1,4 +1,4 @@
1# Copyright 2009-2015 Canonical Ltd. This software is licensed under the1# Copyright 2009-2016 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"""Tests for BranchMergeProposals."""4"""Tests for BranchMergeProposals."""
@@ -73,6 +73,7 @@
73from lp.registry.enums import TeamMembershipPolicy73from lp.registry.enums import TeamMembershipPolicy
74from lp.registry.interfaces.person import IPersonSet74from lp.registry.interfaces.person import IPersonSet
75from lp.registry.interfaces.product import IProductSet75from lp.registry.interfaces.product import IProductSet
76from lp.services.config import config
76from lp.services.database.constants import UTC_NOW77from lp.services.database.constants import UTC_NOW
77from lp.services.features.testing import FeatureFixture78from lp.services.features.testing import FeatureFixture
78from lp.services.webapp import canonical_url79from lp.services.webapp import canonical_url
@@ -87,6 +88,7 @@
87 WebServiceTestCase,88 WebServiceTestCase,
88 ws_object,89 ws_object,
89 )90 )
91from lp.testing.dbuser import dbuser
90from lp.testing.factory import LaunchpadObjectFactory92from lp.testing.factory import LaunchpadObjectFactory
91from lp.testing.layers import (93from lp.testing.layers import (
92 DatabaseFunctionalLayer,94 DatabaseFunctionalLayer,
@@ -969,11 +971,16 @@
969 }971 }
970 return {k: Equals(v) for k, v in payload.items()}972 return {k: Equals(v) for k, v in payload.items()}
971973
972 def assertCorrectDelivery(self, expected_payload, delivery):974 def assertCorrectDelivery(self, expected_payload, hook, delivery):
973 self.assertThat(975 self.assertThat(
974 delivery, MatchesStructure(976 delivery, MatchesStructure(
975 event_type=Equals("merge-proposal:0.1"),977 event_type=Equals("merge-proposal:0.1"),
976 payload=MatchesDict(expected_payload)))978 payload=MatchesDict(expected_payload)))
979 with dbuser(config.IWebhookDeliveryJobSource.dbuser):
980 self.assertEqual(
981 "<WebhookDeliveryJob for webhook %d on %r>" % (
982 hook.id, hook.target),
983 repr(delivery))
977984
978 def test_create_triggers_webhooks(self):985 def test_create_triggers_webhooks(self):
979 # When a merge proposal is created, any relevant webhooks are986 # When a merge proposal is created, any relevant webhooks are
@@ -993,7 +1000,7 @@
993 "action": Equals("created"),1000 "action": Equals("created"),
994 "new": MatchesDict(self.getExpectedPayload(proposal)),1001 "new": MatchesDict(self.getExpectedPayload(proposal)),
995 }1002 }
996 self.assertCorrectDelivery(expected_payload, delivery)1003 self.assertCorrectDelivery(expected_payload, hook, delivery)
9971004
998 def test_modify_triggers_webhooks(self):1005 def test_modify_triggers_webhooks(self):
999 # When an existing merge proposal is modified, any relevant webhooks1006 # When an existing merge proposal is modified, any relevant webhooks
@@ -1019,7 +1026,7 @@
1019 expected_payload["new"] = MatchesDict(1026 expected_payload["new"] = MatchesDict(
1020 self.getExpectedPayload(proposal))1027 self.getExpectedPayload(proposal))
1021 delivery = hook.deliveries.one()1028 delivery = hook.deliveries.one()
1022 self.assertCorrectDelivery(expected_payload, delivery)1029 self.assertCorrectDelivery(expected_payload, hook, delivery)
10231030
1024 def test_delete_triggers_webhooks(self):1031 def test_delete_triggers_webhooks(self):
1025 # When an existing merge proposal is deleted, any relevant webhooks1032 # When an existing merge proposal is deleted, any relevant webhooks
@@ -1040,7 +1047,7 @@
1040 }1047 }
1041 proposal.deleteProposal()1048 proposal.deleteProposal()
1042 delivery = hook.deliveries.one()1049 delivery = hook.deliveries.one()
1043 self.assertCorrectDelivery(expected_payload, delivery)1050 self.assertCorrectDelivery(expected_payload, hook, delivery)
10441051
10451052
1046class TestMergeProposalWebhooksBzr(1053class TestMergeProposalWebhooksBzr(
10471054
=== modified file 'lib/lp/code/model/tests/test_gitjob.py'
--- lib/lp/code/model/tests/test_gitjob.py 2016-02-05 16:51:12 +0000
+++ lib/lp/code/model/tests/test_gitjob.py 2016-03-02 21:26:51 +0000
@@ -39,6 +39,7 @@
39 GitRefScanJob,39 GitRefScanJob,
40 ReclaimGitRepositorySpaceJob,40 ReclaimGitRepositorySpaceJob,
41 )41 )
42from lp.services.config import config
42from lp.services.database.constants import UTC_NOW43from lp.services.database.constants import UTC_NOW
43from lp.services.features.testing import FeatureFixture44from lp.services.features.testing import FeatureFixture
44from lp.services.job.runner import JobRunner45from lp.services.job.runner import JobRunner
@@ -217,6 +218,11 @@
217 'old': None,218 'old': None,
218 'new': {'commit_sha1': sha1('refs/tags/2.0')}},219 'new': {'commit_sha1': sha1('refs/tags/2.0')}},
219 })})))220 })})))
221 with dbuser(config.IWebhookDeliveryJobSource.dbuser):
222 self.assertEqual(
223 "<WebhookDeliveryJob for webhook %d on %r>" % (
224 hook.id, hook.target),
225 repr(delivery))
220226
221 def test_merge_detection_triggers_webhooks(self):227 def test_merge_detection_triggers_webhooks(self):
222 self.useFixture(FeatureFixture(228 self.useFixture(FeatureFixture(
@@ -258,6 +264,11 @@
258 {'queue_status': Equals('Work in progress')}),264 {'queue_status': Equals('Work in progress')}),
259 'new': ContainsDict({'queue_status': Equals('Merged')}),265 'new': ContainsDict({'queue_status': Equals('Merged')}),
260 })))266 })))
267 with dbuser(config.IWebhookDeliveryJobSource.dbuser):
268 self.assertEqual(
269 "<WebhookDeliveryJob for webhook %d on %r>" % (
270 hook.id, hook.target),
271 repr(delivery))
261272
262 def test_composeWebhookPayload(self):273 def test_composeWebhookPayload(self):
263 repository = self.factory.makeGitRepository()274 repository = self.factory.makeGitRepository()
264275
=== modified file 'lib/lp/codehosting/scanner/tests/test_bzrsync.py'
--- lib/lp/codehosting/scanner/tests/test_bzrsync.py 2015-10-01 14:45:57 +0000
+++ lib/lp/codehosting/scanner/tests/test_bzrsync.py 2016-03-02 21:26:51 +0000
@@ -1,6 +1,6 @@
1#!/usr/bin/python1#!/usr/bin/python
2#2#
3# Copyright 2009-2015 Canonical Ltd. This software is licensed under the3# Copyright 2009-2016 Canonical Ltd. This software is licensed under the
4# GNU Affero General Public License version 3 (see the file LICENSE).4# GNU Affero General Public License version 3 (see the file LICENSE).
55
6import datetime6import datetime
@@ -774,6 +774,11 @@
774 "old": Equals({"revision_id": old_revid}),774 "old": Equals({"revision_id": old_revid}),
775 "new": Equals({"revision_id": new_revid}),775 "new": Equals({"revision_id": new_revid}),
776 })))776 })))
777 with dbuser(config.IWebhookDeliveryJobSource.dbuser):
778 self.assertEqual(
779 "<WebhookDeliveryJob for webhook %d on %r>" % (
780 hook.id, hook.target),
781 repr(delivery))
777782
778783
779class TestRevisionProperty(BzrSyncTestCase):784class TestRevisionProperty(BzrSyncTestCase):
780785
=== modified file 'lib/lp/snappy/tests/test_snapbuild.py'
--- lib/lp/snappy/tests/test_snapbuild.py 2016-02-19 14:18:22 +0000
+++ lib/lp/snappy/tests/test_snapbuild.py 2016-03-02 21:26:51 +0000
@@ -52,6 +52,7 @@
52 person_logged_in,52 person_logged_in,
53 TestCaseWithFactory,53 TestCaseWithFactory,
54 )54 )
55from lp.testing.dbuser import dbuser
55from lp.testing.layers import (56from lp.testing.layers import (
56 LaunchpadFunctionalLayer,57 LaunchpadFunctionalLayer,
57 LaunchpadZopelessLayer,58 LaunchpadZopelessLayer,
@@ -238,10 +239,16 @@
238 canonical_url(self.build.snap, force_local_path=True)),239 canonical_url(self.build.snap, force_local_path=True)),
239 "status": Equals("Successfully built"),240 "status": Equals("Successfully built"),
240 }241 }
242 delivery = hook.deliveries.one()
241 self.assertThat(243 self.assertThat(
242 hook.deliveries.one(), MatchesStructure(244 delivery, MatchesStructure(
243 event_type=Equals("snap:build:0.1"),245 event_type=Equals("snap:build:0.1"),
244 payload=MatchesDict(expected_payload)))246 payload=MatchesDict(expected_payload)))
247 with dbuser(config.IWebhookDeliveryJobSource.dbuser):
248 self.assertEqual(
249 "<WebhookDeliveryJob for webhook %d on %r>" % (
250 hook.id, hook.target),
251 repr(delivery))
245252
246 def test_notify_fullybuilt(self):253 def test_notify_fullybuilt(self):
247 # notify does not send mail when a SnapBuild completes normally.254 # notify does not send mail when a SnapBuild completes normally.