class TestCardModel(unittest.TestCase): def setUp(self): self.model = CardModel() self.model.open(':memory:') self.view = DummyView() self.view.setModel(self.model) def tearDown(self): self.model.close() def test_filePath(self): # test on open model self.assertEqual(self.model.filepath(), ':memory:') # test on closed model self.model.close() self.assertEqual(self.model.filepath(), None) def test_isActive(self): self.assertEqual(self.model.isActive(), True) # test on closed model self.model.close() self.assertEqual(self.model.isActive(), False) def test_checkActive(self): # open model should not raise any exception self.model._checkActive() # test if raises correct exception self.model.close() self.assertRaises(CardModel.ModelNotActiveError, self.model._checkActive) def test_columnCount(self): # test on empty model self.assertEqual(self.model.columnCount(), 5) # test on closed model self.model.close() self.assertEqual(self.model.columnCount(), 0) def test_rowCount(self): # test on empty database self.assertEqual(self.model.rowCount(), 0) # add three empty rows self.model.addNewCard() self.model.addNewCard() self.model.addNewCard() self.assertEqual(self.model.rowCount(), 3) # test on closed model self.model.close() self.assertEqual(self.model.rowCount(), 0) def test_checkIndex(self): # test if _checkIndex raises correct exception # test on None self.assertRaises(CardModel.InvalidIndexError, self.model._checkIndex, None) # test on empty idx = QModelIndex() self.assertRaises(CardModel.InvalidIndexError, self.model._checkIndex, idx) def test_index(self): # test index on empty model idx1 = self.model.index(0, 0) self.assertEqual(idx1, QModelIndex()) # add two cards and check their ids self.model.addNewCard() self.model.addNewCard() idx1 = self.model.index(0, 0) idx2 = self.model.index(1, 0) idx3 = self.model.index(2, 0) self.assertEqual(idx1.internalId(), 1) self.assertEqual(idx2.internalId(), 2) self.assertEqual(idx3, QModelIndex()) def test_data(self): # test if generates error with invalid index idx = QModelIndex() self.assertRaises(CardModel.InvalidIndexError, self.model.data, idx) def test_previousNextIndex(self): # previous index on empty index self.model.addNewCard() self.model.addNewCard() idx1 = self.model.index(0, 0) idx2 = self.model.index(1, 1) # test previous self.assertEqual(self.model.getPreviousIndex(idx2).internalId(), idx1.internalId()) # test next self.assertEqual(self.model.getNextIndex(idx1).internalId(), idx2.internalId()) def test_addNewCard(self): # test if adding new card generates a proper signal self.assertEqual(self.view.got_reset, False) self.model.addNewCard() self.model.addNewCard() self.model.addNewCard() self.assertEqual(self.view.got_reset, True) def test_deleteCard(self): # test if deleting card generates a proper signal # add 2 cards self.assertEqual(self.view.got_reset, False) self.model.addNewCard() self.model.addNewCard() self.assertEqual(self.view.got_reset, True) # reset view self.view.got_reset = False # delete first index = self.model.index(0, 0) self.model.deleteCard(index) # did it generate signal ? self.assertEqual(self.view.got_reset, True) # delete again self.view.got_reset = False index = self.model.index(0, 0) self.model.deleteCard(index) # did it generate signal? self.assertEqual(self.view.got_reset, True) # row count should be 0 now self.assertEqual(self.model.rowCount(), 0) # try to delete on empty model index = self.model.index(0, 0) self.assertEqual(index, QModelIndex()) # should generate invalid index self.assertRaises(CardModel.InvalidIndexError, self.model.deleteCard, index) def test_updateCard(self): self.model.addNewCard() idx = self.model.index(0, 0) self.model.updateCard(idx, 'testquestion', 'testanswer') # test if got signal self.assertEqual(self.view.got_dataChanged, True) # test if data is correct data = self.model.data(idx, Qt.UserRole) self.assertEqual(data.question, 'testquestion') self.assertEqual(data.answer, 'testanswer') def test_importQAFile(self): # # test if clean actually cleans the file self.model.addNewCard() self.model.addNewCard() qa = StringIO(r""" q: question1 a: answer1 q: question2 a: answer2""") self.model.importQAFile(qa, True) self.assertEqual(self.model.rowCount(), 2) idx = self.model.index(0, 0) card1 = self.model.data(self.model.index(0, 0), Qt.UserRole) self.assertEqual(card1.question, 'question1\n') self.assertEqual(card1.answer, 'answer1\n') card2 = self.model.data(self.model.index(1, 0), Qt.UserRole) self.assertEqual(card2.question, 'question2\n') self.assertEqual(card2.answer, 'answer2') # test import on closed model self.model.close() self.assertRaises(CardModel.ModelNotActiveError, self.model.importQAFile, 'sample')
class TestCardModel(unittest.TestCase): def setUp(self): self.model = CardModel() self.model.open(':memory:') self.view = DummyView() self.view.setModel(self.model) def tearDown(self): self.model.close() def test_filePath(self): # test on open model self.assertEqual(self.model.filepath(), ':memory:') # test on closed model self.model.close() self.assertEqual(self.model.filepath(), None) def test_isActive(self): self.assertEqual(self.model.isActive(), True) # test on closed model self.model.close() self.assertEqual(self.model.isActive(), False) def test_checkActive(self): # open model should not raise any exception self.model._checkActive() # test if raises correct exception self.model.close() self.assertRaises(CardModel.ModelNotActiveError, self.model._checkActive) def test_columnCount(self): # test on empty model self.assertEqual(self.model.columnCount(), 5) # test on closed model self.model.close() self.assertEqual(self.model.columnCount(), 0) def test_rowCount(self): # test on empty database self.assertEqual(self.model.rowCount(), 0) # add three empty rows self.model.addNewCard() self.model.addNewCard() self.model.addNewCard() self.assertEqual(self.model.rowCount(), 3) # test on closed model self.model.close() self.assertEqual(self.model.rowCount(), 0) def test_checkIndex(self): # test if _checkIndex raises correct exception # test on None self.assertRaises(CardModel.InvalidIndexError, self.model._checkIndex, None) # test on empty idx = QModelIndex() self.assertRaises(CardModel.InvalidIndexError, self.model._checkIndex, idx) def test_index(self): # test index on empty model idx1 = self.model.index(0, 0) self.assertEqual(idx1, QModelIndex()) # add two cards and check their ids self.model.addNewCard() self.model.addNewCard() idx1 = self.model.index(0, 0) idx2 = self.model.index(1, 0) idx3 = self.model.index(2, 0) self.assertEqual(idx1.internalId(), 1) self.assertEqual(idx2.internalId(), 2) self.assertEqual(idx3, QModelIndex()) def test_data(self): # test if generates error with invalid index idx = QModelIndex() self.assertRaises(CardModel.InvalidIndexError, self.model.data, idx) def test_previousNextIndex(self): # previous index on empty index self.model.addNewCard() self.model.addNewCard() idx1 = self.model.index(0, 0) idx2 = self.model.index(1, 1) # test previous self.assertEqual( self.model.getPreviousIndex(idx2).internalId(), idx1.internalId()) # test next self.assertEqual( self.model.getNextIndex(idx1).internalId(), idx2.internalId()) def test_addNewCard(self): # test if adding new card generates a proper signal self.assertEqual(self.view.got_reset, False) self.model.addNewCard() self.model.addNewCard() self.model.addNewCard() self.assertEqual(self.view.got_reset, True) def test_deleteCard(self): # test if deleting card generates a proper signal # add 2 cards self.assertEqual(self.view.got_reset, False) self.model.addNewCard() self.model.addNewCard() self.assertEqual(self.view.got_reset, True) # reset view self.view.got_reset = False # delete first index = self.model.index(0, 0) self.model.deleteCard(index) # did it generate signal ? self.assertEqual(self.view.got_reset, True) # delete again self.view.got_reset = False index = self.model.index(0, 0) self.model.deleteCard(index) # did it generate signal? self.assertEqual(self.view.got_reset, True) # row count should be 0 now self.assertEqual(self.model.rowCount(), 0) # try to delete on empty model index = self.model.index(0, 0) self.assertEqual(index, QModelIndex()) # should generate invalid index self.assertRaises(CardModel.InvalidIndexError, self.model.deleteCard, index) def test_updateCard(self): self.model.addNewCard() idx = self.model.index(0, 0) self.model.updateCard(idx, 'testquestion', 'testanswer') # test if got signal self.assertEqual(self.view.got_dataChanged, True) # test if data is correct data = self.model.data(idx, Qt.UserRole) self.assertEqual(data.question, 'testquestion') self.assertEqual(data.answer, 'testanswer') def test_importQAFile(self): # # test if clean actually cleans the file self.model.addNewCard() self.model.addNewCard() qa = StringIO(r""" q: question1 a: answer1 q: question2 a: answer2""") self.model.importQAFile(qa, True) self.assertEqual(self.model.rowCount(), 2) idx = self.model.index(0, 0) card1 = self.model.data(self.model.index(0, 0), Qt.UserRole) self.assertEqual(card1.question, 'question1\n') self.assertEqual(card1.answer, 'answer1\n') card2 = self.model.data(self.model.index(1, 0), Qt.UserRole) self.assertEqual(card2.question, 'question2\n') self.assertEqual(card2.answer, 'answer2') # test import on closed model self.model.close() self.assertRaises(CardModel.ModelNotActiveError, self.model.importQAFile, 'sample')