From 5c2496588b96b17309e27906c3a7e2c81b8e1fb3 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 18 Nov 2017 21:07:06 +0100 Subject: Refactor: move ProjectAPI tests to its own module --- ick2/projectapi_tests.py | 188 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 ick2/projectapi_tests.py (limited to 'ick2/projectapi_tests.py') diff --git a/ick2/projectapi_tests.py b/ick2/projectapi_tests.py new file mode 100644 index 0000000..2e6e14a --- /dev/null +++ b/ick2/projectapi_tests.py @@ -0,0 +1,188 @@ +# Copyright (C) 2017 Lars Wirzenius +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + + +import os +import shutil +import tempfile +import unittest + + +import ick2 + + +class ProjectAPITests(unittest.TestCase): + + def setUp(self): + self.tempdir = tempfile.mkdtemp() + self.statedir = os.path.join(self.tempdir, 'state/dir') + self.state = ick2.ControllerState() + self.state.set_state_directory(self.statedir) + + def tearDown(self): + shutil.rmtree(self.tempdir) + + def create_api(self): + return ick2.ProjectAPI(self.state) + + def test_has_not_projects_initially(self): + api = self.create_api() + self.assertEqual(api.list(), {'projects': []}) + + def test_creates_project(self): + project = { + 'project': 'foo', + 'pipelines': [ + { + 'name': 'build', + 'actions': [ + { + 'shell': 'step-1', + }, + ], + }, + ], + } + api = self.create_api() + self.assertEqual(api.create(project), project) + self.assertEqual(api.list(), {'projects': [project]}) + self.assertEqual(api.get_pipeline('foo', 'build'), {'status': 'idle'}) + self.assertEqual( + api.get_builds('foo'), + {'project': 'foo', 'builds': []} + ) + + def test_raises_error_when_getting_missing_pipeline(self): + project = { + 'project': 'foo', + 'pipelines': [ + { + 'name': 'build', + 'actions': [ + { + 'shell': 'step-1', + }, + ], + }, + ], + } + api = self.create_api() + api.create(project) + with self.assertRaises(ick2.NotFound): + api.get_pipeline('foo', 'does-not-exist') + + def test_loads_projects_from_state_directory(self): + project = { + 'project': 'foo', + 'shell_steps': ['build'], + } + api = self.create_api() + api.create(project) + + api2 = self.create_api() + self.assertEqual(api2.list(), {'projects': [project]}) + + def test_gets_named_project(self): + project = { + 'project': 'foo', + 'shell_steps': ['build'], + } + api = self.create_api() + api.create(project) + self.assertEqual(api.show('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.create(project_v1) + updated = api.update(project_v2, 'foo') + self.assertEqual(updated, project_v2) + self.assertEqual(api.show('foo'), project_v2) + + def test_deletes_named_project(self): + project = { + 'project': 'foo', + 'shell_steps': ['build'], + } + api = self.create_api() + api.create(project) + api.delete('foo') + self.assertEqual(api.list(), {'projects': []}) + with self.assertRaises(ick2.NotFound): + api.show('foo') + + def test_raises_error_deleting_missing_project(self): + api = self.create_api() + with self.assertRaises(ick2.NotFound): + api.delete('foo') + + def test_updates_pipeline_status(self): + project = { + 'project': 'foo', + 'pipelines': [ + { + 'name': 'build', + 'actions': [ + { + 'shell': 'step-1', + }, + ], + }, + ], + } + api = self.create_api() + api.create(project) + self.assertEqual(api.get_pipeline('foo', 'build'), {'status': 'idle'}) + + with self.assertRaises(ick2.WrongPipelineStatus): + api.set_pipeline('building', 'foo', 'build') + + api.set_pipeline('triggered', 'foo', 'build') + self.assertEqual( + api.get_pipeline('foo', 'build'), + {'status': 'triggered'} + ) + + with self.assertRaises(ick2.WrongPipelineStatus): + api.set_pipeline('idle', 'foo', 'build') + + api.set_pipeline('building', 'foo', 'build') + self.assertEqual( + api.get_pipeline('foo', 'build'), + {'status': 'building'} + ) + + with self.assertRaises(ick2.WrongPipelineStatus): + api.set_pipeline('triggered', 'foo', 'build') + + api.set_pipeline('idle', 'foo', 'build') + self.assertEqual( + api.get_pipeline('foo', 'build'), + {'status': 'idle'} + ) + + def test_raises_error_updating_status_of_missing_pipeline(self): + project = { + 'project': 'foo', + 'pipelines': [], + } + api = self.create_api() + api.create(project) + with self.assertRaises(ick2.NotFound): + api.set_pipeline('idle', 'foo', 'build') -- cgit v1.2.1