From a4e034e339db44b4474b28422edbe69b3b189e86 Mon Sep 17 00:00:00 2001 From: amckenzie Date: Wed, 7 Aug 2019 11:07:20 +0100 Subject: [PATCH] Rename and update TestEventInserter to be a more useful test class for managing events --- CHANGELOG.md | 5 + .../prepublish/EventPublishIT.java | 12 +- .../publishedevent/jdbc/EventDeQueuerIT.java | 22 +- .../jdbc/PrePublishRepositoryIT.java | 20 +- .../publish/EventLogPublishIT.java | 6 +- .../rebuild/EventNumberRenumbererIT.java | 18 +- .../integration/RebuildPublishedEventIT.java | 18 +- .../RebuildShouldIgnoreInactiveStreamsIT.java | 6 +- .../integration/helpers/EventInserter.java | 8 +- ...nserter.java => EventStoreDataAccess.java} | 34 ++- .../test/utils/events/EventInserterIT.java | 140 ------------ .../utils/events/EventStoreDataAccessIT.java | 200 ++++++++++++++++++ 12 files changed, 292 insertions(+), 197 deletions(-) rename test-utils-event-store/test-utils-event/src/main/java/uk/gov/justice/services/test/utils/events/{TestEventInserter.java => EventStoreDataAccess.java} (81%) delete mode 100644 test-utils-event-store/test-utils-event/src/test/java/uk/gov/justice/services/test/utils/events/EventInserterIT.java create mode 100644 test-utils-event-store/test-utils-event/src/test/java/uk/gov/justice/services/test/utils/events/EventStoreDataAccessIT.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 175794748..60ea95da2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ on [Keep a CHANGELOG](http://keepachangelog.com/). This project adheres to ## [Unreleased] +## [2.0.0-RC11] - 2019-08-07 +### Changed +- Renamed TestEventInserter to EventStoreDataAccess as an improved test class +- Added a findEventsByStreamId() method to EventStoreDataAccess + ## [2.0.0-RC10] - 2019-07-22 ### Fixed - Metadata missing event number and previous event number after a JMX REBUILD command is run. diff --git a/event-sourcing/event-publisher/event-publisher-timer/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/prepublish/EventPublishIT.java b/event-sourcing/event-publisher/event-publisher-timer/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/prepublish/EventPublishIT.java index 4aefe63f6..6df7e329f 100644 --- a/event-sourcing/event-publisher/event-publisher-timer/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/prepublish/EventPublishIT.java +++ b/event-sourcing/event-publisher/event-publisher-timer/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/prepublish/EventPublishIT.java @@ -53,7 +53,7 @@ import uk.gov.justice.services.messaging.logging.DefaultTraceLogger; import uk.gov.justice.services.test.utils.core.eventsource.EventStoreInitializer; import uk.gov.justice.services.test.utils.core.messaging.Poller; -import uk.gov.justice.services.test.utils.events.TestEventInserter; +import uk.gov.justice.services.test.utils.events.EventStoreDataAccess; import uk.gov.justice.services.test.utils.messaging.jms.DummyJmsEnvelopeSender; import uk.gov.justice.services.test.utils.persistence.OpenEjbEventStoreDataSourceProvider; import uk.gov.justice.services.yaml.YamlParser; @@ -99,13 +99,13 @@ public class EventPublishIT { private final EventStoreInitializer eventStoreInitializer = new EventStoreInitializer(); private final Clock clock = new UtcClock(); - private TestEventInserter testEventInserter; + private EventStoreDataAccess eventStoreDataAccess; @Before public void initializeDatabase() throws Exception { final DataSource eventStoreDataSource = eventStoreDataSourceProvider.getDefaultDataSource(); eventStoreInitializer.initializeEventStore(eventStoreDataSource); - testEventInserter = new TestEventInserter(eventStoreDataSource); + eventStoreDataAccess = new EventStoreDataAccess(eventStoreDataSource); } @Module @@ -192,9 +192,9 @@ public void shouldPublishEventsInTheEventLogTable() throws Exception { final Event event_2 = eventBuilder().withStreamId(streamId).withName("event_2").withEventNumber(2L).withPositionInStream(2L).build(); final Event event_3 = eventBuilder().withStreamId(streamId).withName("event_3").withEventNumber(3L).withPositionInStream(3L).build(); - testEventInserter.insertIntoEventLog(event_1); - testEventInserter.insertIntoEventLog(event_2); - testEventInserter.insertIntoEventLog(event_3); + eventStoreDataAccess.insertIntoEventLog(event_1); + eventStoreDataAccess.insertIntoEventLog(event_2); + eventStoreDataAccess.insertIntoEventLog(event_3); testEventStreamInserter.insertIntoEventStream(streamId, 1, true, clock.now()); diff --git a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/jdbc/EventDeQueuerIT.java b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/jdbc/EventDeQueuerIT.java index bfba34d52..29b665020 100644 --- a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/jdbc/EventDeQueuerIT.java +++ b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/jdbc/EventDeQueuerIT.java @@ -11,7 +11,7 @@ import uk.gov.justice.services.eventsourcing.repository.jdbc.event.Event; import uk.gov.justice.services.eventsourcing.source.core.EventStoreDataSourceProvider; import uk.gov.justice.services.test.utils.core.eventsource.EventStoreInitializer; -import uk.gov.justice.services.test.utils.events.TestEventInserter; +import uk.gov.justice.services.test.utils.events.EventStoreDataAccess; import uk.gov.justice.services.test.utils.persistence.FrameworkTestDataSourceFactory; import java.sql.Connection; @@ -31,7 +31,7 @@ public class EventDeQueuerIT { private final DataSource dataSource = new FrameworkTestDataSourceFactory().createEventStoreDataSource(); - private final TestEventInserter testEventInserter = new TestEventInserter(dataSource); + private final EventStoreDataAccess eventStoreDataAccess = new EventStoreDataAccess(dataSource); private final Clock clock = new UtcClock(); @Mock @@ -58,9 +58,9 @@ public void shouldPopEventsFromThePrePublishQueue() throws Exception { final Event event_2 = eventBuilder().withName("example.second-event").withPositionInStream(2L).build(); final Event event_3 = eventBuilder().withName("example.third-event").withPositionInStream(3L).build(); - testEventInserter.insertIntoEventLog(event_1); - testEventInserter.insertIntoEventLog(event_2); - testEventInserter.insertIntoEventLog(event_3); + eventStoreDataAccess.insertIntoEventLog(event_1); + eventStoreDataAccess.insertIntoEventLog(event_2); + eventStoreDataAccess.insertIntoEventLog(event_3); assertThat(eventDeQueuer.popNextEventId(tableName).get(), is(event_1.getId())); assertThat(eventDeQueuer.popNextEventId(tableName).get(), is(event_2.getId())); @@ -84,9 +84,9 @@ public void shouldPopEventsFromThePublishQueue() throws Exception { insertInPublishQueue(event_1, event_2, event_3); - testEventInserter.insertIntoEventLog(event_1); - testEventInserter.insertIntoEventLog(event_2); - testEventInserter.insertIntoEventLog(event_3); + eventStoreDataAccess.insertIntoEventLog(event_1); + eventStoreDataAccess.insertIntoEventLog(event_2); + eventStoreDataAccess.insertIntoEventLog(event_3); assertThat(eventDeQueuer.popNextEventId(tableName).get(), is(event_1.getId())); assertThat(eventDeQueuer.popNextEventId(tableName).get(), is(event_2.getId())); @@ -108,9 +108,9 @@ public void shouldGetTheSizeOfTheQueue() throws Exception { insertInPublishQueue(event_1, event_2, event_3); - testEventInserter.insertIntoEventLog(event_1); - testEventInserter.insertIntoEventLog(event_2); - testEventInserter.insertIntoEventLog(event_3); + eventStoreDataAccess.insertIntoEventLog(event_1); + eventStoreDataAccess.insertIntoEventLog(event_2); + eventStoreDataAccess.insertIntoEventLog(event_3); assertThat(eventDeQueuer.getSizeOfQueue(tableName), is(3)); } diff --git a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/jdbc/PrePublishRepositoryIT.java b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/jdbc/PrePublishRepositoryIT.java index c00786365..796a01219 100644 --- a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/jdbc/PrePublishRepositoryIT.java +++ b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/jdbc/PrePublishRepositoryIT.java @@ -12,7 +12,7 @@ import uk.gov.justice.services.eventsourcing.publishedevent.publish.helpers.TestEventStreamInserter; import uk.gov.justice.services.eventsourcing.repository.jdbc.event.Event; import uk.gov.justice.services.test.utils.core.eventsource.EventStoreInitializer; -import uk.gov.justice.services.test.utils.events.TestEventInserter; +import uk.gov.justice.services.test.utils.events.EventStoreDataAccess; import uk.gov.justice.services.test.utils.persistence.FrameworkTestDataSourceFactory; import java.sql.Connection; @@ -33,7 +33,7 @@ public class PrePublishRepositoryIT { private final DataSource eventStoreDataSource = new FrameworkTestDataSourceFactory().createEventStoreDataSource(); - private final TestEventInserter testEventInserter = new TestEventInserter(eventStoreDataSource); + private final EventStoreDataAccess eventStoreDataAccess = new EventStoreDataAccess(eventStoreDataSource); private final TestEventStreamInserter testEventStreamInserter = new TestEventStreamInserter(); private final Clock clock = new UtcClock(); @@ -54,10 +54,10 @@ public void shouldGetTheSequenceNumberOfAnEvent() throws Exception { final Event event_3 = eventBuilder().withName("event-3").withPositionInStream(103L).build(); final Event event_4 = eventBuilder().withName("event-4").withPositionInStream(104L).build(); - testEventInserter.insertIntoEventLog(event_1); - testEventInserter.insertIntoEventLog(event_2); - testEventInserter.insertIntoEventLog(event_3); - testEventInserter.insertIntoEventLog(event_4); + eventStoreDataAccess.insertIntoEventLog(event_1); + eventStoreDataAccess.insertIntoEventLog(event_2); + eventStoreDataAccess.insertIntoEventLog(event_3); + eventStoreDataAccess.insertIntoEventLog(event_4); assertThat(prePublishRepository.getEventNumber(event_1.getId(), eventStoreDataSource), is(1L)); assertThat(prePublishRepository.getEventNumber(event_2.getId(), eventStoreDataSource), is(2L)); @@ -78,10 +78,10 @@ public void shouldGetThePreviousSequenceNumberOfAnEvent() throws Exception { final Event event_3 = eventBuilder().withStreamId(streamId).withName("event-3").withEventNumber(3l).withPositionInStream(103L).build(); final Event event_4 = eventBuilder().withStreamId(streamId).withName("event-4").withEventNumber(4l).withPositionInStream(104L).build(); - testEventInserter.insertIntoEventLog(event_1); - testEventInserter.insertIntoEventLog(event_2); - testEventInserter.insertIntoEventLog(event_3); - testEventInserter.insertIntoEventLog(event_4); + eventStoreDataAccess.insertIntoEventLog(event_1); + eventStoreDataAccess.insertIntoEventLog(event_2); + eventStoreDataAccess.insertIntoEventLog(event_3); + eventStoreDataAccess.insertIntoEventLog(event_4); assertThat(prePublishRepository.getPreviousEventNumber(1, eventStoreDataSource), is(0L)); diff --git a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/publish/EventLogPublishIT.java b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/publish/EventLogPublishIT.java index bc9606c8b..6a7c03575 100644 --- a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/publish/EventLogPublishIT.java +++ b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/publish/EventLogPublishIT.java @@ -16,7 +16,7 @@ import uk.gov.justice.services.eventsourcing.repository.jdbc.event.Event; import uk.gov.justice.services.messaging.JsonEnvelope; import uk.gov.justice.services.test.utils.core.eventsource.EventStoreInitializer; -import uk.gov.justice.services.test.utils.events.TestEventInserter; +import uk.gov.justice.services.test.utils.events.EventStoreDataAccess; import uk.gov.justice.services.test.utils.persistence.FrameworkTestDataSourceFactory; import java.sql.Connection; @@ -33,7 +33,7 @@ public class EventLogPublishIT { private final DataSource eventStoreDataSource = new FrameworkTestDataSourceFactory().createEventStoreDataSource(); - private final TestEventInserter testEventInserter = new TestEventInserter(eventStoreDataSource); + private final EventStoreDataAccess eventStoreDataAccess = new EventStoreDataAccess(eventStoreDataSource); private final UtcClock utcClock = new UtcClock(); @@ -65,7 +65,7 @@ public void shouldUpdateThePublishQueueTableIfARowIsInsertedIntoTheEventLogTable .withPayloadJSON(jsonEnvelope.payloadAsJsonObject().toString()) .build(); - testEventInserter.insertIntoEventLog(event); + eventStoreDataAccess.insertIntoEventLog(event); try (final Connection connection = eventStoreDataSource.getConnection(); final PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM pre_publish_queue"); diff --git a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/EventNumberRenumbererIT.java b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/EventNumberRenumbererIT.java index 5aa534e66..665923b6f 100644 --- a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/EventNumberRenumbererIT.java +++ b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/EventNumberRenumbererIT.java @@ -7,7 +7,7 @@ import uk.gov.justice.services.eventsourcing.repository.jdbc.event.Event; import uk.gov.justice.services.eventsourcing.source.core.EventStoreDataSourceProvider; -import uk.gov.justice.services.test.utils.events.TestEventInserter; +import uk.gov.justice.services.test.utils.events.EventStoreDataAccess; import uk.gov.justice.services.test.utils.persistence.DatabaseCleaner; import uk.gov.justice.services.test.utils.persistence.FrameworkTestDataSourceFactory; import uk.gov.justice.services.test.utils.persistence.SequenceSetter; @@ -34,7 +34,7 @@ public class EventNumberRenumbererIT { private EventNumberRenumberer eventNumberRenumberer; private final DataSource eventStoreDataSource = new FrameworkTestDataSourceFactory().createEventStoreDataSource(); - private final TestEventInserter testEventInserter = new TestEventInserter(eventStoreDataSource); + private final EventStoreDataAccess eventStoreDataAccess = new EventStoreDataAccess(eventStoreDataSource); private final DatabaseCleaner databaseCleaner = new DatabaseCleaner(); @Before @@ -54,13 +54,13 @@ public void shouldResetEventSequenceAndRenumberTheEvents() throws Exception { assertThat(sequenceSetter.getCurrentSequenceValue("event_sequence_seq", eventStoreDataSource), is(11L)); - testEventInserter.insertIntoEventLog(eventBuilder().withName("event 1").build()); - testEventInserter.insertIntoEventLog(eventBuilder().withName("event 2").build()); - testEventInserter.insertIntoEventLog(eventBuilder().withName("event 3").build()); - testEventInserter.insertIntoEventLog(eventBuilder().withName("event 4").build()); - testEventInserter.insertIntoEventLog(eventBuilder().withName("event 5").build()); + eventStoreDataAccess.insertIntoEventLog(eventBuilder().withName("event 1").build()); + eventStoreDataAccess.insertIntoEventLog(eventBuilder().withName("event 2").build()); + eventStoreDataAccess.insertIntoEventLog(eventBuilder().withName("event 3").build()); + eventStoreDataAccess.insertIntoEventLog(eventBuilder().withName("event 4").build()); + eventStoreDataAccess.insertIntoEventLog(eventBuilder().withName("event 5").build()); - final List allEvents = testEventInserter.findAllEvents(); + final List allEvents = eventStoreDataAccess.findAllEvents(); assertThat(allEvents.size(), is(5)); @@ -77,7 +77,7 @@ public void shouldResetEventSequenceAndRenumberTheEvents() throws Exception { eventNumberRenumberer.renumberEventLogEventNumber(); - final List renumberedEvents = testEventInserter.findAllEvents(); + final List renumberedEvents = eventStoreDataAccess.findAllEvents(); assertThat(renumberedEvents.get(0).getName(), is("event 1")); assertThat(renumberedEvents.get(0).getEventNumber().orElse(-1L), is(1L)); diff --git a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/integration/RebuildPublishedEventIT.java b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/integration/RebuildPublishedEventIT.java index 77d885116..fc3bc878f 100644 --- a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/integration/RebuildPublishedEventIT.java +++ b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/integration/RebuildPublishedEventIT.java @@ -31,7 +31,7 @@ import uk.gov.justice.services.jdbc.persistence.PreparedStatementWrapperFactory; import uk.gov.justice.services.messaging.DefaultJsonObjectEnvelopeConverter; import uk.gov.justice.services.messaging.Metadata; -import uk.gov.justice.services.test.utils.events.TestEventInserter; +import uk.gov.justice.services.test.utils.events.EventStoreDataAccess; import uk.gov.justice.services.test.utils.persistence.DatabaseCleaner; import uk.gov.justice.services.test.utils.persistence.FrameworkTestDataSourceFactory; import uk.gov.justice.services.test.utils.persistence.OpenEjbEventStoreDataSourceProvider; @@ -63,7 +63,7 @@ public class RebuildPublishedEventIT { private final DataSource eventStoreDataSource = new FrameworkTestDataSourceFactory().createEventStoreDataSource(); - private final TestEventInserter testEventInserter = new TestEventInserter(eventStoreDataSource); + private final EventStoreDataAccess eventStoreDataAccess = new EventStoreDataAccess(eventStoreDataSource); private final DatabaseCleaner databaseCleaner = new DatabaseCleaner(); private final SequenceSetter sequenceSetter = new SequenceSetter(); private final StreamIdGenerator streamIdGenerator = new StreamIdGenerator(); @@ -129,11 +129,11 @@ public void shouldRenumberEventsInEventLogTruncatePublishedEventsAndUpdatePublis sequenceSetter.setSequenceTo(CURRENT_EVENT_START_NUMBER, "event_sequence_seq", eventStoreDataSource); - testEventInserter.insertIntoPublishedEvent(publishedEventBuilder().withEventNumber(1001).withPreviousEventNumber(1000).build()); - testEventInserter.insertIntoPublishedEvent(publishedEventBuilder().withEventNumber(1002).withPreviousEventNumber(1001).build()); - testEventInserter.insertIntoPublishedEvent(publishedEventBuilder().withEventNumber(1003).withPreviousEventNumber(1002).build()); - testEventInserter.insertIntoPublishedEvent(publishedEventBuilder().withEventNumber(1004).withPreviousEventNumber(1003).build()); - testEventInserter.insertIntoPublishedEvent(publishedEventBuilder().withEventNumber(1005).withPreviousEventNumber(1004).build()); + eventStoreDataAccess.insertIntoPublishedEvent(publishedEventBuilder().withEventNumber(1001).withPreviousEventNumber(1000).build()); + eventStoreDataAccess.insertIntoPublishedEvent(publishedEventBuilder().withEventNumber(1002).withPreviousEventNumber(1001).build()); + eventStoreDataAccess.insertIntoPublishedEvent(publishedEventBuilder().withEventNumber(1003).withPreviousEventNumber(1002).build()); + eventStoreDataAccess.insertIntoPublishedEvent(publishedEventBuilder().withEventNumber(1004).withPreviousEventNumber(1003).build()); + eventStoreDataAccess.insertIntoPublishedEvent(publishedEventBuilder().withEventNumber(1005).withPreviousEventNumber(1004).build()); final int numberOfStreams = 10; final int numberOfEvents = 20; @@ -143,11 +143,11 @@ public void shouldRenumberEventsInEventLogTruncatePublishedEventsAndUpdatePublis eventInserter.insertSomeEvents(numberOfEvents, streamIds); - final List events = testEventInserter.findAllEvents(); + final List events = eventStoreDataAccess.findAllEvents(); publishedEventRebuilder.rebuild(); - final List publishedEvents = testEventInserter.findAllPublishedEvents(); + final List publishedEvents = eventStoreDataAccess.findAllPublishedEvents(); assertThat(publishedEvents.size(), is(numberOfEvents)); diff --git a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/integration/RebuildShouldIgnoreInactiveStreamsIT.java b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/integration/RebuildShouldIgnoreInactiveStreamsIT.java index 0266d9667..a9853c214 100644 --- a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/integration/RebuildShouldIgnoreInactiveStreamsIT.java +++ b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/integration/RebuildShouldIgnoreInactiveStreamsIT.java @@ -27,7 +27,7 @@ import uk.gov.justice.services.jdbc.persistence.JdbcResultSetStreamer; import uk.gov.justice.services.jdbc.persistence.PreparedStatementWrapperFactory; import uk.gov.justice.services.messaging.DefaultJsonObjectEnvelopeConverter; -import uk.gov.justice.services.test.utils.events.TestEventInserter; +import uk.gov.justice.services.test.utils.events.EventStoreDataAccess; import uk.gov.justice.services.test.utils.persistence.DatabaseCleaner; import uk.gov.justice.services.test.utils.persistence.FrameworkTestDataSourceFactory; import uk.gov.justice.services.test.utils.persistence.OpenEjbEventStoreDataSourceProvider; @@ -56,7 +56,7 @@ public class RebuildShouldIgnoreInactiveStreamsIT { private final DataSource eventStoreDataSource = new FrameworkTestDataSourceFactory().createEventStoreDataSource(); - private final TestEventInserter testEventInserter = new TestEventInserter(eventStoreDataSource); + private final EventStoreDataAccess eventStoreDataAccess = new EventStoreDataAccess(eventStoreDataSource); private final DatabaseCleaner databaseCleaner = new DatabaseCleaner(); private final StreamIdGenerator streamIdGenerator = new StreamIdGenerator(); private final StreamStatusInserter streamStatusInserter = new StreamStatusInserter(eventStoreDataSource); @@ -133,7 +133,7 @@ public void shouldRenumberEventsInEventLogTruncatePublishedEventsAndUpdatePublis publishedEventRebuilder.rebuild(); - final List publishedEvents = testEventInserter.findAllPublishedEventsOrderedByEventNumber(); + final List publishedEvents = eventStoreDataAccess.findAllPublishedEventsOrderedByEventNumber(); assertThat(publishedEvents.size(), is(numberOfEvents / 2)); diff --git a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/integration/helpers/EventInserter.java b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/integration/helpers/EventInserter.java index ad7e0e4e9..baa765a29 100644 --- a/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/integration/helpers/EventInserter.java +++ b/event-sourcing/event-publisher/published-event-processor/src/test/java/uk/gov/justice/services/eventsourcing/publishedevent/rebuild/integration/helpers/EventInserter.java @@ -5,7 +5,7 @@ import uk.gov.justice.services.eventsourcing.repository.jdbc.event.Event; import uk.gov.justice.services.jdbc.persistence.DataAccessException; -import uk.gov.justice.services.test.utils.events.TestEventInserter; +import uk.gov.justice.services.test.utils.events.EventStoreDataAccess; import java.sql.SQLException; import java.util.List; @@ -19,10 +19,10 @@ public class EventInserter { private final PositionInStreamCounter positionInStreamCounter = new PositionInStreamCounter(); private final Random random = new Random(); - private final TestEventInserter testEventInserter; + private final EventStoreDataAccess eventStoreDataAccess; public EventInserter(final DataSource eventStoreDataSource) { - this.testEventInserter = new TestEventInserter(eventStoreDataSource); + this.eventStoreDataAccess = new EventStoreDataAccess(eventStoreDataSource); } public void insertSomeEvents(final int numberOfEvents, final List streamIds) { @@ -39,7 +39,7 @@ public void insertSomeEvents(final int numberOfEvents, final List streamId .withPositionInStream(positionInStreamCounter.getNextPosition(streamId)) .build(); - testEventInserter.insertIntoEventLog(event); + eventStoreDataAccess.insertIntoEventLog(event); if ((count % 100) == 0 && count != 0) { System.out.println("Inserted " + count + " events..."); diff --git a/test-utils-event-store/test-utils-event/src/main/java/uk/gov/justice/services/test/utils/events/TestEventInserter.java b/test-utils-event-store/test-utils-event/src/main/java/uk/gov/justice/services/test/utils/events/EventStoreDataAccess.java similarity index 81% rename from test-utils-event-store/test-utils-event/src/main/java/uk/gov/justice/services/test/utils/events/TestEventInserter.java rename to test-utils-event-store/test-utils-event/src/main/java/uk/gov/justice/services/test/utils/events/EventStoreDataAccess.java index 8aa80128b..9130261ed 100644 --- a/test-utils-event-store/test-utils-event/src/main/java/uk/gov/justice/services/test/utils/events/TestEventInserter.java +++ b/test-utils-event-store/test-utils-event/src/main/java/uk/gov/justice/services/test/utils/events/EventStoreDataAccess.java @@ -1,6 +1,7 @@ package uk.gov.justice.services.test.utils.events; import static java.util.Optional.of; +import static java.util.stream.Collectors.toList; import static uk.gov.justice.services.common.converter.ZonedDateTimes.fromSqlTimestamp; import static uk.gov.justice.services.common.converter.ZonedDateTimes.toSqlTimestamp; @@ -15,10 +16,11 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.stream.Stream; import javax.sql.DataSource; -public class TestEventInserter { +public class EventStoreDataAccess { private final DataSource eventStoreDataSource; @@ -33,10 +35,11 @@ public class TestEventInserter { ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"; private static final String FIND_ALL_EVENTS_QUERY = "SELECT * FROM event_log"; + private static final String FIND_ALL_EVENTS_BY_STREAM_ID_QUERY = "SELECT * FROM event_log WHERE stream_id = ?"; private static final String FIND_ALL_PUBLISHED_EVENTS_QUERY = "SELECT * FROM published_event"; private static final String FIND_ALL_PUBLISHED_EVENTS_ORDERED_BT_EVENT_NUMBER_QUERY = "SELECT * FROM published_event ORDER BY event_number"; - public TestEventInserter(final DataSource eventStoreDataSource) { + public EventStoreDataAccess(final DataSource eventStoreDataSource) { this.eventStoreDataSource = eventStoreDataSource; } @@ -122,6 +125,33 @@ public List findAllEvents() throws SQLException { } } + public List findEventsByStream(final UUID streamId) throws SQLException { + final List events = new ArrayList<>(); + try(final Connection connection = eventStoreDataSource.getConnection(); + final PreparedStatement preparedStatement = connection.prepareStatement(FIND_ALL_EVENTS_BY_STREAM_ID_QUERY)) { + + preparedStatement.setObject(1, streamId); + + try(final ResultSet resultSet = preparedStatement.executeQuery()) { + while (resultSet.next()) { + + final Event event = new Event((UUID) resultSet.getObject("id"), + (UUID) resultSet.getObject("stream_id"), + resultSet.getLong("position_in_stream"), + resultSet.getString("name"), + resultSet.getString("metadata"), + resultSet.getString("payload"), + fromSqlTimestamp(resultSet.getTimestamp("date_created")), + of(resultSet.getLong("event_number"))); + + events.add(event); + } + } + + return events; + } + } + public List findAllPublishedEvents() throws SQLException { return doGetPublishedEvents(FIND_ALL_PUBLISHED_EVENTS_QUERY); } diff --git a/test-utils-event-store/test-utils-event/src/test/java/uk/gov/justice/services/test/utils/events/EventInserterIT.java b/test-utils-event-store/test-utils-event/src/test/java/uk/gov/justice/services/test/utils/events/EventInserterIT.java deleted file mode 100644 index 59c2bd2d6..000000000 --- a/test-utils-event-store/test-utils-event/src/test/java/uk/gov/justice/services/test/utils/events/EventInserterIT.java +++ /dev/null @@ -1,140 +0,0 @@ -package uk.gov.justice.services.test.utils.events; - -import static java.util.Collections.emptyList; -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; -import static uk.gov.justice.services.test.utils.events.EventBuilder.eventBuilder; -import static uk.gov.justice.services.test.utils.events.PublishedEventBuilder.publishedEventBuilder; - -import uk.gov.justice.services.eventsourcing.repository.jdbc.event.Event; -import uk.gov.justice.services.eventsourcing.repository.jdbc.event.PublishedEvent; -import uk.gov.justice.services.test.utils.persistence.FrameworkTestDataSourceFactory; -import uk.gov.justice.services.test.utils.persistence.TableCleaner; - -import java.util.List; - -import javax.sql.DataSource; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Spy; -import org.mockito.runners.MockitoJUnitRunner; - -@RunWith(MockitoJUnitRunner.class) -public class EventInserterIT { - - @Spy - private DataSource eventStoreDataSource = new FrameworkTestDataSourceFactory().createEventStoreDataSource(); - - @InjectMocks - private TestEventInserter testEventInserter; - - @Test - public void shouldCreateAnEntryInTheEventLogTableUsingAnEvent() throws Exception { - - new TableCleaner().clean("event_log", eventStoreDataSource); - - assertThat(testEventInserter.findAllEvents(), is(emptyList())); - - final Event event_1 = eventBuilder().withName("event 1").build(); - final Event event_2 = eventBuilder().withName("event 1").build(); - final Event event_3 = eventBuilder().withName("event 1").build(); - - testEventInserter.insertIntoEventLog(event_1); - testEventInserter.insertIntoEventLog(event_2); - testEventInserter.insertIntoEventLog(event_3); - - final List events = testEventInserter.findAllEvents(); - - assertThat(events.size(), is(3)); - - assertThat(events.get(0), is(event_1)); - assertThat(events.get(1), is(event_2)); - assertThat(events.get(2), is(event_3)); - } - - @Test - public void shouldInsertIntoEventLogTableUsingParameters() throws Exception { - - new TableCleaner().clean("event_log", eventStoreDataSource); - - assertThat(testEventInserter.findAllEvents(), is(emptyList())); - - final Event event_1 = eventBuilder().withName("event 1").build(); - final Event event_2 = eventBuilder().withName("event 1").build(); - final Event event_3 = eventBuilder().withName("event 1").build(); - - testEventInserter.insertIntoEventLog( - event_1.getId(), - event_1.getStreamId(), - event_1.getPositionInStream(), - event_1.getCreatedAt(), - event_1.getName(), - event_1.getPayload(), - event_1.getMetadata() - ); - testEventInserter.insertIntoEventLog( - event_2.getId(), - event_2.getStreamId(), - event_2.getPositionInStream(), - event_2.getCreatedAt(), - event_2.getName(), - event_2.getPayload(), - event_2.getMetadata() - ); - testEventInserter.insertIntoEventLog( - event_3.getId(), - event_3.getStreamId(), - event_3.getPositionInStream(), - event_3.getCreatedAt(), - event_3.getName(), - event_3.getPayload(), - event_3.getMetadata() - ); - - - final List events = testEventInserter.findAllEvents(); - - assertThat(events.size(), is(3)); - - assertThat(events.get(0), is(event_1)); - assertThat(events.get(1), is(event_2)); - assertThat(events.get(2), is(event_3)); - } - - @Test - public void shouldInsertAndGetPublishedEvents() throws Exception { - - new TableCleaner().clean("published_event", eventStoreDataSource); - - assertThat(testEventInserter.findAllPublishedEvents(), is(emptyList())); - - final PublishedEvent publishedEvent_1 = publishedEventBuilder() - .withName("published event 1") - .withPreviousEventNumber(0) - .withEventNumber(1) - .build(); - final PublishedEvent publishedEvent_2 = publishedEventBuilder() - .withName("published event 2") - .withPreviousEventNumber(1) - .withEventNumber(2) - .build(); - final PublishedEvent publishedEvent_3 = publishedEventBuilder() - .withName("published event 3") - .withPreviousEventNumber(2) - .withEventNumber(3) - .build(); - - testEventInserter.insertIntoPublishedEvent(publishedEvent_1); - testEventInserter.insertIntoPublishedEvent(publishedEvent_2); - testEventInserter.insertIntoPublishedEvent(publishedEvent_3); - - final List publishedEvents = testEventInserter.findAllPublishedEvents(); - - assertThat(publishedEvents.size(), is(3)); - assertThat(publishedEvents.get(0), is(publishedEvent_1)); - assertThat(publishedEvents.get(1), is(publishedEvent_2)); - assertThat(publishedEvents.get(2), is(publishedEvent_3)); - } -} diff --git a/test-utils-event-store/test-utils-event/src/test/java/uk/gov/justice/services/test/utils/events/EventStoreDataAccessIT.java b/test-utils-event-store/test-utils-event/src/test/java/uk/gov/justice/services/test/utils/events/EventStoreDataAccessIT.java new file mode 100644 index 000000000..3466feb1f --- /dev/null +++ b/test-utils-event-store/test-utils-event/src/test/java/uk/gov/justice/services/test/utils/events/EventStoreDataAccessIT.java @@ -0,0 +1,200 @@ +package uk.gov.justice.services.test.utils.events; + +import static java.util.Collections.emptyList; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; +import static uk.gov.justice.services.test.utils.events.EventBuilder.eventBuilder; +import static uk.gov.justice.services.test.utils.events.PublishedEventBuilder.publishedEventBuilder; + +import uk.gov.justice.services.eventsourcing.repository.jdbc.event.Event; +import uk.gov.justice.services.eventsourcing.repository.jdbc.event.PublishedEvent; +import uk.gov.justice.services.test.utils.persistence.FrameworkTestDataSourceFactory; +import uk.gov.justice.services.test.utils.persistence.TableCleaner; + +import java.util.List; +import java.util.UUID; + +import javax.sql.DataSource; + +import org.junit.Test; + +public class EventStoreDataAccessIT { + + private final DataSource eventStoreDataSource = new FrameworkTestDataSourceFactory().createEventStoreDataSource(); + + private final EventStoreDataAccess eventStoreDataAccess = new EventStoreDataAccess(eventStoreDataSource); + + @Test + public void shouldCreateAnEntryInTheEventLogTableUsingAnEvent() throws Exception { + + new TableCleaner().clean("event_log", eventStoreDataSource); + + assertThat(eventStoreDataAccess.findAllEvents(), is(emptyList())); + + final Event event_1 = eventBuilder().withName("event 1").build(); + final Event event_2 = eventBuilder().withName("event 2").build(); + final Event event_3 = eventBuilder().withName("event 3").build(); + + eventStoreDataAccess.insertIntoEventLog(event_1); + eventStoreDataAccess.insertIntoEventLog(event_2); + eventStoreDataAccess.insertIntoEventLog(event_3); + + final List events = eventStoreDataAccess.findAllEvents(); + + assertThat(events.size(), is(3)); + + assertThat(events.get(0), is(event_1)); + assertThat(events.get(1), is(event_2)); + assertThat(events.get(2), is(event_3)); + } + + @Test + public void shouldInsertIntoEventLogTableUsingParameters() throws Exception { + + new TableCleaner().clean("event_log", eventStoreDataSource); + + assertThat(eventStoreDataAccess.findAllEvents(), is(emptyList())); + + final Event event_1 = eventBuilder().withName("event 1").build(); + final Event event_2 = eventBuilder().withName("event 2").build(); + final Event event_3 = eventBuilder().withName("event 3").build(); + + eventStoreDataAccess.insertIntoEventLog( + event_1.getId(), + event_1.getStreamId(), + event_1.getPositionInStream(), + event_1.getCreatedAt(), + event_1.getName(), + event_1.getPayload(), + event_1.getMetadata() + ); + eventStoreDataAccess.insertIntoEventLog( + event_2.getId(), + event_2.getStreamId(), + event_2.getPositionInStream(), + event_2.getCreatedAt(), + event_2.getName(), + event_2.getPayload(), + event_2.getMetadata() + ); + eventStoreDataAccess.insertIntoEventLog( + event_3.getId(), + event_3.getStreamId(), + event_3.getPositionInStream(), + event_3.getCreatedAt(), + event_3.getName(), + event_3.getPayload(), + event_3.getMetadata() + ); + + + final List events = eventStoreDataAccess.findAllEvents(); + + assertThat(events.size(), is(3)); + + assertThat(events.get(0), is(event_1)); + assertThat(events.get(1), is(event_2)); + assertThat(events.get(2), is(event_3)); + } + + @Test + public void shouldGetEventsByStreamId() throws Exception { + + new TableCleaner().clean("event_log", eventStoreDataSource); + + assertThat(eventStoreDataAccess.findAllEvents(), is(emptyList())); + + final UUID streamId_1 = UUID.randomUUID(); + final UUID streamId_2 = UUID.randomUUID(); + + final Event event_1 = eventBuilder().withName("event 1").withStreamId(streamId_1).withPositionInStream(1L).build(); + final Event event_2 = eventBuilder().withName("event 2").withStreamId(streamId_2).withPositionInStream(1L).build(); + final Event event_3 = eventBuilder().withName("event 3").withStreamId(streamId_1).withPositionInStream(2L).build(); + + eventStoreDataAccess.insertIntoEventLog(event_1); + eventStoreDataAccess.insertIntoEventLog(event_2); + eventStoreDataAccess.insertIntoEventLog(event_3); + + final List eventsOfStream_1 = eventStoreDataAccess.findEventsByStream(streamId_1); + + assertThat(eventsOfStream_1.size(), is(2)); + + assertThat(eventsOfStream_1.get(0), is(event_1)); + assertThat(eventsOfStream_1.get(1), is(event_3)); + + final List eventsOfStream_2 = eventStoreDataAccess.findEventsByStream(streamId_2); + + assertThat(eventsOfStream_2.size(), is(1)); + assertThat(eventsOfStream_2.get(0), is(event_2)); + } + + @Test + public void shouldInsertAndGetPublishedEvents() throws Exception { + + new TableCleaner().clean("published_event", eventStoreDataSource); + + assertThat(eventStoreDataAccess.findAllPublishedEvents(), is(emptyList())); + + final PublishedEvent publishedEvent_1 = publishedEventBuilder() + .withName("published event 1") + .withPreviousEventNumber(0) + .withEventNumber(1) + .build(); + final PublishedEvent publishedEvent_2 = publishedEventBuilder() + .withName("published event 2") + .withPreviousEventNumber(1) + .withEventNumber(2) + .build(); + final PublishedEvent publishedEvent_3 = publishedEventBuilder() + .withName("published event 3") + .withPreviousEventNumber(2) + .withEventNumber(3) + .build(); + + eventStoreDataAccess.insertIntoPublishedEvent(publishedEvent_1); + eventStoreDataAccess.insertIntoPublishedEvent(publishedEvent_2); + eventStoreDataAccess.insertIntoPublishedEvent(publishedEvent_3); + + final List publishedEvents = eventStoreDataAccess.findAllPublishedEvents(); + + assertThat(publishedEvents.size(), is(3)); + assertThat(publishedEvents.get(0), is(publishedEvent_1)); + assertThat(publishedEvents.get(1), is(publishedEvent_2)); + assertThat(publishedEvents.get(2), is(publishedEvent_3)); + } + + @Test + public void shouldGetPublishedEventsByOrderedByEventNumber() throws Exception { + + new TableCleaner().clean("published_event", eventStoreDataSource); + + assertThat(eventStoreDataAccess.findAllPublishedEvents(), is(emptyList())); + + final PublishedEvent publishedEvent_1 = publishedEventBuilder() + .withName("published event 1") + .withPreviousEventNumber(0) + .withEventNumber(1) + .build(); + final PublishedEvent publishedEvent_2 = publishedEventBuilder() + .withName("published event 2") + .withPreviousEventNumber(1) + .withEventNumber(2) + .build(); + final PublishedEvent publishedEvent_3 = publishedEventBuilder() + .withName("published event 3") + .withPreviousEventNumber(2) + .withEventNumber(3) + .build(); + + eventStoreDataAccess.insertIntoPublishedEvent(publishedEvent_3); + eventStoreDataAccess.insertIntoPublishedEvent(publishedEvent_1); + eventStoreDataAccess.insertIntoPublishedEvent(publishedEvent_2); + + final List publishedEvents = eventStoreDataAccess.findAllPublishedEventsOrderedByEventNumber(); + + assertThat(publishedEvents.size(), is(3)); + assertThat(publishedEvents.get(0), is(publishedEvent_1)); + assertThat(publishedEvents.get(1), is(publishedEvent_2)); + assertThat(publishedEvents.get(2), is(publishedEvent_3)); + } +}