Skip to content

Commit 12e9aa7

Browse files
committed
fix: surface the inventory error when the stock check fails
OrderService reported every failed stock check as insufficient stock, which hid the real reason, for example a non-positive quantity. It now forwards the inventory message and only reports insufficient stock when the check itself succeeded.
1 parent 23462b6 commit 12e9aa7

3 files changed

Lines changed: 18 additions & 3 deletions

File tree

‎service-oriented-architecture/README.md‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,10 @@ public class OrderService implements Service {
203203
}
204204
var stock = bus.send(new ServiceRequest(INVENTORY_SERVICE, "checkStock",
205205
Map.of("sku", sku, "quantity", quantity), credential));
206-
if (!stock.success() || !Boolean.TRUE.equals(stock.body())) {
206+
if (!stock.success()) {
207+
return ServiceResponse.error("Order rejected: " + stock.message());
208+
}
209+
if (!Boolean.TRUE.equals(stock.body())) {
207210
return ServiceResponse.error("Order rejected: insufficient stock for " + sku);
208211
}
209212
var reservation = bus.send(new ServiceRequest(INVENTORY_SERVICE, "reserve",

‎service-oriented-architecture/src/main/java/com/iluwatar/soa/OrderService.java‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,10 @@ private ServiceResponse placeOrder(ServiceRequest request) {
115115
"checkStock",
116116
Map.of("sku", sku, "quantity", quantity),
117117
credential));
118-
if (!stock.success() || !Boolean.TRUE.equals(stock.body())) {
118+
if (!stock.success()) {
119+
return ServiceResponse.error("Order rejected: " + stock.message());
120+
}
121+
if (!Boolean.TRUE.equals(stock.body())) {
119122
return ServiceResponse.error("Order rejected: insufficient stock for " + sku);
120123
}
121124

‎service-oriented-architecture/src/test/java/com/iluwatar/soa/OrderServiceTest.java‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,19 @@ void shouldRejectOrderWhenStockCheckFails() {
147147
var response = placeOrder(stubBus, "C-1", "LAPTOP", 1, 899.0, CREDENTIAL);
148148

149149
assertFalse(response.success());
150-
assertEquals("Order rejected: insufficient stock for LAPTOP", response.message());
150+
assertEquals("Order rejected: inventory unavailable", response.message());
151151
assertEquals(0, charges.get());
152152
}
153153

154+
@Test
155+
void shouldRejectNonPositiveQuantityWithTheInventoryReason() {
156+
var response = placeOrder("C-1", "LAPTOP", -5, 899.0, CREDENTIAL);
157+
158+
assertFalse(response.success());
159+
assertEquals("Order rejected: Quantity must be positive: -5", response.message());
160+
assertEquals(true, checkStock("LAPTOP", 2));
161+
}
162+
154163
@Test
155164
void shouldFailForUnknownOperation() {
156165
var response = bus.send(new ServiceRequest(OrderService.NAME, "cancelOrder", Map.of()));

0 commit comments

Comments
 (0)