# -*- coding: utf-8; -*- from pathlib import Path from unittest import TestCase from unittest.mock import patch, MagicMock from fabsync import SyncedRoot, ItemSelector from wuttamess import sync as mod class TestMakeRoot(TestCase): def test_basic(self): root = mod.make_root("files") self.assertIsInstance(root, SyncedRoot) self.assertEqual(root.src, Path("files")) self.assertEqual(root.dest, Path("/")) class TestMakeSelector(TestCase): def test_basic(self): selector = mod.make_selector("etc/postfix") self.assertIsInstance(selector, ItemSelector) self.assertEqual(selector.subpath, Path("etc/postfix")) class TestIsync(TestCase): def test_basic(self): c = MagicMock() root = mod.make_root("files") with patch.object(mod, "fabsync") as fabsync: fabsync.ItemSelector = ItemSelector # nothing to sync fabsync.isync.return_value = [] results = list(mod.isync(c, root)) self.assertEqual(results, []) fabsync.isync.assert_called_once_with(c, root) # sync one file fabsync.isync.reset_mock() result = MagicMock(path="/foo", modified=True) fabsync.isync.return_value = [result] results = list(mod.isync(c, root)) self.assertEqual(results, [result]) fabsync.isync.assert_called_once_with(c, root) # sync with selector (subpath) fabsync.isync.reset_mock() result = MagicMock(path="/foo", modified=True) fabsync.isync.return_value = [result] results = list(mod.isync(c, root, "foo")) self.assertEqual(results, [result]) fabsync.isync.assert_called_once_with( c, root, selector=fabsync.ItemSelector.new("foo") ) # sync with selector (subpath + tags) fabsync.isync.reset_mock() result = MagicMock(path="/foo", modified=True) fabsync.isync.return_value = [result] results = list(mod.isync(c, root, "foo", tags={"bar"})) self.assertEqual(results, [result]) fabsync.isync.assert_called_once_with( c, root, selector=fabsync.ItemSelector.new("foo", tags={"bar"}) ) class TestCheckIsync(TestCase): def test_basic(self): c = MagicMock() root = mod.make_root("files") with patch.object(mod, "isync") as isync: # file(s) modified result = MagicMock(path="/foo", modified=True) isync.return_value = [result] self.assertTrue(mod.check_isync(c, root)) # not modified result = MagicMock(path="/foo", modified=False) isync.return_value = [result] self.assertFalse(mod.check_isync(c, root))