2024-07-12 00:17:15 -05:00
|
|
|
# -*- coding: utf-8; -*-
|
|
|
|
|
|
|
|
import json
|
|
|
|
from unittest import TestCase
|
2024-08-14 21:20:00 -05:00
|
|
|
from unittest.mock import MagicMock, patch
|
2024-07-12 00:17:15 -05:00
|
|
|
|
|
|
|
from wuttjamaican.conf import WuttaConfig
|
|
|
|
|
|
|
|
from pyramid import testing
|
2024-08-04 23:09:29 -05:00
|
|
|
from pyramid.security import remember
|
2024-07-12 00:17:15 -05:00
|
|
|
|
|
|
|
from wuttaweb import subscribers
|
|
|
|
from wuttaweb import helpers
|
2024-08-04 23:09:29 -05:00
|
|
|
from wuttaweb.auth import WuttaSecurityPolicy
|
2024-07-12 00:17:15 -05:00
|
|
|
|
|
|
|
|
|
|
|
class TestNewRequest(TestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.config = WuttaConfig()
|
2024-08-05 14:21:54 -05:00
|
|
|
self.request = self.make_request()
|
2025-08-31 12:26:43 -05:00
|
|
|
self.pyramid_config = testing.setUp(
|
|
|
|
request=self.request,
|
|
|
|
settings={
|
|
|
|
"wutta_config": self.config,
|
|
|
|
},
|
|
|
|
)
|
2024-08-05 14:21:54 -05:00
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
testing.tearDown()
|
2024-07-12 00:17:15 -05:00
|
|
|
|
|
|
|
def make_request(self):
|
|
|
|
request = testing.DummyRequest()
|
2024-08-05 14:21:54 -05:00
|
|
|
# request.registry.settings = {'wutta_config': self.config}
|
2024-07-12 00:17:15 -05:00
|
|
|
return request
|
|
|
|
|
|
|
|
def test_wutta_config(self):
|
2024-08-05 14:21:54 -05:00
|
|
|
event = MagicMock(request=self.request)
|
2024-07-12 00:17:15 -05:00
|
|
|
|
|
|
|
# request gets a new attr
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(hasattr(self.request, "wutta_config"))
|
2024-07-12 00:17:15 -05:00
|
|
|
subscribers.new_request(event)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertTrue(hasattr(self.request, "wutta_config"))
|
2024-08-05 14:21:54 -05:00
|
|
|
self.assertIs(self.request.wutta_config, self.config)
|
2024-07-12 00:17:15 -05:00
|
|
|
|
|
|
|
def test_use_oruga_default(self):
|
|
|
|
|
|
|
|
# request gets a new attr, false by default
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(hasattr(self.request, "use_oruga"))
|
2025-06-29 09:16:44 -05:00
|
|
|
event = MagicMock(request=self.request)
|
2024-07-12 00:17:15 -05:00
|
|
|
subscribers.new_request(event)
|
2024-08-05 14:21:54 -05:00
|
|
|
self.assertFalse(self.request.use_oruga)
|
2024-07-12 00:17:15 -05:00
|
|
|
|
2025-06-29 09:16:44 -05:00
|
|
|
# nb. using 'butterfly' theme should cause the 'use_oruga'
|
|
|
|
# flag to be turned on by default
|
|
|
|
self.request = self.make_request()
|
2025-08-31 12:26:43 -05:00
|
|
|
self.request.registry.settings["wuttaweb.theme"] = "butterfly"
|
2025-06-29 09:16:44 -05:00
|
|
|
event = MagicMock(request=self.request)
|
|
|
|
subscribers.new_request(event)
|
|
|
|
self.assertTrue(self.request.use_oruga)
|
|
|
|
|
2024-07-12 00:17:15 -05:00
|
|
|
def test_use_oruga_custom(self):
|
2025-08-31 12:26:43 -05:00
|
|
|
self.config.setdefault(
|
|
|
|
"wuttaweb.oruga_detector.spec",
|
|
|
|
"tests.test_subscribers:custom_oruga_detector",
|
|
|
|
)
|
2024-08-05 14:21:54 -05:00
|
|
|
event = MagicMock(request=self.request)
|
2024-07-12 00:17:15 -05:00
|
|
|
|
|
|
|
# request gets a new attr, which should be true
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(hasattr(self.request, "use_oruga"))
|
2024-07-12 00:17:15 -05:00
|
|
|
subscribers.new_request(event)
|
2024-08-05 14:21:54 -05:00
|
|
|
self.assertTrue(self.request.use_oruga)
|
|
|
|
|
2025-06-29 09:16:44 -05:00
|
|
|
def test_register_component(self):
|
|
|
|
event = MagicMock(request=self.request)
|
|
|
|
subscribers.new_request(event)
|
|
|
|
|
|
|
|
# component tracking dict is missing at first
|
2025-09-01 10:32:22 -05:00
|
|
|
self.assertFalse(hasattr(self.request, "wuttaweb_registered_components"))
|
2025-06-29 09:16:44 -05:00
|
|
|
|
|
|
|
# registering a component
|
2025-08-31 12:26:43 -05:00
|
|
|
self.request.register_component("foo-example", "FooExample")
|
2025-09-01 10:32:22 -05:00
|
|
|
self.assertTrue(hasattr(self.request, "wuttaweb_registered_components"))
|
|
|
|
self.assertEqual(len(self.request.wuttaweb_registered_components), 1)
|
|
|
|
self.assertIn("foo-example", self.request.wuttaweb_registered_components)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertEqual(
|
2025-09-01 10:32:22 -05:00
|
|
|
self.request.wuttaweb_registered_components["foo-example"], "FooExample"
|
2025-08-31 12:26:43 -05:00
|
|
|
)
|
2025-06-29 09:16:44 -05:00
|
|
|
|
|
|
|
# re-registering same name
|
2025-08-31 12:26:43 -05:00
|
|
|
self.request.register_component("foo-example", "FooExample")
|
2025-09-01 10:32:22 -05:00
|
|
|
self.assertEqual(len(self.request.wuttaweb_registered_components), 1)
|
|
|
|
self.assertIn("foo-example", self.request.wuttaweb_registered_components)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertEqual(
|
2025-09-01 10:32:22 -05:00
|
|
|
self.request.wuttaweb_registered_components["foo-example"], "FooExample"
|
2025-08-31 12:26:43 -05:00
|
|
|
)
|
2025-06-29 09:16:44 -05:00
|
|
|
|
2024-08-05 14:21:54 -05:00
|
|
|
def test_get_referrer(self):
|
|
|
|
event = MagicMock(request=self.request)
|
|
|
|
|
|
|
|
def home(request):
|
|
|
|
pass
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
self.pyramid_config.add_route("home", "/")
|
|
|
|
self.pyramid_config.add_view(home, route_name="home")
|
2024-08-05 14:21:54 -05:00
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(hasattr(self.request, "get_referrer"))
|
2024-08-05 14:21:54 -05:00
|
|
|
subscribers.new_request(event)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertTrue(hasattr(self.request, "get_referrer"))
|
2024-08-05 14:21:54 -05:00
|
|
|
|
|
|
|
# default if no referrer, is home route
|
|
|
|
url = self.request.get_referrer()
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertEqual(url, self.request.route_url("home"))
|
2024-08-05 14:21:54 -05:00
|
|
|
|
|
|
|
# can specify another default
|
2025-08-31 12:26:43 -05:00
|
|
|
url = self.request.get_referrer(default="https://wuttaproject.org")
|
|
|
|
self.assertEqual(url, "https://wuttaproject.org")
|
2024-08-05 14:21:54 -05:00
|
|
|
|
|
|
|
# or referrer can come from user session
|
2025-08-31 12:26:43 -05:00
|
|
|
self.request.session["referrer"] = "https://rattailproject.org"
|
|
|
|
self.assertIn("referrer", self.request.session)
|
2024-08-05 14:21:54 -05:00
|
|
|
url = self.request.get_referrer()
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertEqual(url, "https://rattailproject.org")
|
2024-08-05 14:21:54 -05:00
|
|
|
# nb. referrer should also have been removed from user session
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertNotIn("referrer", self.request.session)
|
2024-08-05 14:21:54 -05:00
|
|
|
|
|
|
|
# or referrer can come from request params
|
2025-08-31 12:26:43 -05:00
|
|
|
self.request.params["referrer"] = "https://kernel.org"
|
2024-08-05 14:21:54 -05:00
|
|
|
url = self.request.get_referrer()
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertEqual(url, "https://kernel.org")
|
2024-07-12 00:17:15 -05:00
|
|
|
|
|
|
|
|
|
|
|
def custom_oruga_detector(request):
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
2024-08-04 23:09:29 -05:00
|
|
|
class TestNewRequestSetUser(TestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
2025-08-31 12:26:43 -05:00
|
|
|
self.config = WuttaConfig(
|
|
|
|
defaults={
|
|
|
|
"wutta.db.default.url": "sqlite://",
|
|
|
|
}
|
|
|
|
)
|
2024-08-04 23:09:29 -05:00
|
|
|
|
2024-08-05 15:06:55 -05:00
|
|
|
self.request = testing.DummyRequest(wutta_config=self.config)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.pyramid_config = testing.setUp(
|
|
|
|
request=self.request,
|
|
|
|
settings={
|
|
|
|
"wutta_config": self.config,
|
|
|
|
},
|
|
|
|
)
|
2024-08-04 23:09:29 -05:00
|
|
|
|
|
|
|
self.app = self.config.get_app()
|
|
|
|
model = self.app.model
|
|
|
|
model.Base.metadata.create_all(bind=self.config.appdb_engine)
|
|
|
|
self.session = self.app.make_session()
|
2025-08-31 12:26:43 -05:00
|
|
|
self.user = model.User(username="barney")
|
2024-08-04 23:09:29 -05:00
|
|
|
self.session.add(self.user)
|
|
|
|
self.session.commit()
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
self.pyramid_config.set_security_policy(
|
|
|
|
WuttaSecurityPolicy(db_session=self.session)
|
|
|
|
)
|
2024-08-04 23:09:29 -05:00
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
testing.tearDown()
|
|
|
|
|
|
|
|
def test_anonymous(self):
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(hasattr(self.request, "user"))
|
2024-08-04 23:09:29 -05:00
|
|
|
event = MagicMock(request=self.request)
|
|
|
|
subscribers.new_request_set_user(event)
|
|
|
|
self.assertIsNone(self.request.user)
|
|
|
|
|
|
|
|
def test_authenticated(self):
|
|
|
|
uuid = self.user.uuid
|
|
|
|
self.assertIsNotNone(uuid)
|
|
|
|
remember(self.request, uuid)
|
|
|
|
event = MagicMock(request=self.request)
|
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
|
|
|
self.assertIs(self.request.user, self.user)
|
|
|
|
|
2024-08-05 14:21:54 -05:00
|
|
|
def test_is_admin(self):
|
|
|
|
event = MagicMock(request=self.request)
|
|
|
|
|
|
|
|
# anonymous user
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(hasattr(self.request, "user"))
|
|
|
|
self.assertFalse(hasattr(self.request, "is_admin"))
|
2024-08-05 14:21:54 -05:00
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
|
|
|
self.assertIsNone(self.request.user)
|
|
|
|
self.assertFalse(self.request.is_admin)
|
|
|
|
|
|
|
|
# reset
|
|
|
|
del self.request.is_admin
|
|
|
|
|
|
|
|
# authenticated user, but still not an admin
|
|
|
|
self.request.user = self.user
|
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
|
|
|
self.assertIs(self.request.user, self.user)
|
|
|
|
self.assertFalse(self.request.is_admin)
|
|
|
|
|
|
|
|
# reset
|
|
|
|
del self.request.is_admin
|
|
|
|
|
|
|
|
# but if we make them an admin, it changes
|
|
|
|
auth = self.app.get_auth_handler()
|
|
|
|
admin = auth.get_role_administrator(self.session)
|
|
|
|
self.user.roles.append(admin)
|
|
|
|
self.session.commit()
|
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
|
|
|
self.assertIs(self.request.user, self.user)
|
|
|
|
self.assertTrue(self.request.is_admin)
|
|
|
|
|
|
|
|
def test_is_root(self):
|
|
|
|
event = MagicMock(request=self.request)
|
|
|
|
|
|
|
|
# anonymous user
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(hasattr(self.request, "user"))
|
|
|
|
self.assertFalse(hasattr(self.request, "is_root"))
|
2024-08-05 14:21:54 -05:00
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
|
|
|
self.assertIsNone(self.request.user)
|
|
|
|
self.assertFalse(self.request.is_root)
|
|
|
|
|
|
|
|
# reset
|
|
|
|
del self.request.is_admin
|
|
|
|
del self.request.is_root
|
|
|
|
|
|
|
|
# authenticated user, but still not an admin
|
|
|
|
self.request.user = self.user
|
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
|
|
|
self.assertIs(self.request.user, self.user)
|
|
|
|
self.assertFalse(self.request.is_root)
|
|
|
|
|
|
|
|
# reset
|
|
|
|
del self.request.is_admin
|
|
|
|
del self.request.is_root
|
|
|
|
|
|
|
|
# even if we make them an admin, still not yet root
|
|
|
|
auth = self.app.get_auth_handler()
|
|
|
|
admin = auth.get_role_administrator(self.session)
|
|
|
|
self.user.roles.append(admin)
|
|
|
|
self.session.commit()
|
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
|
|
|
self.assertIs(self.request.user, self.user)
|
|
|
|
self.assertTrue(self.request.is_admin)
|
|
|
|
self.assertFalse(self.request.is_root)
|
|
|
|
|
|
|
|
# reset
|
|
|
|
del self.request.is_admin
|
|
|
|
del self.request.is_root
|
|
|
|
|
|
|
|
# root status flag lives in user session
|
2025-08-31 12:26:43 -05:00
|
|
|
self.request.session["is_root"] = True
|
2024-08-05 14:21:54 -05:00
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
|
|
|
self.assertTrue(self.request.is_admin)
|
|
|
|
self.assertTrue(self.request.is_root)
|
|
|
|
|
2024-08-14 21:20:00 -05:00
|
|
|
def test_user_permissions(self):
|
|
|
|
model = self.app.model
|
|
|
|
auth = self.app.get_auth_handler()
|
|
|
|
event = MagicMock(request=self.request)
|
|
|
|
|
|
|
|
# anonymous user
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(hasattr(self.request, "user_permissions"))
|
2024-08-14 21:20:00 -05:00
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
|
|
|
self.assertEqual(self.request.user_permissions, set())
|
|
|
|
|
|
|
|
# reset
|
|
|
|
del self.request.user_permissions
|
|
|
|
|
|
|
|
# add user to role with perms
|
|
|
|
blokes = model.Role(name="Blokes")
|
|
|
|
self.session.add(blokes)
|
2025-08-31 12:26:43 -05:00
|
|
|
auth.grant_permission(blokes, "appinfo.list")
|
2024-08-14 21:20:00 -05:00
|
|
|
self.user.roles.append(blokes)
|
|
|
|
self.session.commit()
|
|
|
|
|
|
|
|
# authenticated user, with perms
|
|
|
|
self.request.user = self.user
|
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertEqual(self.request.user_permissions, {"appinfo.list"})
|
2024-08-14 21:20:00 -05:00
|
|
|
|
|
|
|
def test_has_perm(self):
|
|
|
|
model = self.app.model
|
|
|
|
auth = self.app.get_auth_handler()
|
|
|
|
event = MagicMock(request=self.request)
|
|
|
|
|
|
|
|
# anonymous user
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(hasattr(self.request, "has_perm"))
|
2024-08-14 21:20:00 -05:00
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(self.request.has_perm("appinfo.list"))
|
2024-08-14 21:20:00 -05:00
|
|
|
|
|
|
|
# reset
|
|
|
|
del self.request.user_permissions
|
|
|
|
del self.request.has_perm
|
|
|
|
del self.request.has_any_perm
|
|
|
|
|
|
|
|
# add user to role with perms
|
|
|
|
blokes = model.Role(name="Blokes")
|
|
|
|
self.session.add(blokes)
|
2025-08-31 12:26:43 -05:00
|
|
|
auth.grant_permission(blokes, "appinfo.list")
|
2024-08-14 21:20:00 -05:00
|
|
|
self.user.roles.append(blokes)
|
|
|
|
self.session.commit()
|
|
|
|
|
|
|
|
# authenticated user, with perms
|
|
|
|
self.request.user = self.user
|
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertTrue(self.request.has_perm("appinfo.list"))
|
2024-08-14 21:20:00 -05:00
|
|
|
|
|
|
|
# reset
|
|
|
|
del self.request.user_permissions
|
|
|
|
del self.request.has_perm
|
|
|
|
del self.request.has_any_perm
|
|
|
|
|
|
|
|
# drop user from role, no more perms
|
|
|
|
self.user.roles.remove(blokes)
|
|
|
|
self.session.commit()
|
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(self.request.has_perm("appinfo.list"))
|
2024-08-14 21:20:00 -05:00
|
|
|
|
|
|
|
# reset
|
|
|
|
del self.request.user_permissions
|
|
|
|
del self.request.has_perm
|
|
|
|
del self.request.has_any_perm
|
|
|
|
del self.request.is_admin
|
|
|
|
del self.request.is_root
|
|
|
|
|
|
|
|
# root user always has perms
|
|
|
|
admin = auth.get_role_administrator(self.session)
|
|
|
|
self.user.roles.append(admin)
|
|
|
|
self.session.commit()
|
2025-08-31 12:26:43 -05:00
|
|
|
self.request.session["is_root"] = True
|
2024-08-14 21:20:00 -05:00
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertTrue(self.request.has_perm("appinfo.list"))
|
2024-08-14 21:20:00 -05:00
|
|
|
|
|
|
|
def test_has_any_perm(self):
|
|
|
|
model = self.app.model
|
|
|
|
auth = self.app.get_auth_handler()
|
|
|
|
event = MagicMock(request=self.request)
|
|
|
|
|
|
|
|
# anonymous user
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(hasattr(self.request, "has_any_perm"))
|
2024-08-14 21:20:00 -05:00
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(self.request.has_any_perm("appinfo.list"))
|
2024-08-14 21:20:00 -05:00
|
|
|
|
|
|
|
# reset
|
|
|
|
del self.request.user_permissions
|
|
|
|
del self.request.has_perm
|
|
|
|
del self.request.has_any_perm
|
|
|
|
|
|
|
|
# add user to role with perms
|
|
|
|
blokes = model.Role(name="Blokes")
|
|
|
|
self.session.add(blokes)
|
2025-08-31 12:26:43 -05:00
|
|
|
auth.grant_permission(blokes, "appinfo.list")
|
2024-08-14 21:20:00 -05:00
|
|
|
self.user.roles.append(blokes)
|
|
|
|
self.session.commit()
|
|
|
|
|
|
|
|
# authenticated user, with perms
|
|
|
|
self.request.user = self.user
|
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertTrue(self.request.has_any_perm("appinfo.list", "appinfo.view"))
|
2024-08-14 21:20:00 -05:00
|
|
|
|
|
|
|
# reset
|
|
|
|
del self.request.user_permissions
|
|
|
|
del self.request.has_perm
|
|
|
|
del self.request.has_any_perm
|
|
|
|
|
|
|
|
# drop user from role, no more perms
|
|
|
|
self.user.roles.remove(blokes)
|
|
|
|
self.session.commit()
|
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertFalse(self.request.has_any_perm("appinfo.list"))
|
2024-08-14 21:20:00 -05:00
|
|
|
|
|
|
|
# reset
|
|
|
|
del self.request.user_permissions
|
|
|
|
del self.request.has_perm
|
|
|
|
del self.request.has_any_perm
|
|
|
|
del self.request.is_admin
|
|
|
|
del self.request.is_root
|
|
|
|
|
|
|
|
# root user always has perms
|
|
|
|
admin = auth.get_role_administrator(self.session)
|
|
|
|
self.user.roles.append(admin)
|
|
|
|
self.session.commit()
|
2025-08-31 12:26:43 -05:00
|
|
|
self.request.session["is_root"] = True
|
2024-08-14 21:20:00 -05:00
|
|
|
subscribers.new_request_set_user(event, db_session=self.session)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertTrue(self.request.has_any_perm("appinfo.list"))
|
2024-08-14 21:20:00 -05:00
|
|
|
|
2024-08-04 23:09:29 -05:00
|
|
|
|
2024-07-12 00:17:15 -05:00
|
|
|
class TestBeforeRender(TestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
2025-08-31 12:26:43 -05:00
|
|
|
self.config = WuttaConfig(
|
|
|
|
defaults={
|
|
|
|
"wutta.web.menus.handler.spec": "tests.util:NullMenuHandler",
|
|
|
|
}
|
|
|
|
)
|
2024-07-12 00:17:15 -05:00
|
|
|
|
|
|
|
def make_request(self):
|
2024-08-05 21:49:18 -05:00
|
|
|
request = testing.DummyRequest(use_oruga=False)
|
2025-08-31 12:26:43 -05:00
|
|
|
request.registry.settings = {"wutta_config": self.config}
|
2024-07-12 00:17:15 -05:00
|
|
|
request.wutta_config = self.config
|
|
|
|
return request
|
|
|
|
|
|
|
|
def test_basic(self):
|
|
|
|
request = self.make_request()
|
2025-08-31 12:26:43 -05:00
|
|
|
event = {"request": request}
|
2024-07-12 00:17:15 -05:00
|
|
|
|
|
|
|
# event dict will get populated with more context
|
|
|
|
subscribers.before_render(event)
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertIn("config", event)
|
|
|
|
self.assertIs(event["config"], self.config)
|
2024-07-12 00:17:15 -05:00
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertIn("app", event)
|
|
|
|
self.assertIs(event["app"], self.config.get_app())
|
2024-07-12 00:17:15 -05:00
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertIn("h", event)
|
|
|
|
self.assertIs(event["h"], helpers)
|
2024-07-12 00:17:15 -05:00
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertIn("url", event)
|
2024-07-12 00:17:15 -05:00
|
|
|
# TODO: not sure how to test this?
|
|
|
|
# self.assertIs(event['url'], request.route_url)
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertIn("json", event)
|
|
|
|
self.assertIs(event["json"], json)
|
2024-07-12 00:17:15 -05:00
|
|
|
|
2025-06-29 09:16:44 -05:00
|
|
|
# current theme should be 'default' and picker not exposed
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertEqual(event["theme"], "default")
|
|
|
|
self.assertFalse(event["expose_theme_picker"])
|
|
|
|
self.assertNotIn("available_themes", event)
|
2025-06-29 09:16:44 -05:00
|
|
|
|
|
|
|
def test_custom_theme(self):
|
2025-08-31 12:26:43 -05:00
|
|
|
self.config.setdefault("wuttaweb.themes.expose_picker", "true")
|
2025-06-29 09:16:44 -05:00
|
|
|
request = self.make_request()
|
2025-08-31 12:26:43 -05:00
|
|
|
request.registry.settings["wuttaweb.theme"] = "butterfly"
|
|
|
|
event = {"request": request}
|
2025-06-29 09:16:44 -05:00
|
|
|
|
|
|
|
# event dict will get populated with more context
|
|
|
|
subscribers.before_render(event)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertEqual(event["theme"], "butterfly")
|
|
|
|
self.assertTrue(event["expose_theme_picker"])
|
|
|
|
self.assertIn("available_themes", event)
|
|
|
|
self.assertEqual(event["available_themes"], ["default", "butterfly"])
|
2025-06-29 09:16:44 -05:00
|
|
|
|
2024-07-12 00:17:15 -05:00
|
|
|
|
|
|
|
class TestIncludeMe(TestCase):
|
|
|
|
|
|
|
|
def test_basic(self):
|
|
|
|
with testing.testConfig() as pyramid_config:
|
|
|
|
|
|
|
|
# just ensure no error happens when included..
|
2025-08-31 12:26:43 -05:00
|
|
|
pyramid_config.include("wuttaweb.subscribers")
|