diff options
Diffstat (limited to 'ick2/state_tests.py')
-rw-r--r-- | ick2/state_tests.py | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/ick2/state_tests.py b/ick2/state_tests.py new file mode 100644 index 0000000..098ad2d --- /dev/null +++ b/ick2/state_tests.py @@ -0,0 +1,100 @@ +# Copyright (C) 2017 Lars Wirzenius + + +import os +import shutil +import tempfile +import unittest + + +import ick2 + + +class ControllerStateTests(unittest.TestCase): + + def setUp(self): + self.tempdir = tempfile.mkdtemp() + self.statedir = os.path.join(self.tempdir, 'state/dir') + + def tearDown(self): + shutil.rmtree(self.tempdir) + + def create_state(self): + state = ick2.ControllerState() + state.set_state_directory(self.statedir) + return state + + def test_has_no_state_directory_initially(self): + state = ick2.ControllerState() + self.assertTrue(state.get_state_directory() is None) + + def test_sets_and_creates_state_directory(self): + state = self.create_state() + statedir = state.get_state_directory() + self.assertEqual(statedir, self.statedir) + self.assertTrue(os.path.exists(statedir)) + + def test_has_not_projects_initially(self): + state = self.create_state() + self.assertEqual(state.get_projects(), []) + + def test_creates_project(self): + project = { + 'project': 'foo', + 'shell_steps': ['build'], + } + state = self.create_state() + state.add_project(project) + self.assertEqual(state.get_projects(), [project]) + self.assertTrue(os.path.exists(state.get_project_filename('foo'))) + + def test_loads_projects_from_state_directory(self): + project = { + 'project': 'foo', + 'shell_steps': ['build'], + } + state = self.create_state() + state.add_project(project) + + state2 = self.create_state() + state2.load_projects() + self.assertEqual(state2.get_projects(), [project]) + + def test_gets_named_project(self): + project = { + 'project': 'foo', + 'shell_steps': ['build'], + } + state = self.create_state() + state.add_project(project) + self.assertEqual(state.get_project('foo'), project) + + def test_updates_named_project(self): + project_v1 = { + 'project': 'foo', + 'shell_steps': ['build'], + } + project_v2 = dict(project_v1) + project_v2['shell_steps'] = ['build it using magic'] + state = self.create_state() + state.add_project(project_v1) + updated = state.update_project('foo', project_v2) + self.assertEqual(updated, project_v2) + self.assertEqual(state.get_project('foo'), project_v2) + + def test_deletes_named_project(self): + project = { + 'project': 'foo', + 'shell_steps': ['build'], + } + state = self.create_state() + state.add_project(project) + state.remove_project('foo') + self.assertEqual(state.get_projects(), []) + with self.assertRaises(ick2.NotFound): + state.get_project('foo') + + def test_raises_error_deleting_missing_project(self): + state = self.create_state() + with self.assertRaises(ick2.NotFound): + state.remove_project('foo') |