# Copyright (C) 2019 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 shutil import tempfile import unittest import ick2 class StoreTests(unittest.TestCase): def setUp(self): self.store = ick2.MemoryStore() self.token = 'dummy-test-token' self.obj = { 'foo': 'bar', } def create(self): return self.store.create(self.token, self.obj) def find_all_resources(self): cond = [ { 'where': 'meta', 'field': 'id', 'op': '!=', 'pattern': '', } ] return self.store.search(self.token, cond) def test_has_no_resources_initially(self): self.assertEqual(self.find_all_resources(), []) def test_creates_resource(self): rid, rev = self.create() self.assertTrue(isinstance(rid, str)) self.assertTrue(isinstance(rev, str)) self.assertTrue(rid) self.assertTrue(rev) self.assertEqual(self.find_all_resources(), [rid]) def test_retrieves_resource(self): rid, rev = self.create() obj, rev = self.store.show(self.token, rid) self.assertEqual(obj, self.obj) self.assertFalse(obj is self.obj) def test_retrieving_nonexistent_resource_raises_error(self): with self.assertRaises(ick2.NotFound): self.store.show(self.token, 'wrong.id') def test_updating_with_wrong_revision_raises_error(self): rid, rev = self.create() with self.assertRaises(ick2.Conflict): self.store.update(self.token, rid, self.obj, 'wrong.revision') def test_updates_resource(self): rid, rev = self.create() obj2 = { 'yo': 'yoyo', } rev2 = self.store.update(self.token, rid, obj2, rev) obj3, rev3 = self.store.show(self.token, rid) self.assertTrue(rev2) self.assertNotEqual(rev, rev2) self.assertEqual(rev2, rev3) self.assertEqual(obj2, obj3) def test_deletes_resource(self): rid, rev = self.create() self.store.delete(self.token, rid) self.assertEqual(self.find_all_resources(), [])