summaryrefslogtreecommitdiff
path: root/ick2/build_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'ick2/build_tests.py')
-rw-r--r--ick2/build_tests.py120
1 files changed, 120 insertions, 0 deletions
diff --git a/ick2/build_tests.py b/ick2/build_tests.py
new file mode 100644
index 0000000..47b2db8
--- /dev/null
+++ b/ick2/build_tests.py
@@ -0,0 +1,120 @@
+# Copyright (C) 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 <http://www.gnu.org/licenses/>.
+
+
+import unittest
+
+
+import ick2
+
+
+class BuildTests(unittest.TestCase):
+
+ def setUp(self):
+ as_dict = {
+ 'status': 'triggered',
+ }
+ self.resource = ick2.resource_from_dict(as_dict)
+
+ def test_sets_status_from_triggered_only_when_acceptable(self):
+ build = ick2.Build(self.resource)
+
+ with self.assertRaises(ick2.WrongBuildStatusChange):
+ build.set_status('triggered')
+ self.assertEqual(build.get_status(), 'triggered')
+
+ with self.assertRaises(ick2.WrongBuildStatusChange):
+ build.set_status('done')
+ self.assertEqual(build.get_status(), 'triggered')
+
+ with self.assertRaises(ick2.WrongBuildStatusChange):
+ build.set_status('failed')
+ self.assertEqual(build.get_status(), 'triggered')
+
+ build.set_status('building')
+ self.assertEqual(build.get_status(), 'building')
+
+ def test_refuses_changing_status_from_building_when_unacceptable(self):
+ build = ick2.Build(self.resource)
+ build.set_status('building')
+
+ with self.assertRaises(ick2.WrongBuildStatusChange):
+ build.set_status('triggered')
+ self.assertEqual(build.get_status(), 'building')
+
+ with self.assertRaises(ick2.WrongBuildStatusChange):
+ build.set_status('building')
+ self.assertEqual(build.get_status(), 'building')
+
+ def test_changes_status_from_building_to_done(self):
+ build = ick2.Build(self.resource)
+ build.set_status('building')
+ build.set_status('done')
+ self.assertEqual(build.get_status(), 'done')
+
+ def test_changes_status_from_building_to_failed(self):
+ build = ick2.Build(self.resource)
+ build.set_status('building')
+ build.set_status('failed')
+ self.assertEqual(build.get_status(), 'failed')
+
+ def test_has_empty_build_graph_initially(self):
+ build = ick2.Build(self.resource)
+ graph = build.get_graph()
+ self.assertTrue(isinstance(graph, ick2.BuildGraph))
+ self.assertEqual(graph.get_actions(), {})
+
+ def test_has_build_graph_from_resource(self):
+ self.resource['graph'] = {
+ 1: {
+ 'action': {'action': 'foo'},
+ 'status': 'ready',
+ 'depends': [],
+ },
+ }
+ build = ick2.Build(self.resource)
+ graph = build.get_graph()
+ self.assertEqual(graph.get_actions(), self.resource['graph'])
+
+ def test_appending_actions_to_build_graph_shows_in_build_resource(self):
+ build = ick2.Build(self.resource)
+ graph = build.get_graph()
+ action_id = graph.append_action({'action': 'foo'})
+ self.assertEqual(
+ self.resource['graph'],
+ {
+ action_id: {
+ 'action': {'action': 'foo'},
+ 'status': 'ready',
+ 'depends': [],
+ },
+ }
+ )
+
+ def test_updating_actions_in_build_graph_changes_build_resource(self):
+ build = ick2.Build(self.resource)
+ graph = build.get_graph()
+ action_id = graph.append_action({'action': 'foo'})
+ graph.set_action_status(action_id, 'building')
+ self.assertEqual(
+ self.resource['graph'],
+ {
+ action_id: {
+ 'action': {'action': 'foo'},
+ 'status': 'building',
+ 'depends': [],
+ },
+ }
+ )