add test for un-startable script

This commit is contained in:
InspectorCaracal 2022-10-09 20:15:23 -06:00
parent 2e9971dc82
commit 77eccd3033

View file

@ -11,64 +11,76 @@ _BASE_TYPECLASS = class_from_module(settings.BASE_SCRIPT_TYPECLASS)
class GoodScript(DefaultScript): class GoodScript(DefaultScript):
pass pass
class InvalidScript:
pass
class BrokenScript(DefaultScript): class BrokenScript(DefaultScript):
"""objects will fail upon call""" """objects will fail upon call"""
@property @property
def objects(self): def objects(self):
from evennia import module_that_doesnt_exist from evennia import module_that_doesnt_exist
class TestGlobalScriptContainer(unittest.TestCase): class TestGlobalScriptContainer(unittest.TestCase):
def test_init_with_no_scripts(self): def test_init_with_no_scripts(self):
gsc = containers.GlobalScriptContainer() gsc = containers.GlobalScriptContainer()
self.assertEqual(len(gsc.loaded_data), 0) self.assertEqual(len(gsc.loaded_data), 0)
@override_settings(GLOBAL_SCRIPTS={}) @override_settings(GLOBAL_SCRIPTS={})
def test_start_with_no_scripts(self): def test_start_with_no_scripts(self):
gsc = containers.GlobalScriptContainer() gsc = containers.GlobalScriptContainer()
gsc.start() gsc.start()
self.assertEqual(len(gsc.typeclass_storage), 0) self.assertEqual(len(gsc.typeclass_storage), 0)
@override_settings(GLOBAL_SCRIPTS={'script_name': {}}) @override_settings(GLOBAL_SCRIPTS={'script_name': {}})
def test_start_with_typeclassless_script(self): def test_start_with_typeclassless_script(self):
"""No specified typeclass should fallback to base""" """No specified typeclass should fallback to base"""
gsc = containers.GlobalScriptContainer() gsc = containers.GlobalScriptContainer()
gsc.start() gsc.start()
self.assertEqual(len(gsc.typeclass_storage), 1) self.assertEqual(len(gsc.typeclass_storage), 1)
self.assertIn('script_name', gsc.typeclass_storage) self.assertIn('script_name', gsc.typeclass_storage)
self.assertEqual(gsc.typeclass_storage['script_name'], _BASE_TYPECLASS) self.assertEqual(gsc.typeclass_storage['script_name'], _BASE_TYPECLASS)
@override_settings(GLOBAL_SCRIPTS={'script_name': {'typeclass': 'evennia.utils.tests.test_containers.NoScript'}}) @override_settings(GLOBAL_SCRIPTS={'script_name': {'typeclass': 'evennia.utils.tests.test_containers.NoScript'}})
def test_start_with_nonexistent_script(self): def test_start_with_nonexistent_script(self):
"""Missing script class should fall back to base""" """Missing script class should fall back to base"""
gsc = containers.GlobalScriptContainer() gsc = containers.GlobalScriptContainer()
gsc.start() gsc.start()
self.assertEqual(len(gsc.typeclass_storage), 1) self.assertEqual(len(gsc.typeclass_storage), 1)
self.assertIn('script_name', gsc.typeclass_storage) self.assertIn('script_name', gsc.typeclass_storage)
self.assertEqual(gsc.typeclass_storage['script_name'], _BASE_TYPECLASS) self.assertEqual(gsc.typeclass_storage['script_name'], _BASE_TYPECLASS)
@override_settings(GLOBAL_SCRIPTS={'script_name': {'typeclass': 'evennia.utils.tests.test_containers.GoodScript'}}) @override_settings(GLOBAL_SCRIPTS={'script_name': {'typeclass': 'evennia.utils.tests.test_containers.GoodScript'}})
def test_start_with_valid_script(self): def test_start_with_valid_script(self):
gsc = containers.GlobalScriptContainer() gsc = containers.GlobalScriptContainer()
gsc.start() gsc.start()
self.assertEqual(len(gsc.typeclass_storage), 1) self.assertEqual(len(gsc.typeclass_storage), 1)
self.assertIn('script_name', gsc.typeclass_storage) self.assertIn('script_name', gsc.typeclass_storage)
self.assertEqual(gsc.typeclass_storage['script_name'], GoodScript) self.assertEqual(gsc.typeclass_storage['script_name'], GoodScript)
@override_settings(GLOBAL_SCRIPTS={'script_name': {'typeclass': 'evennia.utils.tests.test_containers.BrokenScript'}}) @override_settings(GLOBAL_SCRIPTS={'script_name': {'typeclass': 'evennia.utils.tests.test_containers.InvalidScript'}})
def test_start_with_broken_script(self): def test_start_with_invalid_script(self):
"""Broken script module should traceback""" """Script class doesn't implement required start methods"""
gsc = containers.GlobalScriptContainer() gsc = containers.GlobalScriptContainer()
with self.assertRaises(Exception) as cm: with self.assertRaises(Exception) as cm:
gsc.start() gsc.start()
self.fail("An exception was expected but it didn't occur.") self.fail("An exception was expected but it didn't occur.")
@override_settings(GLOBAL_SCRIPTS={'script_name': {'typeclass': 'evennia.utils.tests.test_containers.BrokenScript'}})
def test_start_with_broken_script(self):
"""Un-importable script should traceback"""
gsc = containers.GlobalScriptContainer()
with self.assertRaises(Exception) as cm:
gsc.start()
self.fail("An exception was expected but it didn't occur.")