feat: deduct personal expenses from deposit refunds

This commit is contained in:
2026-07-15 09:03:20 +08:00
parent 17a5046ea0
commit c86550f894
5 changed files with 105 additions and 10 deletions

View File

@@ -2,9 +2,10 @@ import { DepositsService } from './deposits.service';
import { Deposit } from '../entities/deposit.entity';
describe('DepositsService — direct refund', () => {
it('refunds the full available balance and stores audit fields', async () => {
it('deducts unbilled personal expenses before refunding the remaining balance', async () => {
const deposit = {
id: 1,
studentId: 10,
amount: 500,
status: 'paid',
} as Deposit;
@@ -12,7 +13,17 @@ describe('DepositsService — direct refund', () => {
findOne: jest.fn().mockResolvedValue(deposit),
save: jest.fn().mockImplementation(async (value: Deposit) => value),
};
const service = new DepositsService(repo as never, {} as never, {} as never);
const personalExpenseRepo = {
createQueryBuilder: jest.fn().mockReturnValue({
select: jest.fn().mockReturnThis(),
addSelect: jest.fn().mockReturnThis(),
where: jest.fn().mockReturnThis(),
andWhere: jest.fn().mockReturnThis(),
groupBy: jest.fn().mockReturnThis(),
getRawMany: jest.fn().mockResolvedValue([{ studentId: 10, amount: '120' }]),
}),
};
const service = new DepositsService(repo as never, {} as never, {} as never, personalExpenseRepo as never);
const result = await service.refund(
1,
@@ -23,7 +34,9 @@ describe('DepositsService — direct refund', () => {
expect(result).toMatchObject({
refundDate: '2026-07-13',
amount: 0,
refundAmount: 500,
refundAmount: 380,
deductionAmount: 120,
deductionReason: '自动扣除个人附加费用 ¥120.00',
notes: '退还剩余押金',
status: 'refunded',
refundedBy: 42,