class TestDatabaseRecordReader(BaseDatabaseRecordTester): def setUp(self): self.fake_connection = FakeDatabaseConnection() self.reader = DatabaseRecordReader(self.fake_connection) def test_can_close(self): self.reader.close() self.assertTrue(self.fake_connection.closed) def test_row_factory_set(self): self.assertEqual(self.fake_connection.row_factory, self.reader._row_factory) def test_iter_latest_records_performs_correct_query(self): expected_query = ( ' SELECT * FROM records\n' ' WHERE id =\n' ' (SELECT id FROM records WHERE timestamp =\n' ' (SELECT max(timestamp) FROM records)) ORDER BY timestamp;' ) [_ for _ in self.reader.iter_latest_records()] self.assertEqual(self.fake_connection.execute.call_args[0][0].strip(), expected_query.strip()) def test_iter_latest_records_does_iter_records(self): records_to_get = [1, 2, 3] self.fake_connection.execute.return_value.__iter__.return_value = iter( records_to_get) records = [r for r in self.reader.iter_latest_records()] self.assertEqual(records, records_to_get) def test_iter_records_performs_correct_query(self): expected_query = ('SELECT * from records where id = ? ' 'ORDER BY timestamp') [_ for _ in self.reader.iter_records('fake_id')] self.assertEqual(self.fake_connection.execute.call_args[0][0].strip(), expected_query.strip()) def test_iter_records_does_iter_records(self): records_to_get = [1, 2, 3] self.fake_connection.execute.return_value.__iter__.return_value = iter( records_to_get) records = [r for r in self.reader.iter_records('fake_id')] self.assertEqual(records, records_to_get)
def test_can_read_record(self): writer = DatabaseRecordWriter(self.connection) self._write_sequence_of_records(writer, [ { 'command_id': 'command a', 'source': 'TEST', 'event_type': 'foo', 'payload': '', 'timestamp': 3 }, { 'command_id': 'command a', 'source': 'TEST', 'event_type': 'bar', 'payload': '', 'timestamp': 1 }, { 'command_id': 'command a', 'source': 'TEST', 'event_type': 'baz', 'payload': '', 'timestamp': 4 } ]) self._write_sequence_of_records(writer, [ { 'command_id': 'command b', 'source': 'TEST', 'event_type': 'qux', 'payload': '', 'timestamp': 2 }, { 'command_id': 'command b', 'source': 'TEST', 'event_type': 'zip', 'payload': '', 'timestamp': 6 } ]) reader = DatabaseRecordReader(self.connection) cursor = self.connection.execute( 'select id from records where event_type = "foo" limit 1') identifier = cursor.fetchone()['id'] # This should select only the three records from writer_a since we # are explicitly looking for the records that match the id of the # foo event record. records = [record for record in reader.iter_records(identifier)] self.assertEqual(len(records), 3) for record in records: record_id = record['id'] self.assertEqual(record_id, identifier)
def test_yields_nothing_if_no_matching_record_id(self): reader = DatabaseRecordReader(self.connection) records = [record for record in reader.iter_records('fake_id')] self.assertEqual(len(records), 0)