Skip to content
Snippets Groups Projects
Commit 18321d5a authored by OZGCloud's avatar OZGCloud
Browse files

OZG-5917 handle update_attached_item order when relationVersion is 0

parent d5331df1
Branches
Tags
No related merge requests found
...@@ -95,13 +95,17 @@ class VorgangAttachedItemEventListener { ...@@ -95,13 +95,17 @@ class VorgangAttachedItemEventListener {
} }
private void doUpdate(Command command, VorgangAttachedItem filledItem) { private void doUpdate(Command command, VorgangAttachedItem filledItem) {
if (Objects.nonNull(command.getRelationVersion())) { if (isVersionSet(command)) {
service.update(command.getId(), filledItem.toBuilder().version(command.getRelationVersion()).build()); service.update(command.getId(), filledItem.toBuilder().version(command.getRelationVersion()).build());
} else { } else {
service.forceUpdate(command.getId(), filledItem.getId(), filledItem.getItem()); service.forceUpdate(command.getId(), filledItem.getId(), filledItem.getItem());
} }
} }
private boolean isVersionSet(Command command) {
return Objects.nonNull(command.getRelationVersion()) && command.getRelationVersion() > 0;
}
VorgangAttachedItem getVorgangAttachedItem(String id) { VorgangAttachedItem getVorgangAttachedItem(String id) {
return service.getById(id); return service.getById(id);
} }
......
...@@ -24,14 +24,15 @@ ...@@ -24,14 +24,15 @@
package de.ozgcloud.nachrichten.postfach; package de.ozgcloud.nachrichten.postfach;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import static org.awaitility.Awaitility.*;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.awaitility.Awaitility;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
...@@ -55,6 +56,7 @@ import lombok.SneakyThrows; ...@@ -55,6 +56,7 @@ import lombok.SneakyThrows;
"grpc.server.inProcessName=test", "grpc.server.inProcessName=test",
"grpc.client.vorgang-manager.address=in-process:test", "grpc.client.vorgang-manager.address=in-process:test",
"grpc.client.ozgcloud-command-manager.address=in-process:test", "grpc.client.ozgcloud-command-manager.address=in-process:test",
"grpc.client.pluto.address=in-process:test",
}) })
@DataITCase @DataITCase
@DirtiesContext @DirtiesContext
...@@ -63,6 +65,8 @@ class PersistPostfachNachrichtServiceImplITCase { ...@@ -63,6 +65,8 @@ class PersistPostfachNachrichtServiceImplITCase {
@Autowired @Autowired
private PersistPostfachNachrichtServiceImpl service; private PersistPostfachNachrichtServiceImpl service;
@Autowired
private PostfachNachrichtMapper postfachNachrichtMapper;
@Autowired @Autowired
private MongoOperations mongoOperations; private MongoOperations mongoOperations;
...@@ -75,6 +79,36 @@ class PersistPostfachNachrichtServiceImplITCase { ...@@ -75,6 +79,36 @@ class PersistPostfachNachrichtServiceImplITCase {
vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build(), Vorgang.COLLECTION_NAME).getId(); vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build(), Vorgang.COLLECTION_NAME).getId();
} }
@Nested
class TestPersistPostfachNachricht {
@Test
void shouldPersistPostfachNachricht() {
var postfachNachricht = PostfachNachrichtTestFactory.createBuilder().id(null).vorgangId(vorgangId).build();
service.persistNachricht(Optional.empty(), postfachNachricht);
assertThat(loadPostfachNachrichts()).hasSize(1).first().usingRecursiveComparison().ignoringFields("id").isEqualTo(postfachNachricht);
}
@Test
void shouldUpdatePersistedNachricht() {
var persistedNachrichtId = mongoOperations.save(VorgangAttachedItemTestFactory.createBuilder().id(null).version(0)
.itemName(PersistPostfachNachrichtServiceImpl.ITEM_NAME).item(PostfachNachrichtTestFactory.asMap()).build()).getId();
var postfachNachricht = PostfachNachrichtTestFactory.createBuilder().id(persistedNachrichtId).vorgangId(vorgangId)
.subject("updated subject").mailBody("updated body").build();
service.persistNachricht(Optional.empty(), postfachNachricht);
assertThat(loadPostfachNachrichts()).hasSize(1).first().usingRecursiveComparison().isEqualTo(postfachNachricht);
}
private List<PostfachNachricht> loadPostfachNachrichts() {
return await().atMost(60, TimeUnit.MINUTES)
.until(() -> mongoOperations.findAll(VorgangAttachedItem.class), list -> !list.isEmpty()).stream()
.map(VorgangAttachedItem::getItem).map(postfachNachrichtMapper::fromMapToPostfachMail).toList();
}
}
@DisplayName("Find rueckfragen") @DisplayName("Find rueckfragen")
@Nested @Nested
class TestFindRueckfragen { class TestFindRueckfragen {
...@@ -101,7 +135,7 @@ class PersistPostfachNachrichtServiceImplITCase { ...@@ -101,7 +135,7 @@ class PersistPostfachNachrichtServiceImplITCase {
void shouldPersistAnswer() { void shouldPersistAnswer() {
service.persistAnswer(referencedNachrichtId, createPostfachNachricht()); service.persistAnswer(referencedNachrichtId, createPostfachNachricht());
Awaitility.await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> { await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> {
var persistedAnswers = findAllVorgangAttachedItems(); var persistedAnswers = findAllVorgangAttachedItems();
assertThat(persistedAnswers).hasSize(1).first() assertThat(persistedAnswers).hasSize(1).first()
.extracting(VorgangAttachedItem::getItem) .extracting(VorgangAttachedItem::getItem)
......
...@@ -38,6 +38,9 @@ import org.junit.jupiter.api.BeforeEach; ...@@ -38,6 +38,9 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullSource;
import org.junit.jupiter.params.provider.ValueSource;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
import org.mockito.Captor; import org.mockito.Captor;
...@@ -73,9 +76,9 @@ class VorgangAttachedItemEventListenerTest { ...@@ -73,9 +76,9 @@ class VorgangAttachedItemEventListenerTest {
@Nested @Nested
class TestCreateItem { class TestCreateItem {
private Map<String, Object> bodyMap = VorgangAttachedItemTestFactory.asMap(); private final Map<String, Object> bodyMap = VorgangAttachedItemTestFactory.asMap();
private Command command = CommandTestFactory.createBuilder().bodyObject(bodyMap).relationId(VorgangTestFactory.ID).build(); private final Command command = CommandTestFactory.createBuilder().bodyObject(bodyMap).relationId(VorgangTestFactory.ID).build();
@Captor @Captor
private ArgumentCaptor<VorgangAttachedItem> itemCaptor; private ArgumentCaptor<VorgangAttachedItem> itemCaptor;
...@@ -136,7 +139,7 @@ class VorgangAttachedItemEventListenerTest { ...@@ -136,7 +139,7 @@ class VorgangAttachedItemEventListenerTest {
@DisplayName("Update item") @DisplayName("Update item")
@Nested @Nested
class TestUpdateItem { class TestUpdateItem {
private Map<String, Object> bodyMap = VorgangAttachedItemTestFactory.asMap(); private final Map<String, Object> bodyMap = VorgangAttachedItemTestFactory.asMap();
private Command command = buildCommand(bodyMap); private Command command = buildCommand(bodyMap);
...@@ -195,6 +198,20 @@ class VorgangAttachedItemEventListenerTest { ...@@ -195,6 +198,20 @@ class VorgangAttachedItemEventListenerTest {
verify(service).update(eq(CommandTestFactory.ID), itemCaptor.capture()); verify(service).update(eq(CommandTestFactory.ID), itemCaptor.capture());
assertThat(itemCaptor.getValue().getId()).isEqualTo(VorgangAttachedItemTestFactory.ID); assertThat(itemCaptor.getValue().getId()).isEqualTo(VorgangAttachedItemTestFactory.ID);
} }
@DisplayName("should call forceUpdate when")
@ParameterizedTest(name = "relationVersion is {0}")
@NullSource
@ValueSource(longs = { -10, 0 })
void shouldCallForceUpdate(Long relationVersion) {
command = CommandTestFactory.createBuilder().relationId(VorgangAttachedItemTestFactory.ID).relationVersion(relationVersion)
.bodyObject(bodyMap)
.build();
listener.updateItem(CommandCreatedEventTestFactory.create(command));
verify(service).forceUpdate(CommandTestFactory.ID, VorgangAttachedItemTestFactory.ID, VorgangAttachedItemTestFactory.STRING_MAP);
}
} }
private void doUpdateItem() { private void doUpdateItem() {
...@@ -250,15 +267,15 @@ class VorgangAttachedItemEventListenerTest { ...@@ -250,15 +267,15 @@ class VorgangAttachedItemEventListenerTest {
@Captor @Captor
private ArgumentCaptor<VorgangAttachedItemUpdatedEvent> eventCaptor; private ArgumentCaptor<VorgangAttachedItemUpdatedEvent> eventCaptor;
private Map<String, Object> itemMap = Map.of("number", "73"); private final Map<String, Object> itemMap = Map.of("number", "73");
private Set<String> itemKeys = Set.of("number"); private final Set<String> itemKeys = Set.of("number");
private Map<String, Object> bodyMap = Map.of("id", VorgangAttachedItemTestFactory.ID, VorgangAttachedItem.FIELDNAME_ITEM, private final Map<String, Object> bodyMap = Map.of("id", VorgangAttachedItemTestFactory.ID, VorgangAttachedItem.FIELDNAME_ITEM,
itemMap); itemMap);
private Command command = CommandTestFactory.createBuilder().relationId(VorgangAttachedItemTestFactory.ID) private final Command command = CommandTestFactory.createBuilder().relationId(VorgangAttachedItemTestFactory.ID)
.relationVersion(VorgangAttachedItemTestFactory.VERSION).bodyObject(bodyMap).build(); .relationVersion(VorgangAttachedItemTestFactory.VERSION).bodyObject(bodyMap).build();
private Map<String, Object> patchMap = Collections.emptyMap(); private final Map<String, Object> patchMap = Collections.emptyMap();
@BeforeEach @BeforeEach
void mock() { void mock() {
...@@ -352,7 +369,7 @@ class VorgangAttachedItemEventListenerTest { ...@@ -352,7 +369,7 @@ class VorgangAttachedItemEventListenerTest {
@DisplayName("Delete item") @DisplayName("Delete item")
class TestDeleteItem { class TestDeleteItem {
private Command command = CommandTestFactory.createBuilder().relationId(VorgangAttachedItemTestFactory.ID) private final Command command = CommandTestFactory.createBuilder().relationId(VorgangAttachedItemTestFactory.ID)
.relationVersion(VorgangAttachedItemTestFactory.VERSION).build(); .relationVersion(VorgangAttachedItemTestFactory.VERSION).build();
@Nested @Nested
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment