Merge ~cjwatson/launchpad:fix-publishing-webservice-ci-builds into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: c9e1aaded1610212eaf32a3b2573d9eb3955510c
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:fix-publishing-webservice-ci-builds
Merge into: launchpad:master
Prerequisite: ~cjwatson/launchpad:remove-dsp-is-upstream-link-allowed
Diff against target: 128 lines (+83/-4)
2 files modified
lib/lp/soyuz/browser/tests/test_publishing_webservice.py (+79/-0)
lib/lp/soyuz/model/publishing.py (+4/-4)
Reviewer Review Type Date Requested Status
Jürgen Gmach Approve
Review via email: mp+429509@code.launchpad.net

Commit message

Fix publishing webservice for published CI builds

Description of the change

Published CI builds don't have a component or section. Fix `ArchivePublisherBase.component_name` and `ArchivePublisherBase.section_name` not to crash in that case.

To post a comment you must log in.
Revision history for this message
Jürgen Gmach (jugmac00) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/lib/lp/soyuz/browser/tests/test_publishing_webservice.py b/lib/lp/soyuz/browser/tests/test_publishing_webservice.py
2index 4f1b7dd..674711d 100644
3--- a/lib/lp/soyuz/browser/tests/test_publishing_webservice.py
4+++ b/lib/lp/soyuz/browser/tests/test_publishing_webservice.py
5@@ -5,11 +5,14 @@
6
7 from functools import partial
8
9+from testtools.matchers import ContainsDict, Equals, Is
10 from zope.security.proxy import removeSecurityProxy
11
12+from lp.registry.interfaces.sourcepackage import SourcePackageType
13 from lp.services.librarian.browser import ProxiedLibraryFileAlias
14 from lp.services.webapp.interfaces import OAuthPermission
15 from lp.soyuz.adapters.proxiedsourcefiles import ProxiedSourceLibraryFileAlias
16+from lp.soyuz.enums import BinaryPackageFormat
17 from lp.testing import (
18 TestCaseWithFactory,
19 api_url,
20@@ -120,6 +123,44 @@ class SourcePackagePublishingHistoryWebserviceTests(TestCaseWithFactory):
21 self.assertEqual(200, response.status)
22 self.assertTrue(response.jsonBody())
23
24+ def test_ci_build(self):
25+ person = self.factory.makePerson()
26+ webservice = webservice_for_person(
27+ person, permission=OAuthPermission.READ_PUBLIC
28+ )
29+ with person_logged_in(person):
30+ distroseries = self.factory.makeDistroSeries()
31+ archive = self.factory.makeArchive(
32+ distribution=distroseries.distribution
33+ )
34+ build = self.factory.makeCIBuild()
35+ owner = build.git_repository.owner
36+ spn = self.factory.makeSourcePackageName()
37+ spr = build.createSourcePackageRelease(
38+ distroseries, spn, "1.0", creator=owner, archive=archive
39+ )
40+ spph = self.factory.makeSourcePackagePublishingHistory(
41+ sourcepackagerelease=spr,
42+ format=SourcePackageType.CI_BUILD,
43+ )
44+ url = api_url(spph)
45+
46+ response = webservice.get(url, api_version="devel")
47+
48+ self.assertEqual(200, response.status)
49+ with person_logged_in(person):
50+ self.assertThat(
51+ response.jsonBody(),
52+ ContainsDict(
53+ {
54+ "component_name": Is(None),
55+ "section_name": Is(None),
56+ "source_package_name": Equals(spn.name),
57+ "source_package_version": Equals(spr.version),
58+ }
59+ ),
60+ )
61+
62
63 class BinaryPackagePublishingHistoryWebserviceTests(TestCaseWithFactory):
64
65@@ -196,3 +237,41 @@ class BinaryPackagePublishingHistoryWebserviceTests(TestCaseWithFactory):
66 for bpf in bpph.binarypackagerelease.files
67 ]
68 self.assertContentEqual(expected_info, info)
69+
70+ def test_ci_build(self):
71+ person = self.factory.makePerson()
72+ webservice = webservice_for_person(
73+ person, permission=OAuthPermission.READ_PUBLIC
74+ )
75+ with person_logged_in(person):
76+ build = self.factory.makeCIBuild()
77+ bpn = self.factory.makeBinaryPackageName()
78+ bpr = build.createBinaryPackageRelease(
79+ bpn,
80+ "1.0",
81+ "test summary",
82+ "test description",
83+ BinaryPackageFormat.WHL,
84+ False,
85+ )
86+ bpph = self.factory.makeBinaryPackagePublishingHistory(
87+ binarypackagerelease=bpr,
88+ binpackageformat=BinaryPackageFormat.WHL,
89+ )
90+ url = api_url(bpph)
91+
92+ response = webservice.get(url, api_version="devel")
93+
94+ self.assertEqual(200, response.status)
95+ with person_logged_in(person):
96+ self.assertThat(
97+ response.jsonBody(),
98+ ContainsDict(
99+ {
100+ "binary_package_name": Equals(bpn.name),
101+ "binary_package_version": Equals(bpr.version),
102+ "component_name": Is(None),
103+ "section_name": Is(None),
104+ }
105+ ),
106+ )
107diff --git a/lib/lp/soyuz/model/publishing.py b/lib/lp/soyuz/model/publishing.py
108index 2a7a3e1..76356e8 100644
109--- a/lib/lp/soyuz/model/publishing.py
110+++ b/lib/lp/soyuz/model/publishing.py
111@@ -212,13 +212,13 @@ class ArchivePublisherBase:
112
113 @property
114 def component_name(self):
115- """See `ISourcePackagePublishingHistory`"""
116- return self.component.name
117+ """See `IPublishingView`."""
118+ return self.component.name if self.component is not None else None
119
120 @property
121 def section_name(self):
122- """See `ISourcePackagePublishingHistory`"""
123- return self.section.name
124+ """See `IPublishingView`."""
125+ return self.section.name if self.section is not None else None
126
127
128 @implementer(ISourcePackagePublishingHistory)

Subscribers

People subscribed via source and target branches

to status/vote changes: