diff options
Diffstat (limited to 'ick2/controllerapi_tests.py')
-rw-r--r-- | ick2/controllerapi_tests.py | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/ick2/controllerapi_tests.py b/ick2/controllerapi_tests.py new file mode 100644 index 0000000..3277526 --- /dev/null +++ b/ick2/controllerapi_tests.py @@ -0,0 +1,100 @@ +# Copyright (C) 2017 Lars Wirzenius + + +import os +import shutil +import tempfile +import unittest + + +import ick2 + + +class ControllerAPITests(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_api(self): + api = ick2.ControllerAPI() + api.set_state_directory(self.statedir) + return api + + def test_has_no_state_directory_initially(self): + api = ick2.ControllerAPI() + statedir = api.get_state_directory() + self.assertTrue(statedir is None) + + def test_sets_and_creates_state_directory(self): + api = self.create_api() + statedir = api.get_state_directory() + self.assertEqual(statedir, self.statedir) + self.assertTrue(os.path.exists(statedir)) + + def test_has_not_projects_initially(self): + api = self.create_api() + self.assertEqual(api.get_projects(), {'projects': []}) + + def test_creates_project(self): + project = { + 'project': 'foo', + 'shell_steps': ['build'], + } + api = self.create_api() + self.assertEqual(api.post_projects(project), project) + self.assertEqual(api.get_projects(), {'projects': [project]}) + + def test_loads_projects_from_state_directory(self): + project = { + 'project': 'foo', + 'shell_steps': ['build'], + } + api = self.create_api() + api.post_projects(project) + + api2 = self.create_api() + api2.load_projects() + self.assertEqual(api2.get_projects(), {'projects': [project]}) + + def test_gets_named_project(self): + project = { + 'project': 'foo', + 'shell_steps': ['build'], + } + api = self.create_api() + api.post_projects(project) + self.assertEqual(api.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'] + api = self.create_api() + api.post_projects(project_v1) + updated = api.put_projects(project_v2, project='foo') + self.assertEqual(updated, project_v2) + self.assertEqual(api.get_project('foo'), project_v2) + + def test_deletes_named_project(self): + project = { + 'project': 'foo', + 'shell_steps': ['build'], + } + api = self.create_api() + api.post_projects(project) + api.delete_projects('foo') + self.assertEqual(api.get_projects(), {'projects': []}) + with self.assertRaises(ick2.NotFound): + api.get_project('foo') + + def test_raises_errro_deleting_missing_project(self): + api = self.create_api() + with self.assertRaises(ick2.NotFound): + api.delete_projects('foo') |