def test_update_text_record(self): store = tacl.DataStore(':memory:') store._conn = MagicMock(spec_set=sqlite3.Connection) text = MagicMock(spec_set=tacl.WitnessText) text.get_checksum.return_value = sentinel.checksum tokens = [sentinel.token] text.get_tokens.return_value = tokens store._update_text_record(text, sentinel.text_id) self.assertEqual(text.mock_calls, [call.get_checksum(), call.get_tokens()]) store._conn.execute.assert_called_once_with( tacl.constants.UPDATE_TEXT_SQL, [sentinel.checksum, len(tokens), sentinel.text_id])
def test_update_text_record(self): store = tacl.DataStore(':memory:') store._conn = MagicMock(spec_set=sqlite3.Connection) text = MagicMock(spec_set=tacl.WitnessText) text.get_checksum.return_value = sentinel.checksum tokens = [sentinel.token] text.get_tokens.return_value = tokens store._update_text_record(text, sentinel.text_id) self.assertEqual( text.mock_calls, [call.get_checksum(), call.get_tokens()]) store._conn.execute.assert_called_once_with( tacl.constants.UPDATE_TEXT_SQL, [sentinel.checksum, len(tokens), sentinel.text_id])
def test_get_text_id (self): add_text = self._create_patch('tacl.DataStore._add_text_record') add_text.return_value = sentinel.new_text_id update_text = self._create_patch('tacl.DataStore._update_text_record') delete_ngrams = self._create_patch('tacl.DataStore._delete_text_ngrams') text = MagicMock(spec_set=tacl.Text) text.get_checksum.return_value = sentinel.checksum text.get_filename.return_value = sentinel.filename text.get_names.return_value = (sentinel.name, sentinel.siglum) # There are three paths this method can take, depending on # whether a record already exists for the supplied text and, # if it does, whether the checksums match. store = tacl.DataStore(':memory:') store._conn = MagicMock(spec_set=sqlite3.Connection) cursor = store._conn.execute.return_value # Path one: there is no existing record. store._conn.execute.return_value = cursor cursor.fetchone.return_value = None actual_text_id = store._get_text_id(text) self.assertEqual(text.mock_calls, [call.get_names()]) self.assertEqual(store._conn.mock_calls, [call.execute(tacl.constants.SELECT_TEXT_SQL, [sentinel.name, sentinel.siglum]), call.execute().fetchone()]) add_text.assert_called_once_with(store, text) self.assertEqual(update_text.mock_calls, []) self.assertEqual(delete_ngrams.mock_calls, []) self.assertEqual(actual_text_id, sentinel.new_text_id) # Path two: there is an existing record, with a matching checksum. store._conn.reset_mock() text.reset_mock() add_text.reset_mock() update_text.reset_mock() cursor.fetchone.return_value = {'checksum': sentinel.checksum, 'id': sentinel.old_text_id} actual_text_id = store._get_text_id(text) self.assertEqual(store._conn.mock_calls, [call.execute(tacl.constants.SELECT_TEXT_SQL, [sentinel.name, sentinel.siglum]), call.execute().fetchone()]) self.assertEqual(text.mock_calls, [call.get_names(), call.get_checksum()]) self.assertEqual(add_text.mock_calls, []) self.assertEqual(update_text.mock_calls, []) self.assertEqual(delete_ngrams.mock_calls, []) self.assertEqual(actual_text_id, sentinel.old_text_id) # Path three: there is an existing record, with a different # checksum. store._conn.reset_mock() text.reset_mock() add_text.reset_mock() update_text.reset_mock() cursor.fetchone.return_value = {'checksum': sentinel.new_checksum, 'id': sentinel.old_text_id} actual_text_id = store._get_text_id(text) self.assertEqual(store._conn.mock_calls, [call.execute(tacl.constants.SELECT_TEXT_SQL, [sentinel.name, sentinel.siglum]), call.execute().fetchone()]) self.assertEqual(text.mock_calls, [call.get_names(), call.get_checksum(), call.get_filename()]) update_text.assert_called_once_with(store, text, sentinel.old_text_id) delete_ngrams.assert_called_once_with(store, sentinel.old_text_id) self.assertEqual(add_text.mock_calls, []) self.assertEqual(actual_text_id, sentinel.old_text_id)
def test_get_text_id(self): add_text = self._create_patch('tacl.DataStore._add_text_record') add_text.return_value = sentinel.new_text_id update_text = self._create_patch('tacl.DataStore._update_text_record') delete_ngrams = self._create_patch( 'tacl.DataStore._delete_text_ngrams') text = MagicMock(spec_set=tacl.WitnessText) text.get_checksum.return_value = sentinel.checksum text.get_filename.return_value = sentinel.filename text.get_names.return_value = (sentinel.name, sentinel.siglum) # There are three paths this method can take, depending on # whether a record already exists for the supplied text and, # if it does, whether the checksums match. store = tacl.DataStore(':memory:') store._conn = MagicMock(spec_set=sqlite3.Connection) cursor = store._conn.execute.return_value # Path one: there is no existing record. store._conn.execute.return_value = cursor cursor.fetchone.return_value = None actual_text_id = store._get_text_id(text) self.assertEqual(text.mock_calls, [call.get_names()]) self.assertEqual(store._conn.mock_calls, [ call.execute(tacl.constants.SELECT_TEXT_SQL, [sentinel.name, sentinel.siglum]), call.execute().fetchone() ]) add_text.assert_called_once_with(store, text) self.assertEqual(update_text.mock_calls, []) self.assertEqual(delete_ngrams.mock_calls, []) self.assertEqual(actual_text_id, sentinel.new_text_id) # Path two: there is an existing record, with a matching checksum. store._conn.reset_mock() text.reset_mock() add_text.reset_mock() update_text.reset_mock() cursor.fetchone.return_value = { 'checksum': sentinel.checksum, 'id': sentinel.old_text_id } actual_text_id = store._get_text_id(text) self.assertEqual(store._conn.mock_calls, [ call.execute(tacl.constants.SELECT_TEXT_SQL, [sentinel.name, sentinel.siglum]), call.execute().fetchone() ]) self.assertEqual( text.mock_calls, [call.get_names(), call.get_checksum()]) self.assertEqual(add_text.mock_calls, []) self.assertEqual(update_text.mock_calls, []) self.assertEqual(delete_ngrams.mock_calls, []) self.assertEqual(actual_text_id, sentinel.old_text_id) # Path three: there is an existing record, with a different # checksum. store._conn.reset_mock() text.reset_mock() add_text.reset_mock() update_text.reset_mock() cursor.fetchone.return_value = { 'checksum': sentinel.new_checksum, 'id': sentinel.old_text_id } actual_text_id = store._get_text_id(text) self.assertEqual(store._conn.mock_calls, [ call.execute(tacl.constants.SELECT_TEXT_SQL, [sentinel.name, sentinel.siglum]), call.execute().fetchone() ]) self.assertEqual( text.mock_calls, [call.get_names(), call.get_checksum(), call.get_filename()]) update_text.assert_called_once_with(store, text, sentinel.old_text_id) delete_ngrams.assert_called_once_with(store, sentinel.old_text_id) self.assertEqual(add_text.mock_calls, []) self.assertEqual(actual_text_id, sentinel.old_text_id)