Anki/tests/test_cards.py
Damien Elmes 31a548ee42 add a dirty flag
when we make changes that need to be cleaned up on exit, we mark the deck
dirty so that if we exit without saving, we can clean up on next open
2011-04-28 09:23:57 +09:00

87 lines
2.8 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
# 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