単体テストの 1 つが古いデータを返しているようです。このテストでは、イベント (チケットが販売されているもの) からいくつかのチケットの種類を削除できるかどうかをテストしています。コードで何が問題なのかを示すコメントを残しました。
@Test
public void deleteTicketTypeByDomainSpecificId() {
logger.info("Given we have a member with an event that has some ticket types");
Member member = createMember();
Event event = eventService.createEvent("My cool new event", member);
String eventId = event.getDomainSpecificId();
// create our first ticket type
TicketTypeCreator ticketTypeCreator = ticketTypeService.new TicketTypeCreator();
ticketTypeCreator.setUiId(UniqueIDGenerator.randomID());
ticketTypeCreator.setTicketTypeName("Seated ticket");
ticketTypeCreator.setTicketTypeUrl("http://www.joesevents.com/joe");
ticketTypeCreator.setTicketTypePrice("58.00");
ticketTypeCreator.setEvent(event);
TicketType ticketType1 = ticketTypeCreator.create();
// この時点で、1 つのチケット タイプが localhost:7474 で確認できます (予想どおり)
// create our second ticket type
ticketTypeCreator.setUiId(UniqueIDGenerator.randomID());
ticketTypeCreator.setTicketTypeName("Standing ticket");
ticketTypeCreator.setTicketTypeUrl("http://www.jillsevents.com");
ticketTypeCreator.setTicketTypePrice("38.00");
ticketTypeCreator.setEvent(event);
ticketTypeCreator.create();
// この時点で、localhost:7474 で 2 つのタイプのチケットが表示されます (予想どおり)
logger.info("When we delete a ticketType");
ticketTypeService.deleteTicketTypeByDomainSpecificId(ticketType1.getDomainSpecificId());
// この時点で、1 つのチケット タイプが localhost:7474 で確認できます (予想どおり)
// This code loads only one ticket type which is what we expect
Iterable<TicketType> ticketTypes = ticketTypeService.findAll();
int count = 0;
for (TicketType ticketType : ticketTypes) {
count ++;
}
assertThat(count, is(equalTo(1)));
logger.info("And the event should have one less ticket type type after we reload it");
// このコードは、ポート 7474 のデータベースが 1 つのチケット タイプを示していても、前のコードが 1 つのチケット タイプしか返さなかったとしても、2 つのチケット タイプをロードします。
event = eventService.loadEventByDomainSpecificId(eventId);
Set<TicketType> ticketTypes2 = event.getTicketTypes();
for (TicketType ticketType : ticketTypes2) {
System.out.println(ticketType.getTicketTypeName());
}
assertThat(event.getTicketTypes().size(), is(equalTo(1)));
}
eventService.loadEventByDomainSpecificId(eventId) は、以下に示すリポジトリを単純に呼び出す @Service です。サービスによるキャッシングは行われません。
@Repository
public interface EventRepository extends GraphRepository<Event>{
public Event findByDomainSpecificId(String domainSpecificId);
}