summaryrefslogtreecommitdiff
path: root/ick2/projectapi_tests.py
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-11-18 21:07:06 +0100
committerLars Wirzenius <liw@liw.fi>2017-11-18 21:07:30 +0100
commit5c2496588b96b17309e27906c3a7e2c81b8e1fb3 (patch)
treef55c3ce16c1fc3d10129893cbe79e0b2452f417d /ick2/projectapi_tests.py
parentd62b49e35b75bc7afbba98c6725fc45644009e71 (diff)
downloadick2-5c2496588b96b17309e27906c3a7e2c81b8e1fb3.tar.gz
Refactor: move ProjectAPI tests to its own module
Diffstat (limited to 'ick2/projectapi_tests.py')
-rw-r--r--ick2/projectapi_tests.py188
1 files changed, 188 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>.
+
+
+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')