Anki/tests/test_cards.py
2011-04-28 09:24:02 +09:00

101 lines
3.2 KiB
Python

# coding: utf-8
from anki.consts import *
from tests.shared import getEmptyDeck
def test_genCards():
deck = getEmptyDeck()
f = deck.newFact()
f['Front'] = u'1'
f['Back'] = u'2'
deck.addFact(f)
cards = deck.genCards(f, f.model().templates)
assert len(cards) == 1
assert cards[0].ord == 1
assert deck.cardCount() == 2
assert cards[0].due == f.id
# should work on random mode too
deck.qconf['newCardOrder'] = NEW_CARDS_RANDOM
f = deck.newFact()
f['Front'] = u'1'
f['Back'] = u'2'
deck.addFact(f)
cards = deck.genCards(f, f.model().templates)
assert deck.cardCount() == 4
c = deck.db.list("select due from cards where fid = ?", f.id)
assert c[0] == c[1]
def test_previewCards():
deck = getEmptyDeck()
f = deck.newFact()
f['Front'] = u'1'
f['Back'] = u'2'
# non-empty and active
cards = deck.previewCards(f, 0)
assert len(cards) == 1
assert cards[0].ord == 0
# all templates
cards = deck.previewCards(f, 2)
assert len(cards) == 2
# add the fact, and test existing preview
deck.addFact(f)
cards = deck.previewCards(f, 1)
assert len(cards) == 1
assert cards[0].ord == 0
# make sure we haven't accidentally added cards to the db
assert deck.cardCount() == 1
def test_delete():
deck = getEmptyDeck()
f = deck.newFact()
f['Front'] = u'1'
f['Back'] = u'2'
deck.addFact(f)
cid = f.cards()[0].id
# when the schema is dirty, deletion should be immediate
assert deck.schemaChanged() == True
deck.reset()
deck.sched.answerCard(deck.sched.getCard(), 2)
assert deck.db.scalar("select count() from revlog") == 1
deck.delCard(cid)
assert deck.cardCount() == 0
assert deck.factCount() == 0
assert deck.db.scalar("select count() from facts") == 0
assert deck.db.scalar("select count() from cards") == 0
assert deck.db.scalar("select count() from fsums") == 0
assert deck.db.scalar("select count() from revlog") == 0
# add the fact back
deck.addFact(f)
assert deck.cardCount() == 1
# mark the schema as clean
deck.lastSync = deck.scm + 1
# and deck as syncable
deck.syncName = "abc"
# cards/facts should go in the deletion log instead
cid = f.cards()[0].id
deck.delCard(cid)
assert deck.cardCount() == 0
assert deck.factCount() == 0
assert deck.db.scalar("select count() from facts") == 1
assert deck.db.scalar("select count() from cards") == 1
assert deck.db.scalar("select 1 from cards where crt = 0") == 1
assert deck.db.scalar("select 1 from facts where crt = 0") == 1
assert deck.db.scalar("select queue from cards") == -4
# modifying the schema should empty the trash
deck.modSchema()
assert deck.cardCount() == 0
assert deck.factCount() == 0
assert deck.db.scalar("select count() from facts") == 0
assert deck.db.scalar("select count() from cards") == 0
def test_misc():
d = getEmptyDeck()
f = d.newFact()
f['Front'] = u'1'
f['Back'] = u'2'
d.addFact(f)
c = f.cards()[0]
assert c.cssClass() == "cm1-0"
assert c.fact().id == 1
assert c.model().id == 1
assert c.template()['ord'] == 0