From ec994436cdd879fb7d5b8ac0ffdc944764ab4e38 Mon Sep 17 00:00:00 2001 From: patrik kinnunen Date: Wed, 1 Mar 2023 17:04:16 +0100 Subject: [PATCH 1/3] feat: #1 coverage for get all scripts on None obj --- evennia/scripts/tests.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 7e3cb46ddb..8634c67e14 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -7,7 +7,7 @@ from evennia.scripts.models import ObjectDoesNotExist, ScriptDB from evennia.scripts.scripts import DoNothing, ExtendedLoopingCall from evennia.utils.create import create_script from evennia.utils.test_resources import BaseEvenniaTest - +from evennia.scripts.manager import ScriptDBManager class TestScript(BaseEvenniaTest): def test_create(self): @@ -18,6 +18,11 @@ class TestScript(BaseEvenniaTest): self.assertFalse(errors, errors) mockinit.assert_called() +class Test_improve_coverage(TestCase): + def test_not_obj_return_empty_list(self): + manager_obj = ScriptDBManager() + returned_list = manager_obj.get_all_scripts_on_obj(False) + self.assertEqual(returned_list, []) class TestScriptDB(TestCase): "Check the singleton/static ScriptDB object works correctly" @@ -51,11 +56,9 @@ class TestScriptDB(TestCase): # Check the script is not recreated as a side-effect self.assertFalse(self.scr in ScriptDB.objects.get_all_scripts()) - class TestExtendedLoopingCall(TestCase): """ Test the ExtendedLoopingCall class. - """ @mock.patch("evennia.scripts.scripts.LoopingCall") @@ -87,4 +90,4 @@ class TestExtendedLoopingCall(TestCase): loopcall.__call__.assert_not_called() self.assertEqual(loopcall.interval, 20) - loopcall._scheduleFrom.assert_called_with(121) + loopcall._scheduleFrom.assert_called_with(121) \ No newline at end of file From 2692ae1d41848d43f966e8fa38bd29a318e532e7 Mon Sep 17 00:00:00 2001 From: Daniel Ericsson Date: Wed, 1 Mar 2023 19:49:35 +0100 Subject: [PATCH 2/3] feat #3 Implemented ScriptHandler unit tests Implemented tests for starting scripts and listing script intervals through ScriptHandler. Code coverage improved from 72% -> 84% --- evennia/scripts/tests.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 7e3cb46ddb..77786d125d 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -3,6 +3,7 @@ from unittest import TestCase, mock from parameterized import parameterized from evennia import DefaultScript +from evennia.objects.objects import DefaultObject from evennia.scripts.models import ObjectDoesNotExist, ScriptDB from evennia.scripts.scripts import DoNothing, ExtendedLoopingCall from evennia.utils.create import create_script @@ -18,6 +19,42 @@ class TestScript(BaseEvenniaTest): self.assertFalse(errors, errors) mockinit.assert_called() +class ListIntervalsScript(DefaultScript): + """ + A script that does nothing. Used to test listing of script with nonzero intervals. + """ + def at_script_creation(self): + """ + Setup the script + """ + self.key = "interval_test" + self.desc = "This is an empty placeholder script." + self.interval = 1 + self.repeats = 1 + +class TestScriptHandler(BaseEvenniaTest): + """ + Test the ScriptHandler class. + + """ + def setUp(self): + self.obj, self.errors = DefaultObject.create("test_object") + + def tearDown(self): + self.obj.delete() + + def test_start(self): + "Check that ScriptHandler start function works correctly" + self.obj.scripts.add(ListIntervalsScript) + self.num = self.obj.scripts.start(self.obj.scripts.all()[0].key) + self.assertTrue(self.num == 1) + + def test_list_script_intervals(self): + "Checks that Scripthandler __str__ function lists script intervals correctly" + self.obj.scripts.add(ListIntervalsScript) + self.str = str(self.obj.scripts) + self.assertTrue("None/1" in self.str) + self.assertTrue("1 repeats" in self.str) class TestScriptDB(TestCase): "Check the singleton/static ScriptDB object works correctly" From e69dc8a1c3b09734cb4ac53b477d33d0ccc807b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pontus=20Pr=C3=BCzelius?= Date: Thu, 2 Mar 2023 01:18:37 +0100 Subject: [PATCH 3/3] feat: tests for add,remove in monitorhandler --- evennia/scripts/tests.py | 57 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 7e3cb46ddb..d767cdf830 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -7,7 +7,8 @@ from evennia.scripts.models import ObjectDoesNotExist, ScriptDB from evennia.scripts.scripts import DoNothing, ExtendedLoopingCall from evennia.utils.create import create_script from evennia.utils.test_resources import BaseEvenniaTest - +from evennia.scripts.monitorhandler import MonitorHandler +import inspect class TestScript(BaseEvenniaTest): def test_create(self): @@ -88,3 +89,57 @@ class TestExtendedLoopingCall(TestCase): loopcall.__call__.assert_not_called() self.assertEqual(loopcall.interval, 20) loopcall._scheduleFrom.assert_called_with(121) +def dummy_func(): + return 0 +class TestMonitorHandler(TestCase): + def setUp(self): + self.handler = MonitorHandler() + + def test_add(self): + obj = mock.Mock() + fieldname = "db_add" + callback = dummy_func + idstring = "test" + self.assertEquals(inspect.isfunction(callback),True) + + self.handler.add(obj, fieldname, callback, idstring=idstring) + + self.assertIn(fieldname, self.handler.monitors[obj]) + self.assertIn(idstring, self.handler.monitors[obj][fieldname]) + self.assertEqual(self.handler.monitors[obj][fieldname][idstring], (callback, False, {})) + + def test_remove(self): + obj = mock.Mock() + fieldname = 'db_remove' + callback = dummy_func + idstring = 'test_remove' + + self.handler.add(obj,fieldname,callback,idstring=idstring) + self.assertIn(fieldname,self.handler.monitors[obj]) + self.assertEqual(self.handler.monitors[obj][fieldname][idstring], (callback, False, {})) + + self.handler.remove(obj,fieldname,idstring=idstring) + self.assertEquals(self.handler.monitors[obj][fieldname], {}) + + def test_add_with_invalid_callback_does_not_work(self): + obj = mock.Mock() + fieldname = "db_key" + callback = "not_a_function" + + self.handler.add(obj, fieldname, callback) + self.assertNotIn(fieldname, self.handler.monitors[obj]) + + """ def test_add_raise_exception(self): + obj = mock.Mock() + fieldname = "db_add" + callback = 1 + idstring = "test" + # self.assertEquals(inspect.isfunction(callback),True) + self.assertRaises(Exception,self.handler.add,obj, fieldname, callback, idstring=idstring) + """ + + + + + +