|
|
|
|
@ -168,11 +168,23 @@ class WalletPrerequisiteProjectionServiceTest {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ParameterizedTest
|
|
|
|
|
@ValueSource(strings = {"balance=1", "frozen_amount=1", "bank_name='已有开户行'", "status='DISABLED'"})
|
|
|
|
|
void nonShellAccountWithDifferentCardIsNeverOverwritten(String state) {
|
|
|
|
|
@ValueSource(strings = {"order_history", "debit_history", "status_disabled"})
|
|
|
|
|
void accountWithDownstreamHistoryOrDisabledIsNeverOverwritten(String scenario) {
|
|
|
|
|
seedCompleted();
|
|
|
|
|
String accountId = seedBoundShell();
|
|
|
|
|
jdbc.update("UPDATE simulated_bank_account SET " + state + " WHERE account_id=?", accountId);
|
|
|
|
|
jdbc.update("UPDATE wallet_application SET input_bank_card_number='6216610100007654321' WHERE user_id=?",
|
|
|
|
|
SUBJECT_USER);
|
|
|
|
|
if ("order_history".equals(scenario)) {
|
|
|
|
|
insertCancelledOrder(accountId, "00000000-0000-0000-0000-000000000890", "PROJECTION_ORDER");
|
|
|
|
|
} else if ("debit_history".equals(scenario)) {
|
|
|
|
|
insertCancelledOrder(accountId, "00000000-0000-0000-0000-000000000891", "PROJECTION_DEBIT");
|
|
|
|
|
jdbc.update("INSERT INTO exchange_debit_record (voucher_no,exchange_id,bank_account_id," +
|
|
|
|
|
"before_balance,amount,after_balance,status,created_at,created_by) " +
|
|
|
|
|
"VALUES ('VOUCHER_PROJECTION_DEBIT',?,?,50000,1000,49000,'SETTLED'," +
|
|
|
|
|
"CURRENT_TIMESTAMP,'test')", "00000000-0000-0000-0000-000000000891", accountId);
|
|
|
|
|
} else {
|
|
|
|
|
jdbc.update("UPDATE simulated_bank_account SET status='DISABLED' WHERE account_id=?", accountId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assertThatThrownBy(() -> service.ensureForSubject(subject()))
|
|
|
|
|
.isInstanceOf(BusinessException.class).hasMessageContaining("共享银行账户与模块三银行卡结果不一致");
|
|
|
|
|
@ -180,6 +192,41 @@ class WalletPrerequisiteProjectionServiceTest {
|
|
|
|
|
String.class, accountId)).isEqualTo("6222020000000000000");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
void retrainedCardOnUnusedProjectedAccountIsOverwrittenInPlace() {
|
|
|
|
|
seedCompleted();
|
|
|
|
|
service.ensureForSubject(subject());
|
|
|
|
|
String accountId = jdbc.queryForObject(
|
|
|
|
|
"SELECT account_id FROM simulated_bank_account WHERE user_id=?", String.class, SUBJECT_USER);
|
|
|
|
|
|
|
|
|
|
jdbc.update("UPDATE wallet_application SET input_bank_card_number='6216610100007654321' WHERE user_id=?",
|
|
|
|
|
SUBJECT_USER);
|
|
|
|
|
service.ensureForSubject(subject());
|
|
|
|
|
|
|
|
|
|
assertThat(jdbc.queryForObject("SELECT card_number FROM simulated_bank_account WHERE account_id=?",
|
|
|
|
|
String.class, accountId)).isEqualTo("6216610100007654321");
|
|
|
|
|
assertThat(jdbc.queryForObject("SELECT card_last4 FROM simulated_bank_account WHERE account_id=?",
|
|
|
|
|
String.class, accountId)).isEqualTo("4321");
|
|
|
|
|
assertThat(jdbc.queryForObject("SELECT bank_name FROM simulated_bank_account WHERE account_id=?",
|
|
|
|
|
String.class, accountId)).isEqualTo("测试银行");
|
|
|
|
|
ExchangeContext context = exchangeResources.loadContext(new ExchangeActor(SUBJECT_USER, "test", SCHOOL_ID, CLASS_ID));
|
|
|
|
|
assertThat(context.getBankCardNumber()).isEqualTo("6216610100007654321");
|
|
|
|
|
|
|
|
|
|
jdbc.update("UPDATE simulated_bank_account SET balance=49000.00 WHERE account_id=?", accountId);
|
|
|
|
|
service.ensureForSubject(subject());
|
|
|
|
|
assertThat(jdbc.queryForObject("SELECT balance FROM simulated_bank_account WHERE account_id=?",
|
|
|
|
|
BigDecimal.class, accountId)).isEqualByComparingTo("49000.00");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void insertCancelledOrder(String accountId, String orderId, String requestNo) {
|
|
|
|
|
jdbc.update("INSERT INTO currency_exchange_order (id,request_no,user_id,wallet_id,bank_account_id,bank_code," +
|
|
|
|
|
"organization_id,amount,currency,request_timestamp,message_text,signing_original_text,digest," +
|
|
|
|
|
"status,created_at,updated_at,created_by,updated_by) VALUES " +
|
|
|
|
|
"(?,?,?,?,?,?,?,1,'CNY','20260904090000','TEST','TEST','TEST','CANCELLED'," +
|
|
|
|
|
"CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,'test','test')",
|
|
|
|
|
orderId, requestNo, SUBJECT_USER, WALLET_ID, accountId, BANK_CODE, "ORG_EXPECTED");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
void evenCancelledExchangeHistoryPreventsShellRestoration() {
|
|
|
|
|
seedCompleted();
|
|
|
|
|
|