71 行
2.7 KiB
TypeScript
71 行
2.7 KiB
TypeScript
import { OrderStateMachine, OrderStatus, OrderEvent } from '../src/core/order/order-state-machine';
|
|
|
|
describe('OrderStateMachine (TDD 测试套件: 陪玩订单状态机驱动)', () => {
|
|
let stateMachine: OrderStateMachine;
|
|
|
|
beforeEach(() => {
|
|
stateMachine = new OrderStateMachine();
|
|
});
|
|
|
|
describe('1. 正向订单履约流转', () => {
|
|
it('正常流程: 待付款 -> 待接单 -> 服务中 -> 待确认 -> 已完成', () => {
|
|
let state = OrderStatus.PENDING_PAYMENT;
|
|
|
|
state = stateMachine.transition(state, OrderEvent.PAY_SUCCESS);
|
|
expect(state).toBe(OrderStatus.PENDING_ACCEPT);
|
|
|
|
state = stateMachine.transition(state, OrderEvent.EXPERT_ACCEPT);
|
|
expect(state).toBe(OrderStatus.IN_SERVICE);
|
|
|
|
state = stateMachine.transition(state, OrderEvent.EXPERT_APPLY_FINISH);
|
|
expect(state).toBe(OrderStatus.PENDING_CONFIRM);
|
|
|
|
state = stateMachine.transition(state, OrderEvent.BUYER_CONFIRM);
|
|
expect(state).toBe(OrderStatus.COMPLETED);
|
|
});
|
|
});
|
|
|
|
describe('2. 取消与拒单退款流转', () => {
|
|
it('待付款状态下买家取消,变为已取消', () => {
|
|
const state = stateMachine.transition(OrderStatus.PENDING_PAYMENT, OrderEvent.CANCEL);
|
|
expect(state).toBe(OrderStatus.CANCELLED);
|
|
});
|
|
|
|
it('待接单状态下大神拒单或超时,变为已退款', () => {
|
|
const state = stateMachine.transition(OrderStatus.PENDING_ACCEPT, OrderEvent.EXPERT_REJECT);
|
|
expect(state).toBe(OrderStatus.REFUNDED);
|
|
});
|
|
});
|
|
|
|
describe('3. 售后与仲裁介入流转', () => {
|
|
it('待确认状态下买家发起申诉仲裁,进入仲裁中', () => {
|
|
const state = stateMachine.transition(OrderStatus.PENDING_CONFIRM, OrderEvent.BUYER_DISPUTE);
|
|
expect(state).toBe(OrderStatus.DISPUTED);
|
|
});
|
|
|
|
it('仲裁判定买家胜诉,转为已退款', () => {
|
|
const state = stateMachine.transition(OrderStatus.DISPUTED, OrderEvent.ARBITRATE_REFUND);
|
|
expect(state).toBe(OrderStatus.REFUNDED);
|
|
});
|
|
|
|
it('仲裁驳回申诉,转为已完成', () => {
|
|
const state = stateMachine.transition(OrderStatus.DISPUTED, OrderEvent.ARBITRATE_RELEASE);
|
|
expect(state).toBe(OrderStatus.COMPLETED);
|
|
});
|
|
});
|
|
|
|
describe('4. 非法状态跃迁防御', () => {
|
|
it('待付款状态直接跳至已完成应抛出非法操作异常', () => {
|
|
expect(() => {
|
|
stateMachine.transition(OrderStatus.PENDING_PAYMENT, OrderEvent.BUYER_CONFIRM);
|
|
}).toThrow('非法状态流转');
|
|
});
|
|
|
|
it('已完成订单不可再次发起退款或取消', () => {
|
|
expect(() => {
|
|
stateMachine.transition(OrderStatus.COMPLETED, OrderEvent.CANCEL);
|
|
}).toThrow('非法状态流转');
|
|
});
|
|
});
|
|
});
|