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