diff options
Diffstat (limited to 'tests/test_subcmds_sync.py')
-rw-r--r-- | tests/test_subcmds_sync.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/tests/test_subcmds_sync.py b/tests/test_subcmds_sync.py index 5c8e606e..057478ef 100644 --- a/tests/test_subcmds_sync.py +++ b/tests/test_subcmds_sync.py | |||
@@ -14,6 +14,8 @@ | |||
14 | """Unittests for the subcmds/sync.py module.""" | 14 | """Unittests for the subcmds/sync.py module.""" |
15 | 15 | ||
16 | import os | 16 | import os |
17 | import shutil | ||
18 | import tempfile | ||
17 | import unittest | 19 | import unittest |
18 | from unittest import mock | 20 | from unittest import mock |
19 | 21 | ||
@@ -104,6 +106,79 @@ def test_cli_jobs(argv, jobs_manifest, jobs, jobs_net, jobs_check): | |||
104 | assert opts.jobs_checkout == jobs_check | 106 | assert opts.jobs_checkout == jobs_check |
105 | 107 | ||
106 | 108 | ||
109 | class LocalSyncState(unittest.TestCase): | ||
110 | """Tests for _LocalSyncState.""" | ||
111 | |||
112 | _TIME = 10 | ||
113 | |||
114 | def setUp(self): | ||
115 | """Common setup.""" | ||
116 | self.repodir = tempfile.mkdtemp(".repo") | ||
117 | self.manifest = mock.MagicMock( | ||
118 | repodir=self.repodir, | ||
119 | ) | ||
120 | self.state = self._new_state() | ||
121 | |||
122 | def tearDown(self): | ||
123 | """Common teardown.""" | ||
124 | shutil.rmtree(self.repodir) | ||
125 | |||
126 | def _new_state(self): | ||
127 | with mock.patch("time.time", return_value=self._TIME): | ||
128 | return sync._LocalSyncState(self.manifest) | ||
129 | |||
130 | def test_set(self): | ||
131 | """Times are set.""" | ||
132 | p = mock.MagicMock(relpath="projA") | ||
133 | self.state.SetFetchTime(p) | ||
134 | self.state.SetCheckoutTime(p) | ||
135 | self.assertEqual(self.state.GetFetchTime(p), self._TIME) | ||
136 | self.assertEqual(self.state.GetCheckoutTime(p), self._TIME) | ||
137 | |||
138 | def test_update(self): | ||
139 | """Times are updated.""" | ||
140 | with open(self.state._path, "w") as f: | ||
141 | f.write( | ||
142 | """ | ||
143 | { | ||
144 | "projB": { | ||
145 | "last_fetch": 5, | ||
146 | "last_checkout": 7 | ||
147 | } | ||
148 | } | ||
149 | """ | ||
150 | ) | ||
151 | |||
152 | # Initialize state to read from the new file. | ||
153 | self.state = self._new_state() | ||
154 | projA = mock.MagicMock(relpath="projA") | ||
155 | projB = mock.MagicMock(relpath="projB") | ||
156 | self.assertEqual(self.state.GetFetchTime(projA), None) | ||
157 | self.assertEqual(self.state.GetFetchTime(projB), 5) | ||
158 | self.assertEqual(self.state.GetCheckoutTime(projB), 7) | ||
159 | |||
160 | self.state.SetFetchTime(projA) | ||
161 | self.state.SetFetchTime(projB) | ||
162 | self.assertEqual(self.state.GetFetchTime(projA), self._TIME) | ||
163 | self.assertEqual(self.state.GetFetchTime(projB), self._TIME) | ||
164 | self.assertEqual(self.state.GetCheckoutTime(projB), 7) | ||
165 | |||
166 | def test_save_to_file(self): | ||
167 | """Data is saved under repodir.""" | ||
168 | p = mock.MagicMock(relpath="projA") | ||
169 | self.state.SetFetchTime(p) | ||
170 | self.state.Save() | ||
171 | self.assertEqual( | ||
172 | os.listdir(self.repodir), [".repo_localsyncstate.json"] | ||
173 | ) | ||
174 | |||
175 | def test_nonexistent_project(self): | ||
176 | """Unsaved projects don't have data.""" | ||
177 | p = mock.MagicMock(relpath="projC") | ||
178 | self.assertEqual(self.state.GetFetchTime(p), None) | ||
179 | self.assertEqual(self.state.GetCheckoutTime(p), None) | ||
180 | |||
181 | |||
107 | class GetPreciousObjectsState(unittest.TestCase): | 182 | class GetPreciousObjectsState(unittest.TestCase): |
108 | """Tests for _GetPreciousObjectsState.""" | 183 | """Tests for _GetPreciousObjectsState.""" |
109 | 184 | ||