Merge ~ack/maas:offline-docs-append-html into maas:master

Proposed by Alberto Donato
Status: Merged
Approved by: Alberto Donato
Approved revision: 8de5d455ca2823731d743f9aaa2e54c3711b0554
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ack/maas:offline-docs-append-html
Merge into: maas:master
Diff against target: 89 lines (+47/-5)
2 files modified
src/maasserver/tests/test_webapp.py (+41/-5)
src/maasserver/webapp.py (+6/-0)
Reviewer Review Type Date Requested Status
MAAS Lander Needs Fixing
Adam Collard (community) Approve
Review via email: mp+392591@code.launchpad.net

Commit message

LP: #1898679 - serve the file with ".html" extension if resource without extension is requested

To post a comment you must log in.
Revision history for this message
Adam Collard (adam-collard) wrote :

Can you add a test for a missing image or other static (non-html) resource>

Revision history for this message
Adam Collard (adam-collard) :
review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b offline-docs-append-html lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 0ec05f4604d405fb724ff0cf54e283d872e726d0

review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b offline-docs-append-html lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/8540/console
COMMIT: 8de5d455ca2823731d743f9aaa2e54c3711b0554

review: Needs Fixing

There was an error fetching revisions from git servers. Please try again in a few minutes. If the problem persists, contact Launchpad support.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/src/maasserver/tests/test_webapp.py b/src/maasserver/tests/test_webapp.py
index 04121d2..3edc12a 100644
--- a/src/maasserver/tests/test_webapp.py
+++ b/src/maasserver/tests/test_webapp.py
@@ -1,11 +1,8 @@
1# Copyright 2014-2016 Canonical Ltd. This software is licensed under the1# Copyright 2014-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# TODO: Description here.
5"""..."""
6
7__all__ = []
84
5from pathlib import Path
9import random6import random
10from unittest.mock import sentinel7from unittest.mock import sentinel
118
@@ -20,14 +17,53 @@ from twisted.web.test.requesthelper import DummyChannel, DummyRequest
2017
21from maasserver import eventloop, webapp18from maasserver import eventloop, webapp
22from maasserver.testing.listener import FakePostgresListenerService19from maasserver.testing.listener import FakePostgresListenerService
23from maasserver.webapp import OverlaySite20from maasserver.webapp import DocsFallbackFile, OverlaySite
24from maasserver.websockets.protocol import WebSocketFactory21from maasserver.websockets.protocol import WebSocketFactory
25from maastesting.factory import factory22from maastesting.factory import factory
23from maastesting.fixtures import TempDirectory
26from maastesting.matchers import MockCalledOnceWith24from maastesting.matchers import MockCalledOnceWith
27from maastesting.testcase import MAASTestCase25from maastesting.testcase import MAASTestCase
28from provisioningserver.utils.twisted import reducedWebLogFormatter26from provisioningserver.utils.twisted import reducedWebLogFormatter
2927
3028
29class TestDocsFallbackFile(MAASTestCase):
30 def setUp(self):
31 super().setUp()
32 self.base_dir = self.useFixture(TempDirectory())
33 self.docs = DocsFallbackFile(self.base_dir.path)
34
35 def touch_file(self, path):
36 Path(self.base_dir.join(path)).touch()
37
38 def test_html_404(self):
39 request = DummyRequest([b"foo.html"])
40 resource = self.docs.getChild(b"foo.html", request)
41 self.assertTrue(resource.path.endswith("404.html"))
42
43 def test_other_404(self):
44 request = DummyRequest([b"foo.jpg"])
45 resource = self.docs.getChild(b"foo.jpg", request)
46 self.assertTrue(resource.path.endswith("404.html"))
47
48 def test_html_resource(self):
49 self.touch_file("foo.html")
50 request = DummyRequest([b"foo.html"])
51 resource = self.docs.getChild(b"foo.html", request)
52 self.assertTrue(resource.path.endswith("foo.html"))
53
54 def test_other_resource(self):
55 self.touch_file("foo.jpg")
56 request = DummyRequest([b"foo.jpg"])
57 resource = self.docs.getChild(b"foo.jpg", request)
58 self.assertTrue(resource.path.endswith("foo.jpg"))
59
60 def test_append_html(self):
61 self.touch_file("foo.html")
62 request = DummyRequest([b"foo"])
63 resource = self.docs.getChild(b"foo", request)
64 self.assertTrue(resource.path.endswith("foo.html"))
65
66
31class TestCleanPathRequest(MAASTestCase):67class TestCleanPathRequest(MAASTestCase):
32 def test_requestReceived_converts_extra_slashes_to_single(self):68 def test_requestReceived_converts_extra_slashes_to_single(self):
33 mock_super_requestReceived = self.patch(69 mock_super_requestReceived = self.patch(
diff --git a/src/maasserver/webapp.py b/src/maasserver/webapp.py
index 8952914..9828bab 100644
--- a/src/maasserver/webapp.py
+++ b/src/maasserver/webapp.py
@@ -181,6 +181,12 @@ class DocsFallbackFile(NoListingFile):
181 super().__init__(*args, **kwargs)181 super().__init__(*args, **kwargs)
182 self.childNotFound = DefaultFile(self.child(fallback).path)182 self.childNotFound = DefaultFile(self.child(fallback).path)
183183
184 def getChild(self, path, request):
185 child = super().getChild(path, request)
186 if child is self.childNotFound and not path.endswith(b".html"):
187 child = super().getChild(path + b".html", request)
188 return child
189
184190
185class WebApplicationService(StreamServerEndpointService):191class WebApplicationService(StreamServerEndpointService):
186 """Service encapsulating the Django web application.192 """Service encapsulating the Django web application.

Subscribers

People subscribed via source and target branches