OrderStatus.java

1
package com.rbctcsworld.ecommerce.order;
2
3
import java.util.List;
4
import java.util.Map;
5
import java.util.Set;
6
7
/**
8
 * Order lifecycle as an explicit state machine (stored as VARCHAR, guarded by a DB CHECK constraint).
9
 *
10
 *   PLACED ──pay──> PAID ──ship──> SHIPPED ──deliver──> DELIVERED ──request return──> RETURN_REQUESTED
11
 *     │              │                                     ^                              │      │
12
 *     └──cancel──┐   └──cancel (refund)──┐                 └──────── reject return ───────┘      │
13
 *                v                       v                                                      approve
14
 *            CANCELLED <─────────────────┘                                                (refund)│
15
 *                                                                                                  v
16
 *                                                                                              RETURNED
17
 * Every move not listed in ALLOWED is rejected with 409.
18
 */
19
public final class OrderStatus {
20
    public static final String PLACED = "PLACED";
21
    public static final String PAID = "PAID";
22
    public static final String SHIPPED = "SHIPPED";
23
    public static final String DELIVERED = "DELIVERED";
24
    public static final String RETURN_REQUESTED = "RETURN_REQUESTED";
25
    public static final String RETURNED = "RETURNED";
26
    public static final String CANCELLED = "CANCELLED";
27
28
    public static final List<String> ALL =
29
            List.of(PLACED, PAID, SHIPPED, DELIVERED, RETURN_REQUESTED, RETURNED, CANCELLED);
30
31
    public static final Map<String, Set<String>> ALLOWED = Map.of(
32
            PLACED, Set.of(PAID, CANCELLED),
33
            PAID, Set.of(SHIPPED, CANCELLED),
34
            SHIPPED, Set.of(DELIVERED),
35
            DELIVERED, Set.of(RETURN_REQUESTED),
36
            RETURN_REQUESTED, Set.of(RETURNED, DELIVERED),
37
            RETURNED, Set.of(),
38
            CANCELLED, Set.of());
39
40
    private OrderStatus() {
41
    }
42
43
    public static boolean canMove(String from, String to) {
44 2 1. canMove : replaced boolean return with true for com/rbctcsworld/ecommerce/order/OrderStatus::canMove → KILLED
2. canMove : replaced boolean return with false for com/rbctcsworld/ecommerce/order/OrderStatus::canMove → KILLED
        return ALLOWED.getOrDefault(from, Set.of()).contains(to);
45
    }
46
}

Mutations

44

1.1
Location : canMove
Killed by : com.rbctcsworld.ecommerce.returns.ReturnServiceTest.[engine:junit-jupiter]/[class:com.rbctcsworld.ecommerce.returns.ReturnServiceTest]/[method:notYetDeliveredCannotBeReturned()]
replaced boolean return with true for com/rbctcsworld/ecommerce/order/OrderStatus::canMove → KILLED

2.2
Location : canMove
Killed by : com.rbctcsworld.ecommerce.order.OrderStateMachineTest.[engine:junit-jupiter]/[class:com.rbctcsworld.ecommerce.order.OrderStateMachineTest]/[method:shipAndDeliverSetTimestampsAndTracking()]
replaced boolean return with false for com/rbctcsworld/ecommerce/order/OrderStatus::canMove → KILLED

Active mutators

Tests examined


Report generated by PIT 1.30.0 support