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
=== modified file 'lib/lp/snappy/browser/tests/test_snapbuild.py'
--- lib/lp/snappy/browser/tests/test_snapbuild.py 2018-03-22 10:08:37 +0000
+++ lib/lp/snappy/browser/tests/test_snapbuild.py 2018-10-09 10:40:56 +0000
@@ -129,9 +129,14 @@
129 self.assertThat(build_view(), soupmatchers.HTMLContains(129 self.assertThat(build_view(), soupmatchers.HTMLContains(
130 soupmatchers.Tag(130 soupmatchers.Tag(
131 "store upload status", "li",131 "store upload status", "li",
132 attrs={"id": "store-upload-status"},132 attrs={"id": "store-upload-status"}),
133 text=re.compile(133 soupmatchers.Within(
134 r"^\s*Store upload failed:\s+Scan failed.\s*$"))))134 soupmatchers.Tag(
135 "store upload error messages", "ul",
136 attrs={"id": "store-upload-error-messages"}),
137 soupmatchers.Tag(
138 "store upload error message", "li",
139 text=re.compile(r"^\s*Scan failed.\s*$")))))
135140
136 def test_store_upload_status_failed_with_extended_error_message(self):141 def test_store_upload_status_failed_with_extended_error_message(self):
137 build = self.factory.makeSnapBuild(status=BuildStatus.FULLYBUILT)142 build = self.factory.makeSnapBuild(status=BuildStatus.FULLYBUILT)
138143
=== modified file 'lib/lp/snappy/interfaces/snapbuild.py'
--- lib/lp/snappy/interfaces/snapbuild.py 2018-08-03 13:53:20 +0000
+++ lib/lp/snappy/interfaces/snapbuild.py 2018-10-09 10:40:56 +0000
@@ -228,7 +228,8 @@
228 title=_("Store upload error message"),228 title=_("Store upload error message"),
229 description=_(229 description=_(
230 "The error message, if any, from the last attempt to upload "230 "The error message, if any, from the last attempt to upload "
231 "this snap build to the store."),231 "this snap build to the store. (Deprecated; use "
232 "store_upload_error_messages instead.)"),
232 required=False, readonly=True))233 required=False, readonly=True))
233234
234 store_upload_error_messages = exported(List(235 store_upload_error_messages = exported(List(
235236
=== modified file 'lib/lp/snappy/model/snapbuild.py'
--- lib/lp/snappy/model/snapbuild.py 2018-10-04 12:54:04 +0000
+++ lib/lp/snappy/model/snapbuild.py 2018-10-09 10:40:56 +0000
@@ -477,7 +477,12 @@
477 @property477 @property
478 def store_upload_error_messages(self):478 def store_upload_error_messages(self):
479 job = self.last_store_upload_job479 job = self.last_store_upload_job
480 return job and job.error_messages or []480 if job:
481 if job.error_messages:
482 return job.error_messages
483 elif job.error_message:
484 return [{"message": job.error_message}]
485 return []
481486
482 def scheduleStoreUpload(self):487 def scheduleStoreUpload(self):
483 """See `ISnapBuild`."""488 """See `ISnapBuild`."""
484489
=== modified file 'lib/lp/snappy/templates/snapbuild-index.pt'
--- lib/lp/snappy/templates/snapbuild-index.pt 2018-03-22 10:08:37 +0000
+++ lib/lp/snappy/templates/snapbuild-index.pt 2018-10-09 10:40:56 +0000
@@ -177,9 +177,6 @@
177 <tal:failed-upload177 <tal:failed-upload
178 condition="context/store_upload_status/enumvalue:FAILEDTOUPLOAD">178 condition="context/store_upload_status/enumvalue:FAILEDTOUPLOAD">
179 Store upload failed:179 Store upload failed:
180 <tal:error-message
181 condition="not: context/store_upload_error_messages"
182 replace="context/store_upload_error_message" />
183 <ul id="store-upload-error-messages">180 <ul id="store-upload-error-messages">
184 <li tal:repeat="error context/store_upload_error_messages">181 <li tal:repeat="error context/store_upload_error_messages">
185 <span tal:replace="error/message"/>182 <span tal:replace="error/message"/>
186183
=== modified file 'lib/lp/snappy/tests/test_snapbuild.py'
--- lib/lp/snappy/tests/test_snapbuild.py 2018-10-04 12:54:04 +0000
+++ lib/lp/snappy/tests/test_snapbuild.py 2018-10-09 10:40:56 +0000
@@ -455,6 +455,32 @@
455 SnapBuildStoreUploadStatus.FAILEDTORELEASE,455 SnapBuildStoreUploadStatus.FAILEDTORELEASE,
456 build.store_upload_status)456 build.store_upload_status)
457457
458 def test_store_upload_error_messages_no_job(self):
459 build = self.factory.makeSnapBuild(status=BuildStatus.FULLYBUILT)
460 self.assertEqual([], build.store_upload_error_messages)
461
462 def test_store_upload_error_messages_job_no_error(self):
463 build = self.factory.makeSnapBuild(status=BuildStatus.FULLYBUILT)
464 getUtility(ISnapStoreUploadJobSource).create(build)
465 self.assertEqual([], build.store_upload_error_messages)
466
467 def test_store_upload_error_messages_job_error_messages(self):
468 build = self.factory.makeSnapBuild(status=BuildStatus.FULLYBUILT)
469 job = getUtility(ISnapStoreUploadJobSource).create(build)
470 removeSecurityProxy(job).error_messages = [
471 {"message": "Scan failed.", "link": "link1"},
472 ]
473 self.assertEqual(
474 [{"message": "Scan failed.", "link": "link1"}],
475 build.store_upload_error_messages)
476
477 def test_store_upload_error_messages_job_error_message(self):
478 build = self.factory.makeSnapBuild(status=BuildStatus.FULLYBUILT)
479 job = getUtility(ISnapStoreUploadJobSource).create(build)
480 removeSecurityProxy(job).error_message = "Boom"
481 self.assertEqual(
482 [{"message": "Boom"}], build.store_upload_error_messages)
483
458 def test_scheduleStoreUpload(self):484 def test_scheduleStoreUpload(self):
459 # A build not previously uploaded to the store can be uploaded485 # A build not previously uploaded to the store can be uploaded
460 # manually.486 # manually.