mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 06:22:22 -04:00

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
87 lines
2.8 KiB
Python
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
|