diff --git a/rbackup/tests/test_repository.py b/rbackup/tests/test_repository.py index 46adcff..53ae00a 100644 --- a/rbackup/tests/test_repository.py +++ b/rbackup/tests/test_repository.py @@ -1,12 +1,12 @@ -import doctest +# import doctest import unittest from hypothesis import given from hypothesis.strategies import builds, lists, text -from pathlib import Path, PosixPath +from pathlib import Path from rbackup.hierarchy.repository import Repository from rbackup.hierarchy.snapshot import Snapshot -from unittest.mock import patch, MagicMock, PropertyMock +from unittest.mock import PropertyMock, patch # ========== Constants ========== TESTING_PACKAGE = "rbackup.hierarchy" @@ -15,31 +15,36 @@ SS_MODULE = f"{TESTING_PACKAGE}.snapshot" # ========== Functions ========== -def load_tests(loader, tests, ignore): - tests.addTests(doctest.DocTestSuite(REPO_MODULE)) - return tests +# @unittest.skip("Repositories create files, this should be mocked out") +# def load_tests(loader, tests, ignore): +# tests.addTests(doctest.DocTestSuite(REPO_MODULE)) +# return tests # ========== Integration Tests ========== class TestRepositoryPreCreate(unittest.TestCase): """Test properties of the Repository before running create_snapshot().""" + def setUp(self): + self.patched_path = patch.object( + Repository, "metadata_path", new_callable=PropertyMock + ) self.patched_snapshot = patch( f"{TESTING_PACKAGE}.repository.Snapshot", spec_set=Snapshot ) - self.patched_snapshots = patch.object( - Repository, "snapshots", new_callable=PropertyMock - ) self.patched_pickle = patch(f"{TESTING_PACKAGE}.repository.pickle") - self.repo_snapshots = self.patched_snapshots.start() + self.mocked_path = self.patched_path.start() self.mocked_snapshot = self.patched_snapshot.start() self.mocked_pickle = self.patched_pickle.start() @given(lists(builds(Snapshot, text()), unique=True)) def test_empty(self, l): - repo = Repository('backup') - self.repo_snapshots.return_value = l + self.mocked_pickle.load.return_value = { + "snapshots": l.copy(), + "current_snapshot": l[-1] if l else None, + } + repo = Repository("backup") if l == []: self.assertTrue(repo.empty) @@ -48,15 +53,27 @@ class TestRepositoryPreCreate(unittest.TestCase): @given(lists(builds(Snapshot, text()), unique=True)) def test_len(self, l): - repo = Repository('backup') - self.repo_snapshots.return_value = l + self.mocked_pickle.load.return_value = { + "snapshots": l.copy(), + "current_snapshot": l[-1] if l else None, + } + + repo = Repository("backup") self.assertEqual(len(repo.snapshots), len(l)) @given(lists(builds(Snapshot, text()), unique=True)) def test_current_snapshot(self, l): - self.repo_snapshots.return_value = l - repo = Repository('backup') + self.mocked_pickle.load.return_value = { + "snapshots": l.copy(), + "current_snapshot": l[-1] if l else None, + } + + if l == []: + self.mocked_pickle.load.return_value["current_snapshot"] = None + else: + self.mocked_pickle.load.return_value["current_snapshot"] = l[-1] + repo = Repository("backup") if l == []: self.assertIsNone(repo.current_snapshot) @@ -65,30 +82,39 @@ class TestRepositoryPreCreate(unittest.TestCase): self.assertIsInstance(repo.current_snapshot, Snapshot) def tearDown(self): - self.patched_snapshots.stop() + self.patched_path.stop() self.patched_snapshot.stop() self.patched_pickle.stop() class TestRepositoryPostCreate(unittest.TestCase): """Test properties of the Repository before running create_snapshot().""" + def setUp(self): + self.patched_path = patch.object( + Repository, "metadata_path", new_callable=PropertyMock + ) self.patched_snapshot = patch( f"{TESTING_PACKAGE}.repository.Snapshot", spec_set=Snapshot ) - self.patched_snapshots = patch.object( - Repository, "snapshots", new_callable=PropertyMock - ) self.patched_pickle = patch(f"{TESTING_PACKAGE}.repository.pickle") - self.repo_snapshots = self.patched_snapshots.start() + self.mocked_path = self.patched_path.start() self.mocked_snapshot = self.patched_snapshot.start() self.mocked_pickle = self.patched_pickle.start() @given(lists(builds(Snapshot, text()), unique=True)) def test_empty(self, l): - self.repo_snapshots.return_value = l.copy() - repo = Repository('backup') + self.mocked_pickle.load.return_value = { + "snapshots": l.copy(), + "current_snapshot": l[-1] if l else None, + } + + if l == []: + self.mocked_pickle.load.return_value["current_snapshot"] = None + else: + self.mocked_pickle.load.return_value["current_snapshot"] = l[-1] + repo = Repository("backup") repo.create_snapshot() @@ -96,17 +122,24 @@ class TestRepositoryPostCreate(unittest.TestCase): @given(lists(builds(Snapshot, text()), unique=True)) def test_len(self, l): - self.repo_snapshots.return_value = l.copy() - repo = Repository('backup') + self.mocked_pickle.load.return_value = { + "snapshots": l.copy(), + "current_snapshot": l[-1] if l else None, + } + repo = Repository("backup") repo.create_snapshot() + self.assertEqual(len(repo), len(l) + 1) self.assertEqual(len(repo.snapshots), len(l) + 1) @given(lists(builds(Snapshot, text()), unique=True)) def test_current_snapshot(self, l): - self.repo_snapshots.return_value = l.copy() - repo = Repository('backup') + self.mocked_pickle.load.return_value = { + "snapshots": l.copy(), + "current_snapshot": l[-1] if l else None, + } + repo = Repository("backup") new_snapshot = repo.create_snapshot() @@ -114,6 +147,6 @@ class TestRepositoryPostCreate(unittest.TestCase): self.assertIsInstance(new_snapshot, Snapshot) def tearDown(self): - self.patched_snapshots.stop() + self.patched_path.stop() self.patched_snapshot.stop() self.patched_pickle.stop()