Merge lp:~cjwatson/launchpad/snap-build-better-error-messages into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 18791
Proposed branch: lp:~cjwatson/launchpad/snap-build-better-error-messages
Merge into: lp:launchpad
Diff against target: 104 lines (+42/-8)
5 files modified
lib/lp/snappy/browser/tests/test_snapbuild.py (+8/-3)
lib/lp/snappy/interfaces/snapbuild.py (+2/-1)
lib/lp/snappy/model/snapbuild.py (+6/-1)
lib/lp/snappy/templates/snapbuild-index.pt (+0/-3)
lib/lp/snappy/tests/test_snapbuild.py (+26/-0)
To merge this branch: bzr merge lp:~cjwatson/launchpad/snap-build-better-error-messages
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+356312@code.launchpad.net

Commit message

Synthesise SnapBuild.store_upload_error_messages based on store_upload_error_message if necessary.

Description of the change

This allows deprecating store_upload_error_message rather than needing to check both (which build.snapcraft.io does in a slightly buggy way and thus sometimes fails to show error messages).

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
1=== modified file 'lib/lp/snappy/browser/tests/test_snapbuild.py'
2--- lib/lp/snappy/browser/tests/test_snapbuild.py 2018-03-22 10:08:37 +0000
3+++ lib/lp/snappy/browser/tests/test_snapbuild.py 2018-10-09 10:40:56 +0000
4@@ -129,9 +129,14 @@
5 self.assertThat(build_view(), soupmatchers.HTMLContains(
6 soupmatchers.Tag(
7 "store upload status", "li",
8- attrs={"id": "store-upload-status"},
9- text=re.compile(
10- r"^\s*Store upload failed:\s+Scan failed.\s*$"))))
11+ attrs={"id": "store-upload-status"}),
12+ soupmatchers.Within(
13+ soupmatchers.Tag(
14+ "store upload error messages", "ul",
15+ attrs={"id": "store-upload-error-messages"}),
16+ soupmatchers.Tag(
17+ "store upload error message", "li",
18+ text=re.compile(r"^\s*Scan failed.\s*$")))))
19
20 def test_store_upload_status_failed_with_extended_error_message(self):
21 build = self.factory.makeSnapBuild(status=BuildStatus.FULLYBUILT)
22
23=== modified file 'lib/lp/snappy/interfaces/snapbuild.py'
24--- lib/lp/snappy/interfaces/snapbuild.py 2018-08-03 13:53:20 +0000
25+++ lib/lp/snappy/interfaces/snapbuild.py 2018-10-09 10:40:56 +0000
26@@ -228,7 +228,8 @@
27 title=_("Store upload error message"),
28 description=_(
29 "The error message, if any, from the last attempt to upload "
30- "this snap build to the store."),
31+ "this snap build to the store. (Deprecated; use "
32+ "store_upload_error_messages instead.)"),
33 required=False, readonly=True))
34
35 store_upload_error_messages = exported(List(
36
37=== modified file 'lib/lp/snappy/model/snapbuild.py'
38--- lib/lp/snappy/model/snapbuild.py 2018-10-04 12:54:04 +0000
39+++ lib/lp/snappy/model/snapbuild.py 2018-10-09 10:40:56 +0000
40@@ -477,7 +477,12 @@
41 @property
42 def store_upload_error_messages(self):
43 job = self.last_store_upload_job
44- return job and job.error_messages or []
45+ if job:
46+ if job.error_messages:
47+ return job.error_messages
48+ elif job.error_message:
49+ return [{"message": job.error_message}]
50+ return []
51
52 def scheduleStoreUpload(self):
53 """See `ISnapBuild`."""
54
55=== modified file 'lib/lp/snappy/templates/snapbuild-index.pt'
56--- lib/lp/snappy/templates/snapbuild-index.pt 2018-03-22 10:08:37 +0000
57+++ lib/lp/snappy/templates/snapbuild-index.pt 2018-10-09 10:40:56 +0000
58@@ -177,9 +177,6 @@
59 <tal:failed-upload
60 condition="context/store_upload_status/enumvalue:FAILEDTOUPLOAD">
61 Store upload failed:
62- <tal:error-message
63- condition="not: context/store_upload_error_messages"
64- replace="context/store_upload_error_message" />
65 <ul id="store-upload-error-messages">
66 <li tal:repeat="error context/store_upload_error_messages">
67 <span tal:replace="error/message"/>
68
69=== modified file 'lib/lp/snappy/tests/test_snapbuild.py'
70--- lib/lp/snappy/tests/test_snapbuild.py 2018-10-04 12:54:04 +0000
71+++ lib/lp/snappy/tests/test_snapbuild.py 2018-10-09 10:40:56 +0000
72@@ -455,6 +455,32 @@
73 SnapBuildStoreUploadStatus.FAILEDTORELEASE,
74 build.store_upload_status)
75
76+ def test_store_upload_error_messages_no_job(self):
77+ build = self.factory.makeSnapBuild(status=BuildStatus.FULLYBUILT)
78+ self.assertEqual([], build.store_upload_error_messages)
79+
80+ def test_store_upload_error_messages_job_no_error(self):
81+ build = self.factory.makeSnapBuild(status=BuildStatus.FULLYBUILT)
82+ getUtility(ISnapStoreUploadJobSource).create(build)
83+ self.assertEqual([], build.store_upload_error_messages)
84+
85+ def test_store_upload_error_messages_job_error_messages(self):
86+ build = self.factory.makeSnapBuild(status=BuildStatus.FULLYBUILT)
87+ job = getUtility(ISnapStoreUploadJobSource).create(build)
88+ removeSecurityProxy(job).error_messages = [
89+ {"message": "Scan failed.", "link": "link1"},
90+ ]
91+ self.assertEqual(
92+ [{"message": "Scan failed.", "link": "link1"}],
93+ build.store_upload_error_messages)
94+
95+ def test_store_upload_error_messages_job_error_message(self):
96+ build = self.factory.makeSnapBuild(status=BuildStatus.FULLYBUILT)
97+ job = getUtility(ISnapStoreUploadJobSource).create(build)
98+ removeSecurityProxy(job).error_message = "Boom"
99+ self.assertEqual(
100+ [{"message": "Boom"}], build.store_upload_error_messages)
101+
102 def test_scheduleStoreUpload(self):
103 # A build not previously uploaded to the store can be uploaded
104 # manually.