Merge pull request #14 from pontuspr/2-increase-test-coverage-for-scriptsmonitorhandlerpy

#2 increase test coverage for scriptsmonitorhandlerpy
This commit is contained in:
Storsorken 2023-03-07 11:31:32 +01:00 committed by GitHub
commit 5887d03058

View file

@ -12,6 +12,8 @@ from evennia.scripts.tickerhandler import TickerHandler
from evennia.scripts.monitorhandler import MonitorHandler from evennia.scripts.monitorhandler import MonitorHandler
import inspect import inspect
from evennia.scripts.manager import ScriptDBManager from evennia.scripts.manager import ScriptDBManager
from collections import defaultdict
from evennia.utils.dbserialize import dbserialize
class TestScript(BaseEvenniaTest): class TestScript(BaseEvenniaTest):
def test_create(self): def test_create(self):
@ -142,7 +144,7 @@ class TestExtendedLoopingCall(TestCase):
loopcall.__call__.assert_not_called() loopcall.__call__.assert_not_called()
self.assertEqual(loopcall.interval, 20) self.assertEqual(loopcall.interval, 20)
loopcall._scheduleFrom.assert_called_with(121) loopcall._scheduleFrom.assert_called_with(121)
def test_start_invalid_interval(self): def test_start_invalid_interval(self):
""" Test the .start method with interval less than zero """ """ Test the .start method with interval less than zero """
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
@ -174,18 +176,26 @@ class TestExtendedLoopingCall(TestCase):
callback.assert_called_once() callback.assert_called_once()
"""
Dummy function used as callback parameter
"""
def dummy_func(): def dummy_func():
return 0 return 0
class TestMonitorHandler(TestCase): class TestMonitorHandler(TestCase):
"""
Test the MonitorHandler class.
"""
def setUp(self): def setUp(self):
self.handler = MonitorHandler() self.handler = MonitorHandler()
def test_add(self): def test_add(self):
"""Tests that adding an object to the monitor handler works correctly"""
obj = mock.Mock() obj = mock.Mock()
fieldname = "db_add" fieldname = "db_add"
callback = dummy_func callback = dummy_func
idstring = "test" idstring = "test"
self.assertEquals(inspect.isfunction(callback),True)
self.handler.add(obj, fieldname, callback, idstring=idstring) self.handler.add(obj, fieldname, callback, idstring=idstring)
@ -194,37 +204,75 @@ class TestMonitorHandler(TestCase):
self.assertEqual(self.handler.monitors[obj][fieldname][idstring], (callback, False, {})) self.assertEqual(self.handler.monitors[obj][fieldname][idstring], (callback, False, {}))
def test_remove(self): def test_remove(self):
"""Tests that removing an object from the monitor handler works correctly"""
obj = mock.Mock() obj = mock.Mock()
fieldname = 'db_remove' fieldname = 'db_remove'
callback = dummy_func callback = dummy_func
idstring = 'test_remove' idstring = 'test_remove'
"""Add an object to the monitor handler and then remove it"""
self.handler.add(obj,fieldname,callback,idstring=idstring) 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.handler.remove(obj,fieldname,idstring=idstring)
self.assertEquals(self.handler.monitors[obj][fieldname], {}) self.assertEquals(self.handler.monitors[obj][fieldname], {})
def test_add_with_invalid_callback_does_not_work(self): def test_add_with_invalid_function(self):
obj = mock.Mock() obj = mock.Mock()
"""Tests that add method rejects objects where callback is not a function"""
fieldname = "db_key" fieldname = "db_key"
callback = "not_a_function" callback = "not_a_function"
self.handler.add(obj, fieldname, callback) self.handler.add(obj, fieldname, callback)
self.assertNotIn(fieldname, self.handler.monitors[obj]) self.assertNotIn(fieldname, self.handler.monitors[obj])
""" def test_add_raise_exception(self): def test_all(self):
"""Tests that all method correctly returns information about added objects"""
obj = [mock.Mock(),mock.Mock()]
fieldname = ["db_all1","db_all2"]
callback = dummy_func
idstring = ["test_all1","test_all2"]
self.handler.add(obj[0], fieldname[0], callback, idstring=idstring[0])
self.handler.add(obj[1], fieldname[1], callback, idstring=idstring[1],persistent=True)
output = self.handler.all()
self.assertEquals(output,
[(obj[0], fieldname[0], idstring[0], False, {}),
(obj[1], fieldname[1], idstring[1], True, {})])
def test_clear(self):
"""Tests that the clear function correctly clears the monitor handler"""
obj = mock.Mock() obj = mock.Mock()
fieldname = "db_add" fieldname = "db_add"
callback = 1 callback = dummy_func
idstring = "test" idstring = "test"
# self.assertEquals(inspect.isfunction(callback),True)
self.assertRaises(Exception,self.handler.add,obj, fieldname, callback, idstring=idstring)
"""
self.handler.add(obj, fieldname, callback, idstring=idstring)
self.assertIn(obj, self.handler.monitors)
self.handler.clear()
self.assertNotIn(obj, self.handler.monitors)
self.assertEquals(defaultdict(lambda: defaultdict(dict)), self.handler.monitors)
def test_add_remove_attribute(self):
"""Tests that adding and removing an object attribute to the monitor handler works correctly"""
obj = mock.Mock()
obj.name = "testaddattribute"
fieldname = "name"
callback = dummy_func
idstring = "test"
category = "testattribute"
"""Add attribute to handler and assert that it has been added"""
self.handler.add(obj, fieldname, callback, idstring=idstring,category=category)
index = obj.attributes.get(fieldname, return_obj=True)
name = "db_value[testattribute]"
self.assertIn(name, self.handler.monitors[index])
self.assertIn(idstring, self.handler.monitors[index][name])
self.assertEqual(self.handler.monitors[index][name][idstring], (callback, False, {}))
"""Remove attribute from the handler and assert that it is gone"""
self.handler.remove(obj,fieldname,idstring=idstring,category=category)
self.assertEquals(self.handler.monitors[index][name], {})