anki-sync-server/tests/sync_app_functional_test_base.py
Christoph Mack 573aeece81 Add more test helpers and integration tests for SyncApp's media sync feature using WebTest's TestApp.
Add test helpers for creating, inspecting and manipulating instances of SyncApp and RestApp.
Add subclasses of Anki's RemoteServer and RemoteMediaServer for communicating with the wrapped SyncApp instance under test.
Add helpers for monkey patching Anki's MediaManager and DB for easier testing.
Add test assets directory.
2017-10-28 22:36:48 +02:00

82 lines
2.5 KiB
Python

# -*- coding: utf-8 -*-
import os
import unittest
from webtest import TestApp
from ankisyncd.users import UserManager
from helpers.collection_utils import CollectionUtils
from helpers.db_utils import DBUtils
from helpers.file_utils import FileUtils
from helpers.mock_servers import MockRemoteServer
from helpers.monkey_patches import monkeypatch_db, unpatch_db
from helpers.server_utils import ServerUtils
class SyncAppFunctionalTestBase(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.fileutils = FileUtils()
cls.colutils = CollectionUtils()
cls.serverutils = ServerUtils()
cls.dbutils = DBUtils()
@classmethod
def tearDownClass(cls):
cls.fileutils.clean_up()
cls.fileutils = None
cls.colutils.clean_up()
cls.colutils = None
cls.serverutils.clean_up()
cls.serverutils = None
cls.dbutils.clean_up()
cls.dbutils = None
def setUp(self):
monkeypatch_db()
# Create temporary files and dirs the server will use.
self.server_paths = self.serverutils.create_server_paths()
# Add a test user to the temp auth db the server will use.
self.user_manager = UserManager(self.server_paths['auth_db'],
self.server_paths['data_root'])
self.user_manager.add_user('testuser', 'testpassword')
# 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 SyncApp instance using the dev ini file and the temporary
# paths.
self.server_app = self.serverutils.create_sync_app(self.server_paths,
ini_file_path)
# Wrap the SyncApp object in TestApp instance for testing.
self.server_test_app = TestApp(self.server_app)
# MockRemoteServer instance needed for testing normal collection
# syncing and for retrieving hkey for other tests.
self.mock_remote_server = MockRemoteServer(hkey=None,
server_test_app=self.server_test_app)
def tearDown(self):
self.server_paths = {}
self.user_manager = None
# Shut down server.
self.server_app.collection_manager.shutdown()
self.server_app = None
self.client_server_connection = None
unpatch_db()