Split tests into special and normal cases for create_snapshot(), dunder and normal methods
This commit is contained in:
		@@ -23,7 +23,63 @@ VALID_SNAPSHOT_NAME = r"[\w._+-]+[^/]*"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# ========== Integration Tests ==========
 | 
			
		||||
class TestRepositoryPreCreate(unittest.TestCase):
 | 
			
		||||
class TestDunderMethods(unittest.TestCase):
 | 
			
		||||
    """Test dunder methods of the Repository.
 | 
			
		||||
 | 
			
		||||
    Mocked Modules/Classes
 | 
			
		||||
    ----------------------
 | 
			
		||||
    rbackup.struct.repository.Snapshot
 | 
			
		||||
 | 
			
		||||
    Mocked Attributes
 | 
			
		||||
    -----------------
 | 
			
		||||
    * Repository.read_metadata
 | 
			
		||||
    * Repository.write_metadata
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self.patched_path = patch.multiple(
 | 
			
		||||
            Path, exists=DEFAULT, mkdir=DEFAULT, symlink_to=DEFAULT, touch=DEFAULT
 | 
			
		||||
        )
 | 
			
		||||
        self.patched_metadata = patch.multiple(
 | 
			
		||||
            Repository, read_metadata=DEFAULT, write_metadata=DEFAULT
 | 
			
		||||
        )
 | 
			
		||||
        self.patched_snapshot = patch(
 | 
			
		||||
            f"{TESTING_PACKAGE}.repository.Snapshot", spec_set=Snapshot
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self.mocked_path = self.patched_path.start()
 | 
			
		||||
        self.mocked_metadata = self.patched_metadata.start()
 | 
			
		||||
        self.mocked_snapshot = self.patched_snapshot.start()
 | 
			
		||||
 | 
			
		||||
        self.mocked_path["exists"].return_value = True
 | 
			
		||||
 | 
			
		||||
    @given(lists(from_regex(VALID_SNAPSHOT_NAME, fullmatch=True), unique=True))
 | 
			
		||||
    def test_dunder_len(self, snapshots):
 | 
			
		||||
        self.mocked_metadata["read_metadata"].return_value = snapshots.copy()
 | 
			
		||||
        repo = Repository("/tmp/backup")
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(len(repo), len(snapshots))
 | 
			
		||||
        self.assertEqual(len(repo.snapshots), len(snapshots))
 | 
			
		||||
 | 
			
		||||
        repo.create_snapshot()
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(len(repo), len(snapshots) + 1)
 | 
			
		||||
        self.assertEqual(len(repo.snapshots), len(snapshots) + 1)
 | 
			
		||||
 | 
			
		||||
    @given(from_regex(VALID_SNAPSHOT_NAME, fullmatch=True))
 | 
			
		||||
    def test_dunder_contains(self, name):
 | 
			
		||||
        self.mocked_metadata["read_metadata"].return_value = []
 | 
			
		||||
        repo = Repository("/tmp/backup")
 | 
			
		||||
 | 
			
		||||
        self.assertFalse(name in repo)
 | 
			
		||||
        repo.create_snapshot(name)
 | 
			
		||||
        self.assertTrue(name in repo)
 | 
			
		||||
 | 
			
		||||
    def tearDown(self):
 | 
			
		||||
        patch.stopall()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestProperties(unittest.TestCase):
 | 
			
		||||
    """Test properties of the Repository before running create_snapshot().
 | 
			
		||||
 | 
			
		||||
    Mocked Modules/Classes
 | 
			
		||||
@@ -63,20 +119,6 @@ class TestRepositoryPreCreate(unittest.TestCase):
 | 
			
		||||
        else:
 | 
			
		||||
            self.assertFalse(repo.empty)
 | 
			
		||||
 | 
			
		||||
    @given(lists(from_regex(VALID_SNAPSHOT_NAME, fullmatch=True), unique=True))
 | 
			
		||||
    def test_dunder_len(self, snapshots):
 | 
			
		||||
        self.mocked_metadata["read_metadata"].return_value = snapshots.copy()
 | 
			
		||||
        repo = Repository("/tmp/backup")
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(len(repo.snapshots), len(snapshots))
 | 
			
		||||
 | 
			
		||||
    @given(text(min_size=1))
 | 
			
		||||
    def test_dunder_contains(self, name):
 | 
			
		||||
        self.mocked_metadata["read_metadata"].return_value = []
 | 
			
		||||
        repo = Repository("/tmp/backup")
 | 
			
		||||
 | 
			
		||||
        self.assertFalse(name in repo)
 | 
			
		||||
 | 
			
		||||
    @given(text())
 | 
			
		||||
    def test_valid_name(self, name):
 | 
			
		||||
        self.mocked_metadata["read_metadata"].return_value = []
 | 
			
		||||
