diff --git a/tests/helpers/monkey_patches.py b/tests/helpers/monkey_patches.py index 906bce0..6a9792e 100644 --- a/tests/helpers/monkey_patches.py +++ b/tests/helpers/monkey_patches.py @@ -8,7 +8,8 @@ "findChanges": None, "mediaChangesZip": None, "addFilesFromZip": None, - "syncDelete": None + "syncDelete": None, + "_logChanges": None, } db_orig_funcs = { @@ -28,6 +29,7 @@ def make_cwd_safe(original_func): mediamanager_orig_funcs["mediaChangesZip"] = MediaManager.mediaChangesZip mediamanager_orig_funcs["addFilesFromZip"] = MediaManager.addFilesFromZip mediamanager_orig_funcs["syncDelete"] = MediaManager.syncDelete + mediamanager_orig_funcs["_logChanges"] = MediaManager._logChanges def wrapper(instance, *args): old_cwd = os.getcwd() @@ -43,6 +45,7 @@ def wrapper(instance, *args): MediaManager.mediaChangesZip = make_cwd_safe(MediaManager.mediaChangesZip) MediaManager.addFilesFromZip = make_cwd_safe(MediaManager.addFilesFromZip) MediaManager.syncDelete = make_cwd_safe(MediaManager.syncDelete) + MediaManager._logChanges = make_cwd_safe(MediaManager._logChanges) def unpatch_mediamanager(): @@ -52,11 +55,13 @@ def unpatch_mediamanager(): MediaManager.mediaChangesZip = mediamanager_orig_funcs["mediaChangesZip"] MediaManager.addFilesFromZip = mediamanager_orig_funcs["addFilesFromZip"] MediaManager.syncDelete = mediamanager_orig_funcs["syncDelete"] + MediaManager._logChanges = mediamanager_orig_funcs["_logChanges"] mediamanager_orig_funcs["findChanges"] = None mediamanager_orig_funcs["mediaChangesZip"] = None mediamanager_orig_funcs["mediaChangesZip"] = None mediamanager_orig_funcs["mediaChangesZip"] = None + mediamanager_orig_funcs["_logChanges"] = None def monkeypatch_db(): diff --git a/tests/test_web_media.py b/tests/test_web_media.py index 0ee6481..ca59d68 100644 --- a/tests/test_web_media.py +++ b/tests/test_web_media.py @@ -355,3 +355,46 @@ def test_sync_compare_database_to_expected(self): dbpath )) os.unlink(dbpath) + + def test_sync_mediaChanges(self): + client = self.client_syncer + client2 = self.create_client_syncer(self.colutils.create_empty_col(), self.hkey, self.server_test_app) + server = helpers.server_utils.get_syncer_for_hkey(self.server_app, self.hkey, 'media') + self.assertEqual(server.mediaChanges(lastUsn=client.col.media.lastUsn())['data'], []) + + helpers.server_utils.add_files_to_mediasyncer(client, [ + helpers.file_utils.create_named_file("a", "lastUsn a"), + helpers.file_utils.create_named_file("b", "lastUsn b"), + helpers.file_utils.create_named_file("c", "lastUsn c"), + ], update_db=True) + self.assertEqual(client.sync(), "OK") + self.assertEqual(server.mediaChanges(lastUsn=client.col.media.lastUsn())['data'], []) + + self.assertEqual(client2.sync(), "OK") + os.remove(os.path.join(client2.col.media.dir(), "c")) + client2.col.media._logChanges() + self.assertEqual(client2.sync(), "OK") + server.col.media._logChanges() + self.assertEqual(server.mediaChanges(lastUsn=client.col.media.lastUsn())['data'], [['c', 4, None]]) + self.assertEqual(client.sync(), "OK") + self.assertEqual(server.mediaChanges(lastUsn=client.col.media.lastUsn())['data'], []) + + helpers.server_utils.add_files_to_mediasyncer(client, [ + helpers.file_utils.create_named_file("d", "lastUsn d"), + ], update_db=True) + client.col.media._logChanges() + self.assertEqual(client.sync(), "OK") + self.assertEqual(server.mediaChanges(lastUsn=client2.col.media.lastUsn())['data'], [['d', 5, server.col.media._checksum(os.path.join(server.col.media.dir(), "d"))]]) + self.assertEqual(client2.sync(), "OK") + self.assertEqual(server.mediaChanges(lastUsn=client2.col.media.lastUsn())['data'], []) + + dpath = os.path.join(client.col.media.dir(), "d") + with open(dpath, "a") as f: + f.write("\nsome change") + # files with the same mtime and name are considered equivalent by anki.media.MediaManager._changes + os.utime(dpath, (315529200, 315529200)) + client.col.media._logChanges() + self.assertEqual(client.sync(), "OK") + self.assertEqual(server.mediaChanges(lastUsn=client2.col.media.lastUsn())['data'], [['d', 6, server.col.media._checksum(os.path.join(server.col.media.dir(), "d"))]]) + self.assertEqual(client2.sync(), "OK") + self.assertEqual(server.mediaChanges(lastUsn=client2.col.media.lastUsn())['data'], [])