summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorRoald de Vries <rdevries@thoughtworks.com>2016-11-24 16:41:49 +0100
committerRoald de Vries <rdevries@thoughtworks.com>2016-11-24 17:00:09 +0100
commitb00b7ff5d828099e8f0190fee44ad1daf2054717 (patch)
tree145820d58f275da740adbabfe9e540c65357d703 /service
parentc2088d90c080eb56a0d6edd714ade80525e1ac00 (diff)
add public root resource to serve static files
Diffstat (limited to 'service')
-rw-r--r--service/pixelated/resources/auth.py2
-rw-r--r--service/pixelated/resources/root_resource.py12
-rw-r--r--service/test/unit/resources/test_root_resource.py44
3 files changed, 56 insertions, 2 deletions
diff --git a/service/pixelated/resources/auth.py b/service/pixelated/resources/auth.py
index adac985f..ef5c9710 100644
--- a/service/pixelated/resources/auth.py
+++ b/service/pixelated/resources/auth.py
@@ -108,7 +108,7 @@ class PixelatedAuthSessionWrapper(object):
else:
log.err(
result,
- "HTTPAuthSessionWrapper.getChildWithDefault encountered "
+ "PixelatedAuthSessionWrapper.getChildWithDefault encountered "
"unexpected error")
return ErrorPage(500, None, None)
diff --git a/service/pixelated/resources/root_resource.py b/service/pixelated/resources/root_resource.py
index 8fa80bb2..608e18ef 100644
--- a/service/pixelated/resources/root_resource.py
+++ b/service/pixelated/resources/root_resource.py
@@ -47,6 +47,18 @@ MODE_STARTUP = 1
MODE_RUNNING = 2
+class PublicRootResource(BaseResource, object):
+
+ def __init__(self, services_factory, assets_path):
+ super(PublicRootResource, self).__init__(services_factory)
+ self._child_resources = dict(
+ assets=File(assets_path)
+ )
+
+ def getChild(self, path, request):
+ return self._child_resources.get(path) or NoResource()
+
+
class RootResource(BaseResource):
def __init__(self, services_factory):
BaseResource.__init__(self, services_factory)
diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py
index 7a7b2005..082f2b22 100644
--- a/service/test/unit/resources/test_root_resource.py
+++ b/service/test/unit/resources/test_root_resource.py
@@ -1,14 +1,42 @@
+import os
import re
from mock import MagicMock, patch
from mockito import mock, when, any as ANY
+import pixelated
from pixelated.application import UserAgentMode
from pixelated.resources.features_resource import FeaturesResource
from test.unit.resources import DummySite
+from twisted.cred.checkers import ANONYMOUS
+from twisted.internet.defer import succeed
from twisted.trial import unittest
+from twisted.web.resource import IResource
+from twisted.web.static import File
from twisted.web.test.requesthelper import DummyRequest
-from pixelated.resources.root_resource import RootResource, MODE_STARTUP, MODE_RUNNING
+from pixelated.resources.root_resource import PublicRootResource, RootResource, MODE_STARTUP, MODE_RUNNING
+
+
+class TestPublicRootResource(unittest.TestCase):
+
+ def setUp(self):
+ self.portal_mock = mock()
+ assets_path = os.path.abspath(
+ os.path.join(os.path.abspath(pixelated.__file__), '..', '..', '..', 'web-ui', 'public')
+ )
+ services_factory = mock()
+ self.public_root_resource = PublicRootResource(services_factory, assets_path=assets_path)
+ self.web = DummySite(self.public_root_resource)
+ self.request = DummyRequest(['assets', 'dummy.json'])
+
+ def test_assets_should_be_available(self):
+ d = self.web.get(self.request)
+
+ def assert_response(_):
+ self.assertEqual(200, self.request.responseCode)
+
+ d.addCallback(assert_response)
+ return d
class TestRootResource(unittest.TestCase):
@@ -103,6 +131,20 @@ class TestRootResource(unittest.TestCase):
d.addCallback(assert_unauthorized)
return d
+ def test_GET_should_return_404_for_non_existing_resource(self):
+ request = DummyRequest(['/non-existing-child'])
+ request.method = 'GET'
+
+ request.getCookie = MagicMock(return_value='stubbed csrf token')
+
+ d = self.web.get(request)
+
+ def assert_not_found(_):
+ self.assertEqual(404, request.responseCode)
+
+ d.addCallback(assert_not_found)
+ return d
+
def test_should_404_non_existing_resource_with_valid_csrf(self):
request = DummyRequest(['/non-existing-child'])
request.method = 'POST'