优化
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
package com.baiyue.common.event;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import java.time.Instant;
|
||||
import java.util.UUID;
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
|
||||
class DeliveryAckTest {
|
||||
private EventEnvelope event(String type) {
|
||||
return new EventEnvelope(UUID.randomUUID().toString(), type, 1, Instant.now(),
|
||||
RegionCode.CN, RegionCode.OVERSEAS, "0", "TEST", "1", 1, null,
|
||||
null, null, null, new ObjectMapper().createObjectNode(), "sha256:" + "a".repeat(64));
|
||||
}
|
||||
|
||||
@Test
|
||||
void roundTripsAndAcceptsOnlyTheSentIdentityAndHash() throws Exception {
|
||||
var event = event(EventTypes.WALLET_COMMAND_REQUESTED);
|
||||
var ack = DeliveryAck.of(event, DeliveryAck.Outcome.APPLIED);
|
||||
var mapper = new ObjectMapper();
|
||||
assertThat(mapper.readValue(mapper.writeValueAsString(ack), DeliveryAck.class)).isEqualTo(ack);
|
||||
assertThatCode(() -> ack.requireMatches(event)).doesNotThrowAnyException();
|
||||
assertThatThrownBy(() -> ack.requireMatches(event(EventTypes.WALLET_COMMAND_REQUESTED))).isInstanceOf(IllegalArgumentException.class);
|
||||
assertThatThrownBy(() -> new DeliveryAck(event.eventId(), "sha256:" + "b".repeat(64), DeliveryAck.Outcome.APPLIED)
|
||||
.requireMatches(event)).isInstanceOf(IllegalArgumentException.class);
|
||||
assertThatThrownBy(() -> mapper.readValue("{\"eventId\":\"" + event.eventId() + "\",\"payloadHash\":\"" + event.payloadHash() + "\",\"outcome\":\"RECEIVED\"}", DeliveryAck.class))
|
||||
.isInstanceOf(Exception.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void staleCannotAcknowledgeWalletCommandsResultsOrIndependentFees() {
|
||||
for (String type : new String[]{EventTypes.WALLET_COMMAND_REQUESTED, EventTypes.WALLET_COMMAND_COMPLETED,
|
||||
EventTypes.BUSINESS_FEE_SOURCE_CHANGED, EventTypes.OVERSEAS_DELIVERY_COMPLETED}) {
|
||||
var event = event(type);
|
||||
assertThatThrownBy(() -> DeliveryAck.of(event, DeliveryAck.Outcome.STALE).requireMatches(event))
|
||||
.isInstanceOf(IllegalArgumentException.class);
|
||||
assertThatCode(() -> DeliveryAck.of(event, DeliveryAck.Outcome.DUPLICATE).requireMatches(event)).doesNotThrowAnyException();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void mixedLastlegOutboxRoutesWalletToFinanceAndUnloadingToFirstleg() {
|
||||
assertThat(EventDeliveryRoute.forEventType(EventTypes.WALLET_COMMAND_REQUESTED))
|
||||
.isEqualTo(new EventDeliveryRoute("finance-service", "/internal/finance/v1/wallet-command-events", false));
|
||||
assertThat(EventDeliveryRoute.forEventType(EventTypes.OVERSEAS_CONTAINER_UNLOADED).serviceName()).isEqualTo("firstleg-service");
|
||||
assertThat(EventDeliveryRoute.forEventType(EventTypes.WALLET_COMMAND_COMPLETED).serviceName()).isEqualTo("lastleg-service");
|
||||
assertThatThrownBy(() -> EventDeliveryRoute.forEventType("UnknownEvent")).isInstanceOf(IllegalArgumentException.class);
|
||||
assertThatThrownBy(() -> EventDeliveryRoute.forEventType(EventTypes.IAM_USER_STATUS_CHANGED)).isInstanceOf(IllegalArgumentException.class);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user