bumblebee-status/tests/core/test_module.py
tobi-wan-kenobi 9cd9ff626d [core] make widget name an attribute
first, this fixes #607

also, i think it slightly simplifies code to make "simple" stuff like
names, etc. attributes instead of methods all the time.

so, expect this to be extended to other components, as well.
2020-04-30 12:42:34 +02:00

115 lines
5 KiB
Python

import unittest
import sys
import shlex
import core.module
import core.widget
import core.config
class TestModule(core.module.Module):
def update(self):
if self.fail:
raise Exception(self.error)
pass
class module(unittest.TestCase):
def setUp(self):
self.invalidModuleName = 'invalid-module-name'
self.validModuleName = 'test'
self.someWidget = core.widget.Widget('randomeWidgetContent', name='A')
self.anotherWidget = core.widget.Widget('more Widget content', name='B')
self.unusedWidgetName = 'C'
def test_loadinvalid_module(self):
config = unittest.mock.MagicMock()
module = core.module.load(module_name=self.invalidModuleName, config=config)
self.assertEqual('core.module', module.__class__.__module__, 'module must be a module object')
self.assertEqual('Error', module.__class__.__name__, 'an invalid module must be a core.module.Error')
@unittest.skipIf(sys.version_info.major == 3 and sys.version_info.minor in [ 4, 5 ], 'importlib error reporting in Python 3.{4,5} different')
def test_importerror(self):
with unittest.mock.patch('core.module.importlib') as importlib:
importlib.import_module.side_effect = ImportError('some-error')
config = unittest.mock.MagicMock()
module = core.module.load(module_name=self.validModuleName, config=config)
module.widget().full_text()
self.assertEqual('Error', module.__class__.__name__, 'an invalid module must be a core.module.Error')
self.assertEqual(module.widget().get('_raw'), 'test: some-error')
def test_loadvalid_module(self):
module = core.module.load(module_name=self.validModuleName)
self.assertEqual('modules.core.{}'.format(self.validModuleName), module.__class__.__module__, 'module must be a modules.core.<name> object')
self.assertEqual('Module', module.__class__.__name__, 'a valid module must have a Module class')
self.assertEqual([], module.state(None), 'default state of module is empty')
def test_empty_widgets(self):
module = core.module.Module(widgets=[])
self.assertEqual([], module.widgets())
def test_error_widget(self):
cfg = core.config.Config(shlex.split('-p test_module.foo=5'))
module = core.module.Error(cfg, 'test-mod', 'xyz')
self.assertEqual(['critical'], module.state(None), 'error module must have critical state')
full_text = module.full_text(module.widget())
self.assertTrue('test-mod' in full_text)
self.assertTrue('xyz' in full_text)
def test_single_widget(self):
module = core.module.Module(widgets=self.someWidget)
self.assertEqual([self.someWidget], module.widgets())
def test_widget_list(self):
module = core.module.Module(widgets=[ self.someWidget, self.anotherWidget ])
self.assertEqual([ self.someWidget, self.anotherWidget ], module.widgets())
def test_module_Name(self):
module = TestModule()
self.assertEqual('test_module', module.name(), 'module has wrong name')
self.assertEqual('test_module', module.module_name(), 'module has wrong name')
def testvalid_parameter(self):
cfg = core.config.Config(shlex.split('-p test_module.foo=5'))
module = TestModule(config=cfg)
self.assertEqual(5, int(module.parameter('foo')))
def test_default_parameter(self):
cfg = core.config.Config([])
module = TestModule(config=cfg)
self.assertEqual('default', module.parameter('foo', 'default'))
def test_default_is_none(self):
cfg = core.config.Config([])
module = TestModule(config=cfg)
self.assertEqual(None, module.parameter('foo'))
def test_error_widget(self):
cfg = core.config.Config([])
module = TestModule(config=cfg)
module.fail = True
module.error = '!!'
module.update_wrapper()
self.assertEqual(1, len(module.widgets()))
self.assertEqual('error: !!', module.widget().full_text())
def test_get_widget_by_name(self):
cfg = core.config.Config([])
module = TestModule(config=cfg, widgets=[self.someWidget, self.anotherWidget])
self.assertEqual(self.someWidget, module.widget(self.someWidget.name))
self.assertEqual(self.anotherWidget, module.widget(self.anotherWidget.name))
self.assertEqual(None, module.widget(self.unusedWidgetName))
self.assertEqual(self.someWidget, module.widget())
def test_default_thresholds(self):
cfg = core.config.Config([])
module = TestModule(config=cfg, widgets=[self.someWidget, self.anotherWidget])
self.assertEqual('critical', module.threshold_state(100, 80, 99))
self.assertEqual('warning', module.threshold_state(100, 80, 100))
self.assertEqual('warning', module.threshold_state(81, 80, 100))
self.assertEqual(None, module.threshold_state(80, 80, 100))
self.assertEqual(None, module.threshold_state(10, 80, 100))
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4