Move version checks to a separate function, add test
This commit is contained in:
parent
8195e58e3b
commit
2dc1f28b04
@ -52,6 +52,18 @@ class SyncCollectionHandler(Syncer):
|
||||
# So that 'server' (the 3rd argument) can't get set
|
||||
Syncer.__init__(self, col)
|
||||
|
||||
@staticmethod
|
||||
def _old_client(cv):
|
||||
if not cv:
|
||||
return False
|
||||
|
||||
client, version, platform = cv.split(',')
|
||||
version_int = [ int(str(x).translate(None, string.ascii_letters))
|
||||
for x in version.split('.') ]
|
||||
|
||||
return (client == 'ankidroid' and version_int < [2, 3, 0]) \
|
||||
or (client == 'ankidesktop' and version_int < [2, 0, 27])
|
||||
|
||||
def meta(self):
|
||||
# Make sure the media database is open!
|
||||
if self.col.media.db is None:
|
||||
@ -498,15 +510,11 @@ class SyncApp(object):
|
||||
del data['v']
|
||||
if data.has_key('cv'):
|
||||
session.client_version = data['cv']
|
||||
client, version, platform = data['cv'].split(',')
|
||||
del data['cv']
|
||||
|
||||
version_int = [ int(str(x).translate(None, string.ascii_letters))
|
||||
for x in version.split('.') ]
|
||||
if self.session.collection_handler._old_client(session.client_version):
|
||||
return Response(status="501") # client needs upgrade
|
||||
|
||||
if (client == 'ankidroid' and version_int < [2, 3, 0]) \
|
||||
or (client == 'ankidesktop' and version_int < [2, 0, 27]):
|
||||
return Response(status="501") # client needs upgrade
|
||||
self.session_manager.save(hkey, session)
|
||||
session = self.session_manager.load(hkey, self.create_session)
|
||||
|
||||
|
||||
@ -21,26 +21,35 @@ class SyncCollectionHandlerTest(CollectionTestBase):
|
||||
CollectionTestBase.tearDown(self)
|
||||
self.syncCollectionHandler = None
|
||||
|
||||
def test_old_client(self):
|
||||
old = (
|
||||
','.join(('ankidesktop', '2.0.12', 'lin::')),
|
||||
','.join(('ankidesktop', '2.0.26', 'lin::')),
|
||||
','.join(('ankidroid', '2.1', '')),
|
||||
','.join(('ankidroid', '2.2', '')),
|
||||
#','.join(('ankidroid', '2.2.2', '')),
|
||||
#','.join(('ankidroid', '2.3alpha3', '')),
|
||||
)
|
||||
|
||||
current = (
|
||||
None,
|
||||
','.join(('ankidesktop', '2.0.27', 'lin::')),
|
||||
','.join(('ankidesktop', '2.0.32', 'lin::')),
|
||||
','.join(('ankidesktop', '2.1.0', 'lin::')),
|
||||
','.join(('ankidroid', '2.2.3', '')),
|
||||
','.join(('ankidroid', '2.3alpha4', '')),
|
||||
','.join(('ankidroid', '2.9', '')),
|
||||
)
|
||||
|
||||
# FIXME: unittest is too dumb to print the failing version
|
||||
for cv in old:
|
||||
self.assertTrue(self.syncCollectionHandler._old_client(cv))
|
||||
|
||||
for cv in current:
|
||||
self.assertFalse(self.syncCollectionHandler._old_client(cv))
|
||||
|
||||
def test_meta(self):
|
||||
version_info = (None,
|
||||
','.join(('ankidesktop', '2.0.12', 'lin::')),
|
||||
','.join(('ankidesktop', '2.0.32', 'lin::')))
|
||||
|
||||
meta = self.syncCollectionHandler.meta(version_info[0])
|
||||
self.assertEqual(meta[0], self.collection.mod)
|
||||
self.assertEqual(meta[1], self.collection.scm)
|
||||
self.assertEqual(meta[2], self.collection._usn)
|
||||
self.assertTrue((type(meta[3]) == int) and meta[3] > 0)
|
||||
self.assertEqual(meta[4], self.collection.media.usn())
|
||||
|
||||
meta = self.syncCollectionHandler.meta(version_info[1])
|
||||
self.assertEqual(meta[0], self.collection.mod)
|
||||
self.assertEqual(meta[1], self.collection.scm)
|
||||
self.assertEqual(meta[2], self.collection._usn)
|
||||
self.assertTrue((type(meta[3]) == int) and meta[3] > 0)
|
||||
self.assertEqual(meta[4], self.collection.media.usn())
|
||||
|
||||
meta = self.syncCollectionHandler.meta(version_info[2])
|
||||
meta = self.syncCollectionHandler.meta()
|
||||
self.assertEqual(meta['scm'], self.collection.scm)
|
||||
self.assertTrue((type(meta['ts']) == int) and meta['ts'] > 0)
|
||||
self.assertEqual(meta['mod'], self.collection.mod)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user