| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | # -*- coding: utf-8; -*- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-14 23:56:36 -06:00
										 |  |  | import decimal | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  | import json | 
					
						
							| 
									
										
										
										
											2024-12-10 12:15:00 -06:00
										 |  |  | import uuid as _uuid | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | from unittest import TestCase | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | from unittest.mock import patch, MagicMock | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  | import colander | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | from fanstatic import Library, Resource | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | from pyramid import testing | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from wuttjamaican.conf import WuttaConfig | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | from wuttjamaican.testing import ConfigTestCase, DataTestCase | 
					
						
							|  |  |  | from wuttjamaican.util import resource_path | 
					
						
							| 
									
										
										
										
											2024-12-28 18:56:04 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  | from wuttaweb import util as mod | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | from wuttaweb.app import establish_theme | 
					
						
							| 
									
										
										
										
											2025-09-01 13:31:33 -05:00
										 |  |  | from wuttaweb.grids import Grid | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | from wuttaweb.testing import WebTestCase | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  | class TestFieldList(TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_insert_before(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         fields = mod.FieldList(["f1", "f2"]) | 
					
						
							|  |  |  |         self.assertEqual(fields, ["f1", "f2"]) | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # typical | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         fields.insert_before("f1", "XXX") | 
					
						
							|  |  |  |         self.assertEqual(fields, ["XXX", "f1", "f2"]) | 
					
						
							|  |  |  |         fields.insert_before("f2", "YYY") | 
					
						
							|  |  |  |         self.assertEqual(fields, ["XXX", "f1", "YYY", "f2"]) | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # appends new field if reference field is invalid | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         fields.insert_before("f3", "ZZZ") | 
					
						
							|  |  |  |         self.assertEqual(fields, ["XXX", "f1", "YYY", "f2", "ZZZ"]) | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_insert_after(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         fields = mod.FieldList(["f1", "f2"]) | 
					
						
							|  |  |  |         self.assertEqual(fields, ["f1", "f2"]) | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # typical | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         fields.insert_after("f1", "XXX") | 
					
						
							|  |  |  |         self.assertEqual(fields, ["f1", "XXX", "f2"]) | 
					
						
							|  |  |  |         fields.insert_after("XXX", "YYY") | 
					
						
							|  |  |  |         self.assertEqual(fields, ["f1", "XXX", "YYY", "f2"]) | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # appends new field if reference field is invalid | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         fields.insert_after("f3", "ZZZ") | 
					
						
							|  |  |  |         self.assertEqual(fields, ["f1", "XXX", "YYY", "f2", "ZZZ"]) | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |     def test_set_sequence(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         fields = mod.FieldList(["f5", "f1", "f3", "f4", "f2"]) | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # setting sequence will only "sort" for explicit fields. | 
					
						
							|  |  |  |         # other fields remain in original order, but at the end. | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         fields.set_sequence(["f1", "f2", "f3"]) | 
					
						
							|  |  |  |         self.assertEqual(fields, ["f1", "f2", "f3", "f5", "f4"]) | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | class TestGetLibVer(TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.config = WuttaConfig() | 
					
						
							|  |  |  |         self.request = testing.DummyRequest() | 
					
						
							|  |  |  |         self.request.wutta_config = self.config | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_buefy_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "buefy") | 
					
						
							|  |  |  |         self.assertEqual(version, "0.9.25") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_buefy_custom_old(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.buefy_version", "0.9.29") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "buefy") | 
					
						
							|  |  |  |         self.assertEqual(version, "0.9.29") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-15 23:03:39 -05:00
										 |  |  |     def test_buefy_custom_old_tailbone(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("tailbone.libver.buefy", "0.9.28") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "buefy", prefix="tailbone") | 
					
						
							|  |  |  |         self.assertEqual(version, "0.9.28") | 
					
						
							| 
									
										
										
										
											2024-08-15 23:03:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_buefy_custom_new(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.buefy", "0.9.29") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "buefy") | 
					
						
							|  |  |  |         self.assertEqual(version, "0.9.29") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 19:59:30 -05:00
										 |  |  |     def test_buefy_configured_only(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "buefy", configured_only=True) | 
					
						
							| 
									
										
										
										
											2024-08-06 19:59:30 -05:00
										 |  |  |         self.assertIsNone(version) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_buefy_default_only(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.buefy", "0.9.29") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "buefy", default_only=True) | 
					
						
							|  |  |  |         self.assertEqual(version, "0.9.25") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_buefy_css_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "buefy.css") | 
					
						
							|  |  |  |         self.assertEqual(version, "0.9.25") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_buefy_css_custom_old(self): | 
					
						
							|  |  |  |         # nb. this uses same setting as buefy (js) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.buefy_version", "0.9.29") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "buefy.css") | 
					
						
							|  |  |  |         self.assertEqual(version, "0.9.29") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_buefy_css_custom_new(self): | 
					
						
							|  |  |  |         # nb. this uses same setting as buefy (js) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.buefy", "0.9.29") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "buefy.css") | 
					
						
							|  |  |  |         self.assertEqual(version, "0.9.29") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 19:59:30 -05:00
										 |  |  |     def test_buefy_css_configured_only(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "buefy.css", configured_only=True) | 
					
						
							| 
									
										
										
										
											2024-08-06 19:59:30 -05:00
										 |  |  |         self.assertIsNone(version) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_buefy_css_default_only(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.buefy", "0.9.29") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "buefy.css", default_only=True) | 
					
						
							|  |  |  |         self.assertEqual(version, "0.9.25") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_vue_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "vue") | 
					
						
							|  |  |  |         self.assertEqual(version, "2.6.14") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_vue_custom_old(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.vue_version", "3.4.31") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "vue") | 
					
						
							|  |  |  |         self.assertEqual(version, "3.4.31") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_vue_custom_new(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.vue", "3.4.31") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "vue") | 
					
						
							|  |  |  |         self.assertEqual(version, "3.4.31") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 19:59:30 -05:00
										 |  |  |     def test_vue_configured_only(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "vue", configured_only=True) | 
					
						
							| 
									
										
										
										
											2024-08-06 19:59:30 -05:00
										 |  |  |         self.assertIsNone(version) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_vue_default_only(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.vue", "3.4.31") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "vue", default_only=True) | 
					
						
							|  |  |  |         self.assertEqual(version, "2.6.14") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_vue_resource_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "vue_resource") | 
					
						
							|  |  |  |         self.assertEqual(version, "1.5.3") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_vue_resource_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.vue_resource", "1.5.3") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "vue_resource") | 
					
						
							|  |  |  |         self.assertEqual(version, "1.5.3") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_fontawesome_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "fontawesome") | 
					
						
							|  |  |  |         self.assertEqual(version, "5.3.1") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_fontawesome_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.fontawesome", "5.6.3") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "fontawesome") | 
					
						
							|  |  |  |         self.assertEqual(version, "5.6.3") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_vue_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "bb_vue") | 
					
						
							|  |  |  |         self.assertEqual(version, "3.5.18") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_vue_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.bb_vue", "3.4.30") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "bb_vue") | 
					
						
							|  |  |  |         self.assertEqual(version, "3.4.30") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_oruga_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "bb_oruga") | 
					
						
							|  |  |  |         self.assertEqual(version, "0.11.4") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_oruga_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.bb_oruga", "0.8.11") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "bb_oruga") | 
					
						
							|  |  |  |         self.assertEqual(version, "0.8.11") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_oruga_bulma_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "bb_oruga_bulma") | 
					
						
							|  |  |  |         self.assertEqual(version, "0.7.3") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "bb_oruga_bulma_css") | 
					
						
							|  |  |  |         self.assertEqual(version, "0.7.3") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_oruga_bulma_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.bb_oruga_bulma", "0.2.11") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "bb_oruga_bulma") | 
					
						
							|  |  |  |         self.assertEqual(version, "0.2.11") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_fontawesome_svg_core_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "bb_fontawesome_svg_core") | 
					
						
							|  |  |  |         self.assertEqual(version, "7.0.0") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_fontawesome_svg_core_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.bb_fontawesome_svg_core", "6.5.1") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "bb_fontawesome_svg_core") | 
					
						
							|  |  |  |         self.assertEqual(version, "6.5.1") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_free_solid_svg_icons_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "bb_free_solid_svg_icons") | 
					
						
							|  |  |  |         self.assertEqual(version, "7.0.0") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_free_solid_svg_icons_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.bb_free_solid_svg_icons", "6.5.1") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "bb_free_solid_svg_icons") | 
					
						
							|  |  |  |         self.assertEqual(version, "6.5.1") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_vue_fontawesome_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         version = mod.get_libver(self.request, "bb_vue_fontawesome") | 
					
						
							|  |  |  |         self.assertEqual(version, "3.1.1") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_vue_fontawesome_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.libver.bb_vue_fontawesome", "3.0.8") | 
					
						
							|  |  |  |         version = mod.get_libver(self.request, "bb_vue_fontawesome") | 
					
						
							|  |  |  |         self.assertEqual(version, "3.0.8") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | libcache = Library("testing", "libcache") | 
					
						
							|  |  |  | vue_js = Resource(libcache, "vue.js") | 
					
						
							|  |  |  | vue_resource_js = Resource(libcache, "vue_resource.js") | 
					
						
							|  |  |  | buefy_js = Resource(libcache, "buefy.js") | 
					
						
							|  |  |  | buefy_css = Resource(libcache, "buefy.css") | 
					
						
							|  |  |  | fontawesome_js = Resource(libcache, "fontawesome.js") | 
					
						
							|  |  |  | bb_vue_js = Resource(libcache, "bb_vue.js") | 
					
						
							|  |  |  | bb_oruga_js = Resource(libcache, "bb_oruga.js") | 
					
						
							|  |  |  | bb_oruga_bulma_js = Resource(libcache, "bb_oruga_bulma.js") | 
					
						
							|  |  |  | bb_oruga_bulma_css = Resource(libcache, "bb_oruga_bulma.css") | 
					
						
							|  |  |  | bb_fontawesome_svg_core_js = Resource(libcache, "bb_fontawesome_svg_core.js") | 
					
						
							|  |  |  | bb_free_solid_svg_icons_js = Resource(libcache, "bb_free_solid_svg_icons.js") | 
					
						
							|  |  |  | bb_vue_fontawesome_js = Resource(libcache, "bb_vue_fontawesome.js") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | class TestGetLibUrl(TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.config = WuttaConfig() | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  |         self.request = testing.DummyRequest(wutta_config=self.config) | 
					
						
							|  |  |  |         self.pyramid_config = testing.setUp(request=self.request) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							|  |  |  |         testing.tearDown() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-15 23:03:39 -05:00
										 |  |  |     def setup_fanstatic(self, register=True): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.pyramid_config.include("pyramid_fanstatic") | 
					
						
							| 
									
										
										
										
											2024-08-15 23:03:39 -05:00
										 |  |  |         if register: | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |             self.config.setdefault("wuttaweb.static_libcache.module", "tests.test_util") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         needed = MagicMock() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         needed.library_url = MagicMock(return_value="/fanstatic") | 
					
						
							|  |  |  |         self.request.environ["fanstatic.needed"] = needed | 
					
						
							|  |  |  |         self.request.script_name = "/wutta" | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-31 19:57:26 -05:00
										 |  |  |     def test_unknown(self): | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "unknown") | 
					
						
							|  |  |  |         self.assertIsNone(url) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_buefy_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "buefy") | 
					
						
							|  |  |  |         self.assertEqual(url, "https://unpkg.com/buefy@0.9.25/dist/buefy.min.js") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_buefy_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.liburl.buefy", "/lib/buefy.js") | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "buefy") | 
					
						
							|  |  |  |         self.assertEqual(url, "/lib/buefy.js") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-15 23:03:39 -05:00
										 |  |  |     def test_buefy_custom_tailbone(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("tailbone.liburl.buefy", "/tailbone/buefy.js") | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "buefy", prefix="tailbone") | 
					
						
							|  |  |  |         self.assertEqual(url, "/tailbone/buefy.js") | 
					
						
							| 
									
										
										
										
											2024-08-15 23:03:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 19:59:30 -05:00
										 |  |  |     def test_buefy_default_only(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.liburl.buefy", "/lib/buefy.js") | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "buefy", default_only=True) | 
					
						
							|  |  |  |         self.assertEqual(url, "https://unpkg.com/buefy@0.9.25/dist/buefy.min.js") | 
					
						
							| 
									
										
										
										
											2024-08-06 19:59:30 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_buefy_configured_only(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "buefy", configured_only=True) | 
					
						
							| 
									
										
										
										
											2024-08-06 19:59:30 -05:00
										 |  |  |         self.assertIsNone(url) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  |     def test_buefy_fanstatic(self): | 
					
						
							|  |  |  |         self.setup_fanstatic() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "buefy") | 
					
						
							|  |  |  |         self.assertEqual(url, "/wutta/fanstatic/buefy.js") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-15 23:03:39 -05:00
										 |  |  |     def test_buefy_fanstatic_tailbone(self): | 
					
						
							|  |  |  |         self.setup_fanstatic(register=False) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("tailbone.static_libcache.module", "tests.test_util") | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "buefy", prefix="tailbone") | 
					
						
							|  |  |  |         self.assertEqual(url, "/wutta/fanstatic/buefy.js") | 
					
						
							| 
									
										
										
										
											2024-08-15 23:03:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_buefy_css_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "buefy.css") | 
					
						
							|  |  |  |         self.assertEqual(url, "https://unpkg.com/buefy@0.9.25/dist/buefy.min.css") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_buefy_css_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.liburl.buefy.css", "/lib/buefy.css") | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "buefy.css") | 
					
						
							|  |  |  |         self.assertEqual(url, "/lib/buefy.css") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  |     def test_buefy_css_fanstatic(self): | 
					
						
							|  |  |  |         self.setup_fanstatic() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "buefy.css") | 
					
						
							|  |  |  |         self.assertEqual(url, "/wutta/fanstatic/buefy.css") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_vue_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "vue") | 
					
						
							|  |  |  |         self.assertEqual(url, "https://unpkg.com/vue@2.6.14/dist/vue.min.js") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_vue_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.liburl.vue", "/lib/vue.js") | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "vue") | 
					
						
							|  |  |  |         self.assertEqual(url, "/lib/vue.js") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  |     def test_vue_fanstatic(self): | 
					
						
							|  |  |  |         self.setup_fanstatic() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "vue") | 
					
						
							|  |  |  |         self.assertEqual(url, "/wutta/fanstatic/vue.js") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_vue_resource_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "vue_resource") | 
					
						
							|  |  |  |         self.assertEqual(url, "https://cdn.jsdelivr.net/npm/vue-resource@1.5.3") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_vue_resource_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.liburl.vue_resource", "/lib/vue-resource.js") | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "vue_resource") | 
					
						
							|  |  |  |         self.assertEqual(url, "/lib/vue-resource.js") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  |     def test_vue_resource_fanstatic(self): | 
					
						
							|  |  |  |         self.setup_fanstatic() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "vue_resource") | 
					
						
							|  |  |  |         self.assertEqual(url, "/wutta/fanstatic/vue_resource.js") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_fontawesome_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "fontawesome") | 
					
						
							|  |  |  |         self.assertEqual(url, "https://use.fontawesome.com/releases/v5.3.1/js/all.js") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_fontawesome_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.liburl.fontawesome", "/lib/fontawesome.js") | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "fontawesome") | 
					
						
							|  |  |  |         self.assertEqual(url, "/lib/fontawesome.js") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  |     def test_fontawesome_fanstatic(self): | 
					
						
							|  |  |  |         self.setup_fanstatic() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "fontawesome") | 
					
						
							|  |  |  |         self.assertEqual(url, "/wutta/fanstatic/fontawesome.js") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_bb_vue_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_vue") | 
					
						
							|  |  |  |         self.assertEqual( | 
					
						
							|  |  |  |             url, "https://unpkg.com/vue@3.5.18/dist/vue.esm-browser.prod.js" | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_vue_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.liburl.bb_vue", "/lib/vue.js") | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "bb_vue") | 
					
						
							|  |  |  |         self.assertEqual(url, "/lib/vue.js") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  |     def test_bb_vue_fanstatic(self): | 
					
						
							|  |  |  |         self.setup_fanstatic() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_vue") | 
					
						
							|  |  |  |         self.assertEqual(url, "/wutta/fanstatic/bb_vue.js") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_bb_oruga_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_oruga") | 
					
						
							|  |  |  |         self.assertEqual( | 
					
						
							|  |  |  |             url, "https://unpkg.com/@oruga-ui/oruga-next@0.11.4/dist/oruga.mjs" | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_oruga_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.liburl.bb_oruga", "/lib/oruga.js") | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "bb_oruga") | 
					
						
							|  |  |  |         self.assertEqual(url, "/lib/oruga.js") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  |     def test_bb_oruga_fanstatic(self): | 
					
						
							|  |  |  |         self.setup_fanstatic() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_oruga") | 
					
						
							|  |  |  |         self.assertEqual(url, "/wutta/fanstatic/bb_oruga.js") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_bb_oruga_bulma_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_oruga_bulma") | 
					
						
							|  |  |  |         self.assertEqual( | 
					
						
							|  |  |  |             url, "https://unpkg.com/@oruga-ui/theme-bulma@0.7.3/dist/bulma.js" | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_oruga_bulma_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.liburl.bb_oruga_bulma", "/lib/oruga_bulma.js") | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "bb_oruga_bulma") | 
					
						
							|  |  |  |         self.assertEqual(url, "/lib/oruga_bulma.js") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  |     def test_bb_oruga_bulma_fanstatic(self): | 
					
						
							|  |  |  |         self.setup_fanstatic() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_oruga_bulma") | 
					
						
							|  |  |  |         self.assertEqual(url, "/wutta/fanstatic/bb_oruga_bulma.js") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_bb_oruga_bulma_css_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_oruga_bulma_css") | 
					
						
							|  |  |  |         self.assertEqual( | 
					
						
							|  |  |  |             url, "https://unpkg.com/@oruga-ui/theme-bulma@0.7.3/dist/bulma.css" | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_oruga_bulma_css_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault( | 
					
						
							|  |  |  |             "wuttaweb.liburl.bb_oruga_bulma_css", "/lib/oruga-bulma.css" | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "bb_oruga_bulma_css") | 
					
						
							|  |  |  |         self.assertEqual(url, "/lib/oruga-bulma.css") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  |     def test_bb_oruga_bulma_css_fanstatic(self): | 
					
						
							|  |  |  |         self.setup_fanstatic() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_oruga_bulma_css") | 
					
						
							|  |  |  |         self.assertEqual(url, "/wutta/fanstatic/bb_oruga_bulma.css") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_bb_fontawesome_svg_core_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_fontawesome_svg_core") | 
					
						
							|  |  |  |         self.assertEqual( | 
					
						
							|  |  |  |             url, | 
					
						
							|  |  |  |             "https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-svg-core@7.0.0/+esm", | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_fontawesome_svg_core_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault( | 
					
						
							|  |  |  |             "wuttaweb.liburl.bb_fontawesome_svg_core", "/lib/fontawesome-svg-core.js" | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "bb_fontawesome_svg_core") | 
					
						
							|  |  |  |         self.assertEqual(url, "/lib/fontawesome-svg-core.js") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  |     def test_bb_fontawesome_svg_core_fanstatic(self): | 
					
						
							|  |  |  |         self.setup_fanstatic() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_fontawesome_svg_core") | 
					
						
							|  |  |  |         self.assertEqual(url, "/wutta/fanstatic/bb_fontawesome_svg_core.js") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_bb_free_solid_svg_icons_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_free_solid_svg_icons") | 
					
						
							|  |  |  |         self.assertEqual( | 
					
						
							|  |  |  |             url, | 
					
						
							|  |  |  |             "https://cdn.jsdelivr.net/npm/@fortawesome/free-solid-svg-icons@7.0.0/+esm", | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_free_solid_svg_icons_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault( | 
					
						
							|  |  |  |             "wuttaweb.liburl.bb_free_solid_svg_icons", "/lib/free-solid-svg-icons.js" | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "bb_free_solid_svg_icons") | 
					
						
							|  |  |  |         self.assertEqual(url, "/lib/free-solid-svg-icons.js") | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  |     def test_bb_free_solid_svg_icons_fanstatic(self): | 
					
						
							|  |  |  |         self.setup_fanstatic() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_free_solid_svg_icons") | 
					
						
							|  |  |  |         self.assertEqual(url, "/wutta/fanstatic/bb_free_solid_svg_icons.js") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  |     def test_bb_vue_fontawesome_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_vue_fontawesome") | 
					
						
							|  |  |  |         self.assertEqual( | 
					
						
							|  |  |  |             url, "https://cdn.jsdelivr.net/npm/@fortawesome/vue-fontawesome@3.1.1/+esm" | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-07-12 00:17:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_bb_vue_fontawesome_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault( | 
					
						
							|  |  |  |             "wuttaweb.liburl.bb_vue_fontawesome", "/lib/vue-fontawesome.js" | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         url = mod.get_liburl(self.request, "bb_vue_fontawesome") | 
					
						
							|  |  |  |         self.assertEqual(url, "/lib/vue-fontawesome.js") | 
					
						
							| 
									
										
										
										
											2024-08-04 14:55:32 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  |     def test_bb_vue_fontawesome_fanstatic(self): | 
					
						
							|  |  |  |         self.setup_fanstatic() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         url = mod.get_liburl(self.request, "bb_vue_fontawesome") | 
					
						
							|  |  |  |         self.assertEqual(url, "/wutta/fanstatic/bb_vue_fontawesome.js") | 
					
						
							| 
									
										
										
										
											2024-08-06 22:33:54 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-04 14:55:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | class TestGetFormData(TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.config = WuttaConfig() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def make_request(self, **kwargs): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         kwargs.setdefault("wutta_config", self.config) | 
					
						
							|  |  |  |         kwargs.setdefault("POST", {"foo1": "bar"}) | 
					
						
							|  |  |  |         kwargs.setdefault("json_body", {"foo2": "baz"}) | 
					
						
							| 
									
										
										
										
											2024-08-04 14:55:32 -05:00
										 |  |  |         return testing.DummyRequest(**kwargs) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_default(self): | 
					
						
							|  |  |  |         request = self.make_request() | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |         data = mod.get_form_data(request) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(data, {"foo1": "bar"}) | 
					
						
							| 
									
										
										
										
											2024-08-04 14:55:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_is_xhr(self): | 
					
						
							|  |  |  |         request = self.make_request(POST=None, is_xhr=True) | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |         data = mod.get_form_data(request) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(data, {"foo2": "baz"}) | 
					
						
							| 
									
										
										
										
											2024-08-04 14:55:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_content_type(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         request = self.make_request(POST=None, content_type="application/json") | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |         data = mod.get_form_data(request) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(data, {"foo2": "baz"}) | 
					
						
							| 
									
										
										
										
											2024-08-06 18:52:54 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-28 18:56:04 -06:00
										 |  |  | class TestGetModelFields(ConfigTestCase): | 
					
						
							| 
									
										
										
										
											2024-08-11 16:52:13 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-13 21:43:56 -05:00
										 |  |  |     def test_empty_model_class(self): | 
					
						
							| 
									
										
										
										
											2024-12-28 18:56:04 -06:00
										 |  |  |         fields = mod.get_model_fields(self.config, None) | 
					
						
							| 
									
										
										
										
											2024-08-13 21:43:56 -05:00
										 |  |  |         self.assertIsNone(fields) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_unknown_model_class(self): | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |         fields = mod.get_model_fields(self.config, TestCase) | 
					
						
							| 
									
										
										
										
											2024-08-13 21:43:56 -05:00
										 |  |  |         self.assertIsNone(fields) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-11 16:52:13 -05:00
										 |  |  |     def test_basic(self): | 
					
						
							|  |  |  |         model = self.app.model | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |         fields = mod.get_model_fields(self.config, model.Setting) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(fields, ["name", "value"]) | 
					
						
							| 
									
										
										
										
											2024-08-11 16:52:13 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-28 18:56:04 -06:00
										 |  |  |     def test_include_fk(self): | 
					
						
							|  |  |  |         model = self.app.model | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # fk excluded by default | 
					
						
							|  |  |  |         fields = mod.get_model_fields(self.config, model.User) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertNotIn("person_uuid", fields) | 
					
						
							|  |  |  |         self.assertIn("person", fields) | 
					
						
							| 
									
										
										
										
											2024-12-28 18:56:04 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # fk can be included | 
					
						
							|  |  |  |         fields = mod.get_model_fields(self.config, model.User, include_fk=True) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertIn("person_uuid", fields) | 
					
						
							|  |  |  |         self.assertIn("person", fields) | 
					
						
							| 
									
										
										
										
											2024-12-28 18:56:04 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-27 21:11:44 -05:00
										 |  |  |     def test_avoid_versions(self): | 
					
						
							|  |  |  |         model = self.app.model | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         mapper = MagicMock( | 
					
						
							|  |  |  |             iterate_properties=[ | 
					
						
							|  |  |  |                 MagicMock(key="uuid"), | 
					
						
							|  |  |  |                 MagicMock(key="full_name"), | 
					
						
							|  |  |  |                 MagicMock(key="first_name"), | 
					
						
							|  |  |  |                 MagicMock(key="middle_name"), | 
					
						
							|  |  |  |                 MagicMock(key="last_name"), | 
					
						
							|  |  |  |                 MagicMock(key="versions"), | 
					
						
							|  |  |  |             ] | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         with patch.object(mod, "sa") as sa: | 
					
						
							| 
									
										
										
										
											2024-08-27 21:11:44 -05:00
										 |  |  |             sa.inspect.return_value = mapper | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |             with patch.object(self.app, "continuum_is_enabled", return_value=True): | 
					
						
							| 
									
										
										
										
											2024-08-27 21:11:44 -05:00
										 |  |  |                 fields = mod.get_model_fields(self.config, model.Person) | 
					
						
							|  |  |  |                 # nb. no versions field | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |                 self.assertEqual( | 
					
						
							|  |  |  |                     set(fields), | 
					
						
							|  |  |  |                     set( | 
					
						
							|  |  |  |                         ["uuid", "full_name", "first_name", "middle_name", "last_name"] | 
					
						
							|  |  |  |                     ), | 
					
						
							|  |  |  |                 ) | 
					
						
							| 
									
										
										
										
											2024-08-27 21:11:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-11 16:52:13 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-06 18:52:54 -05:00
										 |  |  | class TestGetCsrfToken(TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.config = WuttaConfig() | 
					
						
							|  |  |  |         self.request = testing.DummyRequest(wutta_config=self.config) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_same_token(self): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # same token returned for same request | 
					
						
							|  |  |  |         # TODO: dummy request is always returning same token! | 
					
						
							|  |  |  |         # so this isn't really testing anything.. :( | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |         first = mod.get_csrf_token(self.request) | 
					
						
							| 
									
										
										
										
											2024-08-06 18:52:54 -05:00
										 |  |  |         self.assertIsNotNone(first) | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |         second = mod.get_csrf_token(self.request) | 
					
						
							| 
									
										
										
										
											2024-08-06 18:52:54 -05:00
										 |  |  |         self.assertEqual(first, second) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # TODO: ideally would make a new request here and confirm it | 
					
						
							|  |  |  |         # gets a different token, but see note above.. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_new_token(self): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # nb. dummy request always returns same token, so must | 
					
						
							|  |  |  |         # trick it into thinking it doesn't have one yet | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         with patch.object(self.request.session, "get_csrf_token", return_value=None): | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |             token = mod.get_csrf_token(self.request) | 
					
						
							| 
									
										
										
										
											2024-08-06 18:52:54 -05:00
										 |  |  |             self.assertIsNotNone(token) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestRenderCsrfToken(TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.config = WuttaConfig() | 
					
						
							|  |  |  |         self.request = testing.DummyRequest(wutta_config=self.config) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_basics(self): | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |         html = mod.render_csrf_token(self.request) | 
					
						
							| 
									
										
										
										
											2024-08-06 18:52:54 -05:00
										 |  |  |         self.assertIn('type="hidden"', html) | 
					
						
							|  |  |  |         self.assertIn('name="_csrf"', html) | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |         token = mod.get_csrf_token(self.request) | 
					
						
							| 
									
										
										
										
											2024-08-06 18:52:54 -05:00
										 |  |  |         self.assertIn(f'value="{token}"', html) | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestMakeJsonSafe(TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.config = WuttaConfig() | 
					
						
							|  |  |  |         self.app = self.config.get_app() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_null(self): | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |         value = mod.make_json_safe(colander.null) | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  |         self.assertIsNone(value) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |         value = mod.make_json_safe(None) | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  |         self.assertIsNone(value) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_invalid(self): | 
					
						
							|  |  |  |         model = self.app.model | 
					
						
							|  |  |  |         person = model.Person(full_name="Betty Boop") | 
					
						
							|  |  |  |         self.assertRaises(TypeError, json.dumps, person) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         value = mod.make_json_safe(person, key="person") | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  |         self.assertEqual(value, "Betty Boop") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-10 12:15:00 -06:00
										 |  |  |     def test_uuid(self): | 
					
						
							|  |  |  |         uuid = _uuid.uuid4() | 
					
						
							|  |  |  |         value = mod.make_json_safe(uuid) | 
					
						
							|  |  |  |         self.assertEqual(value, uuid.hex) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-14 23:56:36 -06:00
										 |  |  |     def test_decimal(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         value = decimal.Decimal("42.42") | 
					
						
							| 
									
										
										
										
											2024-12-14 23:56:36 -06:00
										 |  |  |         self.assertNotEqual(value, 42.42) | 
					
						
							|  |  |  |         result = mod.make_json_safe(value) | 
					
						
							|  |  |  |         self.assertEqual(result, 42.42) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  |     def test_dict(self): | 
					
						
							|  |  |  |         model = self.app.model | 
					
						
							|  |  |  |         person = model.Person(full_name="Betty Boop") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         data = { | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |             "foo": "bar", | 
					
						
							|  |  |  |             "person": person, | 
					
						
							| 
									
										
										
										
											2024-08-12 21:17:08 -05:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertRaises(TypeError, json.dumps, data) | 
					
						
							| 
									
										
										
										
											2024-08-24 11:29:52 -05:00
										 |  |  |         value = mod.make_json_safe(data) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual( | 
					
						
							|  |  |  |             value, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 "foo": "bar", | 
					
						
							|  |  |  |                 "person": "Betty Boop", | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-12-14 23:56:36 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_list(self): | 
					
						
							|  |  |  |         model = self.app.model | 
					
						
							|  |  |  |         person = model.Person(full_name="Betty Boop") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         data = [ | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |             "foo", | 
					
						
							|  |  |  |             "bar", | 
					
						
							| 
									
										
										
										
											2024-12-14 23:56:36 -06:00
										 |  |  |             person, | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertRaises(TypeError, json.dumps, data) | 
					
						
							|  |  |  |         value = mod.make_json_safe(data) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual( | 
					
						
							|  |  |  |             value, | 
					
						
							|  |  |  |             [ | 
					
						
							|  |  |  |                 "foo", | 
					
						
							|  |  |  |                 "bar", | 
					
						
							|  |  |  |                 "Betty Boop", | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 13:31:33 -05:00
										 |  |  | class TestRenderVueFinalize(TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def basic(self): | 
					
						
							|  |  |  |         html = mod.render_vue_finalize("wutta-grid", "WuttaGrid") | 
					
						
							|  |  |  |         self.assertIn("<script>", html) | 
					
						
							|  |  |  |         self.assertIn("Vue.component('wutta-grid', WuttaGrid)", html) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestMakeUsersGrid(WebTestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_make_users_grid(self): | 
					
						
							|  |  |  |         self.pyramid_config.add_route("users.view", "/users/{uuid}/view") | 
					
						
							|  |  |  |         self.pyramid_config.add_route("users.edit", "/users/{uuid}/edit") | 
					
						
							|  |  |  |         model = self.app.model | 
					
						
							|  |  |  |         person = model.Person(full_name="John Doe") | 
					
						
							|  |  |  |         self.session.add(person) | 
					
						
							|  |  |  |         user = model.User(username="john", person=person) | 
					
						
							|  |  |  |         self.session.add(user) | 
					
						
							|  |  |  |         self.session.commit() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # basic (no actions because not prvileged) | 
					
						
							|  |  |  |         grid = mod.make_users_grid(self.request, key="blah.users", data=person.users) | 
					
						
							|  |  |  |         self.assertIsInstance(grid, Grid) | 
					
						
							|  |  |  |         self.assertFalse(grid.linked_columns) | 
					
						
							|  |  |  |         self.assertFalse(grid.actions) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # key may be derived from route_prefix | 
					
						
							|  |  |  |         grid = mod.make_users_grid(self.request, route_prefix="foo") | 
					
						
							|  |  |  |         self.assertIsInstance(grid, Grid) | 
					
						
							|  |  |  |         self.assertEqual(grid.key, "foo.view.users") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # view + edit actions (because root) | 
					
						
							|  |  |  |         with patch.object(self.request, "is_root", new=True): | 
					
						
							|  |  |  |             grid = mod.make_users_grid( | 
					
						
							|  |  |  |                 self.request, key="blah.users", data=person.users | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |             self.assertIsInstance(grid, Grid) | 
					
						
							|  |  |  |             self.assertIn("username", grid.linked_columns) | 
					
						
							|  |  |  |             self.assertEqual(len(grid.actions), 2) | 
					
						
							|  |  |  |             self.assertEqual(grid.actions[0].key, "view") | 
					
						
							|  |  |  |             self.assertEqual(grid.actions[1].key, "edit") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # render grid to ensure coverage for link urls | 
					
						
							|  |  |  |             grid.render_vue_template() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | class TestGetAvailableThemes(TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.config = WuttaConfig() | 
					
						
							|  |  |  |         self.app = self.config.get_app() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_defaults(self): | 
					
						
							|  |  |  |         themes = mod.get_available_themes(self.config) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(themes, ["default", "butterfly"]) | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_sorting(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.themes.keys", "default, foo2, foo4, foo1") | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  |         themes = mod.get_available_themes(self.config) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(themes, ["default", "foo1", "foo2", "foo4"]) | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_default_omitted(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.themes.keys", "butterfly, foo") | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  |         themes = mod.get_available_themes(self.config) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(themes, ["default", "butterfly", "foo"]) | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_default_notfirst(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.themes.keys", "butterfly, foo, default") | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  |         themes = mod.get_available_themes(self.config) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(themes, ["default", "butterfly", "foo"]) | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestGetEffectiveTheme(DataTestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_default(self): | 
					
						
							|  |  |  |         theme = mod.get_effective_theme(self.config) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(theme, "default") | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_override_config(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.app.save_setting(self.session, "wuttaweb.theme", "butterfly") | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  |         self.session.commit() | 
					
						
							|  |  |  |         theme = mod.get_effective_theme(self.config) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(theme, "butterfly") | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_override_param(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         theme = mod.get_effective_theme(self.config, theme="butterfly") | 
					
						
							|  |  |  |         self.assertEqual(theme, "butterfly") | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_invalid(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertRaises( | 
					
						
							|  |  |  |             ValueError, mod.get_effective_theme, self.config, theme="invalid" | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestThemeTemplatePath(DataTestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         path = mod.get_theme_template_path(self.config, theme="default") | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  |         # nb. even though the path does not exist, we still want to | 
					
						
							|  |  |  |         # pretend like it does, hence prev call should return this: | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         expected = resource_path("wuttaweb:templates/themes/default") | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  |         self.assertEqual(path, expected) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_default(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         path = mod.get_theme_template_path(self.config, theme="butterfly") | 
					
						
							|  |  |  |         expected = resource_path("wuttaweb:templates/themes/butterfly") | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  |         self.assertEqual(path, expected) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_custom(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.config.setdefault("wuttaweb.themes.keys", "default, butterfly, poser") | 
					
						
							|  |  |  |         self.config.setdefault("wuttaweb.theme.poser", "/tmp/poser-theme") | 
					
						
							|  |  |  |         path = mod.get_theme_template_path(self.config, theme="poser") | 
					
						
							|  |  |  |         self.assertEqual(path, "/tmp/poser-theme") | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestSetAppTheme(WebTestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_basic(self): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # establish default | 
					
						
							|  |  |  |         settings = self.request.registry.settings | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertNotIn("wuttaweb.theme", settings) | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  |         establish_theme(settings) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(settings["wuttaweb.theme"], "default") | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # set to butterfly | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         mod.set_app_theme(self.request, "butterfly", session=self.session) | 
					
						
							|  |  |  |         self.assertEqual(settings["wuttaweb.theme"], "butterfly") | 
					
						
							| 
									
										
										
										
											2025-06-29 09:16:44 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # set back to default | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         mod.set_app_theme(self.request, "default", session=self.session) | 
					
						
							|  |  |  |         self.assertEqual(settings["wuttaweb.theme"], "default") |