# -*- coding: utf-8 -*- import os import unittest import configparser from ankisyncd.collection import CollectionWrapper from ankisyncd.collection import get_collection_wrapper import helpers.server_utils class FakeCollectionWrapper(CollectionWrapper): def __init__(self, config, path, setup_new_collection=None): self._CollectionWrapper__col = None pass class BadCollectionWrapper: pass class CollectionWrapperFactoryTest(unittest.TestCase): def test_get_collection_wrapper(self): # Get absolute path to development ini file. script_dir = os.path.dirname(os.path.realpath(__file__)) ini_file_path = os.path.join(script_dir, "assets", "test.conf") # Create temporary files and dirs the server will use. server_paths = helpers.server_utils.create_server_paths() config = configparser.ConfigParser() config.read(ini_file_path) path = os.path.realpath("fake/collection.anki2") # Use custom files and dirs in settings. Should be CollectionWrapper config["sync_app"].update(server_paths) self.assertTrue( type(get_collection_wrapper(config["sync_app"], path) == CollectionWrapper) ) # A conf-specified CollectionWrapper is loaded config.set( "sync_app", "collection_wrapper", "test_collection_wrappers.FakeCollectionWrapper", ) self.assertTrue( type(get_collection_wrapper(config["sync_app"], path)) == FakeCollectionWrapper ) # Should fail at load time if the class doesn't inherit from CollectionWrapper config.set( "sync_app", "collection_wrapper", "test_collection_wrappers.BadCollectionWrapper", ) with self.assertRaises(TypeError): pm = get_collection_wrapper(config["sync_app"], path)