diff options
author | Lars Wirzenius <liw@exolobe1> | 2018-05-13 15:30:23 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2018-05-17 21:44:59 +0300 |
commit | b11d31ef23c5dfee6bfa54afbec47fc8b8bab7b1 (patch) | |
tree | 2e6b085f8fb023d53c8ac20a97aef2c7d1c11d4b /ick2/persistent_tests.py | |
parent | 531dd2c50bfdfcf50bb37f57cf9fc2b69787adcf (diff) | |
download | ick2-b11d31ef23c5dfee6bfa54afbec47fc8b8bab7b1.tar.gz |
Change: how controller stores persistent data
Replace old State class with new FilePersistentState and
TransactionalState classes. Use new Resource class instead of raw
dicts. Use context managers for creating, updating resources, to avoid
mistakes from accidentally not saving changes.
Overall persistence should now be rather simpler. This should open up
a possibility for changing the controller to insert more actions into
the build graph, to trigger notifcations via the workers.
Diffstat (limited to 'ick2/persistent_tests.py')
-rw-r--r-- | ick2/persistent_tests.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/ick2/persistent_tests.py b/ick2/persistent_tests.py new file mode 100644 index 0000000..8acb141 --- /dev/null +++ b/ick2/persistent_tests.py @@ -0,0 +1,66 @@ +# 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 shutil +import tempfile +import unittest + + +import ick2 + + +class FilePersistentStateTests(unittest.TestCase): + + def setUp(self): + self.tempdir = tempfile.mkdtemp() + self.state = ick2.FilePersistentState() + self.state.set_directory(self.tempdir) + + def tearDown(self): + shutil.rmtree(self.tempdir) + + def test_returns_dirname(self): + self.assertEqual(self.state.get_directory(), self.tempdir) + + def test_has_no_resource_kinds_initially(self): + self.assertEqual(self.state.get_resource_kinds(), []) + + def test_has_no_resources_initially(self): + self.assertEqual(self.state.get_resource_ids('silly'), []) + + def test_has_no_resource_initially(self): + with self.assertRaises(ick2.NotFound): + self.state.get_resource('silly', '#1') + + def test_creates_resource(self): + as_dict = {'foo': 'bar'} + r = ick2.resource_from_dict(as_dict) + self.state.write_resource('silly', '#1', r) + self.assertTrue(self.state.has_resource('silly', '#1')) + self.assertEqual(self.state.get_resource_kinds(), ['silly']) + self.assertEqual(self.state.get_resource_ids('silly'), ['#1']) + + r2 = self.state.get_resource('silly', '#1') + self.assertTrue(isinstance(r2, ick2.Resource)) + self.assertEqual(r.as_dict(), r2.as_dict()) + + def test_removes_resource(self): + as_dict = {'foo': 'bar'} + r = ick2.resource_from_dict(as_dict) + self.state.write_resource('silly', '#1', r) + self.state.remove_resource('silly', '#1') + self.assertFalse(self.state.has_resource('silly', '#1')) + self.assertEqual(self.state.get_resource_ids('silly'), []) |