summaryrefslogtreecommitdiffstats
path: root/tests/test_subcmds_sync.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_subcmds_sync.py')
-rw-r--r--tests/test_subcmds_sync.py75
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
16import os 16import os
17import shutil
18import tempfile
17import unittest 19import unittest
18from unittest import mock 20from 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
109class 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
107class GetPreciousObjectsState(unittest.TestCase): 182class GetPreciousObjectsState(unittest.TestCase):
108 """Tests for _GetPreciousObjectsState.""" 183 """Tests for _GetPreciousObjectsState."""
109 184