58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
import unittest
|
|
import tempfile
|
|
import os
|
|
from unittest.mock import MagicMock
|
|
import shutil
|
|
|
|
import anki
|
|
import anki.storage
|
|
|
|
from ankisyncd.collection import CollectionManager
|
|
|
|
|
|
class CollectionTestBase(unittest.TestCase):
|
|
"""Parent class for tests that need a collection set up and torn down."""
|
|
|
|
def setUp(self):
|
|
self.temp_dir = tempfile.mkdtemp()
|
|
self.collection_path = os.path.join(self.temp_dir, "collection.anki2")
|
|
cm = CollectionManager({})
|
|
collectionWrapper = cm.get_collection(self.collection_path)
|
|
self.collection = collectionWrapper._get_collection()
|
|
self.mock_app = MagicMock()
|
|
|
|
def tearDown(self):
|
|
self.collection.close()
|
|
self.collection = None
|
|
shutil.rmtree(self.temp_dir)
|
|
self.mock_app.reset_mock()
|
|
|
|
# TODO: refactor into some kind of utility
|
|
def add_note(self, data):
|
|
from anki.notes import Note
|
|
|
|
model = self.collection.models.byName(data["model"])
|
|
|
|
note = Note(self.collection, model)
|
|
for name, value in data["fields"].items():
|
|
note[name] = value
|
|
|
|
if "tags" in data:
|
|
note.setTagsFromStr(data["tags"])
|
|
|
|
self.collection.addNote(note)
|
|
|
|
# TODO: refactor into a parent class
|
|
def add_default_note(self, count=1):
|
|
data = {
|
|
"model": "Basic",
|
|
"fields": {
|
|
"Front": "The front",
|
|
"Back": "The back",
|
|
},
|
|
"tags": "Tag1 Tag2",
|
|
}
|
|
for idx in range(0, count):
|
|
self.add_note(data)
|