payment quotation v2 + payment orchestration v2 draft
This commit is contained in:
122
frontend/pshared/test/payment/payment_state_model_test.dart
Normal file
122
frontend/pshared/test/payment/payment_state_model_test.dart
Normal file
@@ -0,0 +1,122 @@
|
||||
import 'package:pshared/models/payment/payment.dart';
|
||||
import 'package:pshared/models/payment/state.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
void main() {
|
||||
group('PaymentOrchestrationState parser', () {
|
||||
test('maps v2 orchestration states', () {
|
||||
expect(
|
||||
paymentOrchestrationStateFromValue('orchestration_state_created'),
|
||||
PaymentOrchestrationState.created,
|
||||
);
|
||||
expect(
|
||||
paymentOrchestrationStateFromValue('ORCHESTRATION_STATE_EXECUTING'),
|
||||
PaymentOrchestrationState.executing,
|
||||
);
|
||||
expect(
|
||||
paymentOrchestrationStateFromValue(
|
||||
'orchestration_state_needs_attention',
|
||||
),
|
||||
PaymentOrchestrationState.needsAttention,
|
||||
);
|
||||
expect(
|
||||
paymentOrchestrationStateFromValue('orchestration_state_settled'),
|
||||
PaymentOrchestrationState.settled,
|
||||
);
|
||||
expect(
|
||||
paymentOrchestrationStateFromValue('orchestration_state_failed'),
|
||||
PaymentOrchestrationState.failed,
|
||||
);
|
||||
});
|
||||
|
||||
test('maps legacy payment states for compatibility', () {
|
||||
expect(
|
||||
paymentOrchestrationStateFromValue('payment_state_accepted'),
|
||||
PaymentOrchestrationState.created,
|
||||
);
|
||||
expect(
|
||||
paymentOrchestrationStateFromValue('payment_state_submitted'),
|
||||
PaymentOrchestrationState.executing,
|
||||
);
|
||||
expect(
|
||||
paymentOrchestrationStateFromValue('payment_state_settled'),
|
||||
PaymentOrchestrationState.settled,
|
||||
);
|
||||
expect(
|
||||
paymentOrchestrationStateFromValue('payment_state_cancelled'),
|
||||
PaymentOrchestrationState.failed,
|
||||
);
|
||||
});
|
||||
|
||||
test('unknown state maps to unspecified', () {
|
||||
expect(
|
||||
paymentOrchestrationStateFromValue('something_else'),
|
||||
PaymentOrchestrationState.unspecified,
|
||||
);
|
||||
expect(
|
||||
paymentOrchestrationStateFromValue(null),
|
||||
PaymentOrchestrationState.unspecified,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
group('Payment model state helpers', () {
|
||||
test('isPending and isTerminal are derived from typed state', () {
|
||||
const created = Payment(
|
||||
paymentRef: 'p-1',
|
||||
idempotencyKey: 'idem-1',
|
||||
state: 'orchestration_state_created',
|
||||
orchestrationState: PaymentOrchestrationState.created,
|
||||
failureCode: null,
|
||||
failureReason: null,
|
||||
lastQuote: null,
|
||||
metadata: null,
|
||||
createdAt: null,
|
||||
);
|
||||
const settled = Payment(
|
||||
paymentRef: 'p-2',
|
||||
idempotencyKey: 'idem-2',
|
||||
state: 'orchestration_state_settled',
|
||||
orchestrationState: PaymentOrchestrationState.settled,
|
||||
failureCode: null,
|
||||
failureReason: null,
|
||||
lastQuote: null,
|
||||
metadata: null,
|
||||
createdAt: null,
|
||||
);
|
||||
|
||||
expect(created.isPending, isTrue);
|
||||
expect(created.isTerminal, isFalse);
|
||||
expect(settled.isPending, isFalse);
|
||||
expect(settled.isTerminal, isTrue);
|
||||
});
|
||||
|
||||
test('isFailure handles both explicit code and failed state', () {
|
||||
const withFailureCode = Payment(
|
||||
paymentRef: 'p-3',
|
||||
idempotencyKey: 'idem-3',
|
||||
state: 'orchestration_state_executing',
|
||||
orchestrationState: PaymentOrchestrationState.executing,
|
||||
failureCode: 'failure_ledger',
|
||||
failureReason: 'ledger failed',
|
||||
lastQuote: null,
|
||||
metadata: null,
|
||||
createdAt: null,
|
||||
);
|
||||
const failedState = Payment(
|
||||
paymentRef: 'p-4',
|
||||
idempotencyKey: 'idem-4',
|
||||
state: 'orchestration_state_failed',
|
||||
orchestrationState: PaymentOrchestrationState.failed,
|
||||
failureCode: null,
|
||||
failureReason: null,
|
||||
lastQuote: null,
|
||||
metadata: null,
|
||||
createdAt: null,
|
||||
);
|
||||
|
||||
expect(withFailureCode.isFailure, isTrue);
|
||||
expect(failedState.isFailure, isTrue);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user