# Copyright (C) 2017-2018 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.FilePersistentState() self.state.set_directory(self.statedir) def tearDown(self): shutil.rmtree(self.tempdir) def create_api(self): return ick2.ProjectAPI(self.state) def create_pipeline_api(self): return ick2.PipelineAPI(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': ['build'], 'parameters': { 'foo': 'bar', }, } api = self.create_api() new = api.create(project) project['next_build_id'] = None self.assertEqual(new, project) self.assertEqual(api.list(), {'projects': [new]}) def test_loads_projects_from_state_directory(self): project = { 'project': 'foo', 'pipelines': ['build'], 'next_build_id': None, } 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', 'pipelines': ['build'], 'next_build_id': None, } api = self.create_api() api.create(project) self.assertEqual(api.show('foo'), project) def test_updates_named_project(self): project_v1 = { 'project': 'foo', 'pipelines': ['build'], 'next_build_id': None, } 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', 'pipelines': ['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')