anki-sync-server/tests/test_media.py
2022-10-14 20:07:21 +01:00

67 lines
2.3 KiB
Python

import os.path
import unittest
from unittest.mock import MagicMock
import ankisyncd.media
import helpers.collection_utils
class ServerMediaManagerTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.colutils = helpers.collection_utils.CollectionUtils()
@classmethod
def tearDownClass(cls):
cls.colutils.clean_up()
cls.colutils = None
# This test is currently expected to fail because the _logChanges
# method of the media manager does not exist anymore.
@unittest.expectedFailure
def test_upgrade(self):
col = self.colutils.create_empty_col()
cm = col.media
fpath = os.path.join(cm.dir(), "file")
with open(fpath + "A", "w") as f:
f.write("some contents")
with open(fpath + "B", "w") as f:
f.write("other contents")
cm._logChanges()
self.assertEqual(
set(cm.db.execute("SELECT fname, csum FROM media")),
{
("fileA", "53059abba1a72c7aff34a3eaf7fef10ed65541ce"),
("fileB", "a5ae546046d09559399c80fa7076fb10f1ce4bcd"),
},
)
cm.setLastUsn(161)
sm = ankisyncd.media.ServerMediaManager(col)
self.assertEqual(
list(sm.db.execute("SELECT fname, csum FROM media")),
list(cm.db.execute("SELECT fname, csum FROM media")),
)
self.assertEqual(cm.lastUsn(), sm.lastUsn())
self.assertEqual(list(sm.db.execute("SELECT usn FROM media")), [(161,), (161,)])
def test_mediaChanges_lastUsn_order(self):
col = self.colutils.create_empty_col()
col.media = ankisyncd.media.ServerMediaManager(col)
session = MagicMock()
session.name = "test"
mh = ankisyncd.sync_app.SyncMediaHandler(col, session)
mh.col.media.addMedia(
(
("fileA", 101, "53059abba1a72c7aff34a3eaf7fef10ed65541ce"),
("fileB", 100, "a5ae546046d09559399c80fa7076fb10f1ce4bcd"),
)
)
# anki assumes mh.col.media.lastUsn() == mh.mediaChanges()['data'][-1][1]
# ref: anki/sync.py:720 (commit cca3fcb2418880d0430a5c5c2e6b81ba260065b7)
self.assertEqual(
mh.mediaChanges(lastUsn=99)["data"][-1][1], mh.col.media.lastUsn()
)