@@ -103,7 +145,7 @@ class TestRepositoryPreCreate(unittest.TestCase):
 | 
			
		||||
        patch.stopall()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestRepositoryPostCreate(unittest.TestCase):
 | 
			
		||||
class TestRepositoryCreateSnapshotNormalCases(unittest.TestCase):
 | 
			
		||||
    """Test properties of the Repository after running create_snapshot().
 | 
			
		||||
 | 
			
		||||
    Mocked Modules/Classes
 | 
			
		||||
@@ -133,38 +175,46 @@ class TestRepositoryPostCreate(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
        self.mocked_path["exists"].return_value = True
 | 
			
		||||
 | 
			
		||||
    @given(lists(from_regex(VALID_SNAPSHOT_NAME, fullmatch=True), unique=True))
 | 
			
		||||
    def test_dunder_len(self, snapshots):
 | 
			
		||||
        self.mocked_metadata["read_metadata"].return_value = snapshots.copy()
 | 
			
		||||
        repo = Repository("/tmp/backup")
 | 
			
		||||
 | 
			
		||||
        repo.create_snapshot()
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(len(repo), len(snapshots) + 1)
 | 
			
		||||
        self.assertEqual(len(repo.snapshots), len(snapshots) + 1)
 | 
			
		||||
 | 
			
		||||
    @given(from_regex(VALID_SNAPSHOT_NAME, fullmatch=True))
 | 
			
		||||
    def test_dunder_contains(self, name):
 | 
			
		||||
        self.mocked_path["exists"].return_value = False
 | 
			
		||||
        repo = Repository("/tmp/backup")
 | 
			
		||||
 | 
			
		||||
        repo.create_snapshot(name)
 | 
			
		||||
        self.assertTrue(name in repo)
 | 
			
		||||
 | 
			
		||||
    def test_empty(self):
 | 
			
		||||
        self.mocked_metadata["read_metadata"].return_value = []
 | 
			
		||||
        repo = Repository("/tmp/backup")
 | 
			
		||||
 | 
			
		||||
        repo.create_snapshot()
 | 
			
		||||
 | 
			
		||||
        self.assertFalse(repo.empty)
 | 
			
		||||
 | 
			
		||||
    def test_snapshot_returns_snapshot_object(self):
 | 
			
		||||
    def test_returns_snapshot_object(self):
 | 
			
		||||
        self.mocked_metadata["read_metadata"].return_value = []
 | 
			
		||||
        repo = Repository("/tmp/backup")
 | 
			
		||||
 | 
			
		||||
        self.assertIsInstance(repo.create_snapshot(), Snapshot)
 | 
			
		||||
 | 
			
		||||
    def tearDown(self):
 | 
			
		||||
        patch.stopall()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestRepositoryCreateSnapshotSpecialCases(unittest.TestCase):
 | 
			
		||||
    """Test properties of the Repository after running create_snapshot().
 | 
			
		||||
 | 
			
		||||
    Mocked Modules/Classes
 | 
			
		||||
    ----------------------
 | 
			
		||||
    rbackup.struct.repository.Snapshot
 | 
			
		||||
 | 
			
		||||
    Mocked Attributes
 | 
			
		||||
    -----------------
 | 
			
		||||
    * Repository.read_metadata
 | 
			
		||||
    * Repository.write_metadata
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self.patched_path = patch.multiple(
 | 
			
		||||
            Path, exists=DEFAULT, mkdir=DEFAULT, symlink_to=DEFAULT, touch=DEFAULT
 | 
			
		||||
        )
 | 
			
		||||
        self.patched_metadata = patch.multiple(
 | 
			
		||||
            Repository, read_metadata=DEFAULT, write_metadata=DEFAULT
 | 
			
		||||
        )
 | 
			
		||||
        self.patched_snapshot = patch(
 | 
			
		||||
            f"{TESTING_PACKAGE}.repository.Snapshot", spec_set=Snapshot
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self.mocked_path = self.patched_path.start()
 | 
			
		||||
        self.mocked_metadata = self.patched_metadata.start()
 | 
			
		||||
        self.mocked_snapshot = self.patched_snapshot.start()
 | 
			
		||||
 | 
			
		||||
        self.mocked_path["exists"].return_value = True
 | 
			
		||||
 | 
			
		||||
    def test_create_duplicate_snapshot(self):
 | 
			
		||||
        # Test that if a snapshot is a duplicate, then return that duplicate snapshot
 | 
			
		||||
        self.mocked_metadata["read_metadata"].return_value = []
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user