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 {
}
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());
} else {
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) {
return service.getById(id);
}
......
......@@ -24,14 +24,15 @@
package de.ozgcloud.nachrichten.postfach;
import static org.assertj.core.api.Assertions.*;
import static org.awaitility.Awaitility.*;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import org.apache.commons.collections.MapUtils;
import org.awaitility.Awaitility;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
......@@ -55,6 +56,7 @@ import lombok.SneakyThrows;
"grpc.server.inProcessName=test",
"grpc.client.vorgang-manager.address=in-process:test",
"grpc.client.ozgcloud-command-manager.address=in-process:test",
"grpc.client.pluto.address=in-process:test",
})
@DataITCase
@DirtiesContext
......@@ -63,6 +65,8 @@ class PersistPostfachNachrichtServiceImplITCase {
@Autowired
private PersistPostfachNachrichtServiceImpl service;
@Autowired
private PostfachNachrichtMapper postfachNachrichtMapper;
@Autowired
private MongoOperations mongoOperations;
......@@ -75,6 +79,36 @@ class PersistPostfachNachrichtServiceImplITCase {
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")
@Nested
class TestFindRueckfragen {
......@@ -101,7 +135,7 @@ class PersistPostfachNachrichtServiceImplITCase {
void shouldPersistAnswer() {
service.persistAnswer(referencedNachrichtId, createPostfachNachricht());
Awaitility.await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> {
await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> {
var persistedAnswers = findAllVorgangAttachedItems();
assertThat(persistedAnswers).hasSize(1).first()
.extracting(VorgangAttachedItem::getItem)
......
......@@ -38,6 +38,9 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
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.mockito.ArgumentCaptor;
import org.mockito.Captor;
......@@ -73,9 +76,9 @@ class VorgangAttachedItemEventListenerTest {
@Nested
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
private ArgumentCaptor<VorgangAttachedItem> itemCaptor;
......@@ -136,7 +139,7 @@ class VorgangAttachedItemEventListenerTest {
@DisplayName("Update item")
@Nested
class TestUpdateItem {
private Map<String, Object> bodyMap = VorgangAttachedItemTestFactory.asMap();
private final Map<String, Object> bodyMap = VorgangAttachedItemTestFactory.asMap();
private Command command = buildCommand(bodyMap);
......@@ -195,6 +198,20 @@ class VorgangAttachedItemEventListenerTest {
verify(service).update(eq(CommandTestFactory.ID), itemCaptor.capture());
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() {
......@@ -250,15 +267,15 @@ class VorgangAttachedItemEventListenerTest {
@Captor
private ArgumentCaptor<VorgangAttachedItemUpdatedEvent> eventCaptor;
private Map<String, Object> itemMap = Map.of("number", "73");
private Set<String> itemKeys = Set.of("number");
private Map<String, Object> bodyMap = Map.of("id", VorgangAttachedItemTestFactory.ID, VorgangAttachedItem.FIELDNAME_ITEM,
private final Map<String, Object> itemMap = Map.of("number", "73");
private final Set<String> itemKeys = Set.of("number");
private final Map<String, Object> bodyMap = Map.of("id", VorgangAttachedItemTestFactory.ID, VorgangAttachedItem.FIELDNAME_ITEM,
itemMap);
private Command command = CommandTestFactory.createBuilder().relationId(VorgangAttachedItemTestFactory.ID)
private final Command command = CommandTestFactory.createBuilder().relationId(VorgangAttachedItemTestFactory.ID)
.relationVersion(VorgangAttachedItemTestFactory.VERSION).bodyObject(bodyMap).build();
private Map<String, Object> patchMap = Collections.emptyMap();
private final Map<String, Object> patchMap = Collections.emptyMap();
@BeforeEach
void mock() {
......@@ -352,7 +369,7 @@ class VorgangAttachedItemEventListenerTest {
@DisplayName("Delete item")
class TestDeleteItem {
private Command command = CommandTestFactory.createBuilder().relationId(VorgangAttachedItemTestFactory.ID)
private final Command command = CommandTestFactory.createBuilder().relationId(VorgangAttachedItemTestFactory.ID)
.relationVersion(VorgangAttachedItemTestFactory.VERSION).build();
@Nested
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment