import json from django.test import TestCase from django.core.cache import cache from labs.site_settings import SiteSettings from labs.site_settings.loader import NAMESPACE_KEY from labs.models import SiteSetting as DBSiteSetting class TestSiteSetting(TestCase): def setUp(self): self._clear_cache_namespace() def _clear_cache_namespace(self): # Ensure that there is no cache conflict between each test. # Note: This only works when tests are run in Sequential Execution mode. cache.delete(NAMESPACE_KEY) def test_site_setting(self): self.assertEqual(SiteSettings.credit_voucher_notification_lark_app_id, "") self.assertEqual(SiteSettings.credit_voucher_notification_lark_app_secret, "") with self.assertRaises(DBSiteSetting.DoesNotExist): DBSiteSetting.objects.get(key="credit_voucher_notification_lark_app_id") with self.assertRaises(DBSiteSetting.DoesNotExist): DBSiteSetting.objects.get(key="credit_voucher_notification_lark_app_secret") cache_ns = cache.get(NAMESPACE_KEY) self.assertIsNotNone(cache_ns) app_id = "app_id_1234567890" app_id_db = DBSiteSetting.objects.create( key="credit_voucher_notification_lark_app_id", value=json.dumps(app_id), key_type="string", ) self.assertEqual(SiteSettings.credit_voucher_notification_lark_app_id, app_id) # Cache namespace should be updated new_cache_ns = cache.get(NAMESPACE_KEY) self.assertNotEqual(cache_ns, new_cache_ns) new_app_id = "new_app_id_1234567890" app_id_db.value = json.dumps(new_app_id) app_id_db.save() self.assertEqual( SiteSettings.credit_voucher_notification_lark_app_id, new_app_id ) # Cache namespace should be updated new_cache_ns_2 = cache.get(NAMESPACE_KEY) self.assertNotEqual(new_cache_ns, new_cache_ns_2) def test_not_exists_setting(self): with self.assertRaises(AttributeError): SiteSettings.not_exists_setting