59 lines
2.4 KiB
TypeScript
59 lines
2.4 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
calculateNationBettingRewards,
|
|
purifyNationBettingSelection,
|
|
} from '../src/betting/nationBettingSettlement.js';
|
|
|
|
describe('nation betting settlement', () => {
|
|
it('sorts selections and rejects duplicates', () => {
|
|
expect(purifyNationBettingSelection([2, 0, 1], 3)).toEqual([0, 1, 2]);
|
|
expect(() => purifyNationBettingSelection([1, 1], 2)).toThrow('중복된 값이 있습니다.');
|
|
});
|
|
|
|
it('distributes an exclusive pool proportionally including the system bonus', () => {
|
|
expect(
|
|
calculateNationBettingRewards({
|
|
selectCount: 1,
|
|
isExclusive: null,
|
|
winner: [0],
|
|
stakes: [
|
|
{ generalId: 0, userId: null, selection: [-1], amount: 100 },
|
|
{ generalId: 1, userId: 'one', selection: [0], amount: 100 },
|
|
{ generalId: 2, userId: 'two', selection: [1], amount: 100 },
|
|
],
|
|
})
|
|
).toEqual([{ generalId: 1, userId: 'one', amount: 300, matchPoint: 1 }]);
|
|
});
|
|
|
|
it('preserves the legacy no-refund bug when an exclusive bet has no winner', () => {
|
|
expect(
|
|
calculateNationBettingRewards({
|
|
selectCount: 1,
|
|
isExclusive: null,
|
|
winner: [0],
|
|
stakes: [{ generalId: 2, userId: 'two', selection: [1], amount: 100 }],
|
|
})
|
|
).toEqual([]);
|
|
});
|
|
|
|
it('rolls empty tiers down and assigns the remainder to the highest winning tier', () => {
|
|
const rewards = calculateNationBettingRewards({
|
|
selectCount: 3,
|
|
isExclusive: false,
|
|
winner: [0, 1, 2],
|
|
stakes: [
|
|
{ generalId: 0, userId: null, selection: [-1], amount: 400 },
|
|
{ generalId: 1, userId: 'exact', selection: [0, 1, 2], amount: 100 },
|
|
{ generalId: 2, userId: 'partial-a', selection: [0, 1, 4], amount: 100 },
|
|
{ generalId: 3, userId: 'partial-b', selection: [0, 5, 6], amount: 100 },
|
|
],
|
|
});
|
|
expect(rewards).toEqual([
|
|
{ generalId: 1, userId: 'exact', amount: 437.5, matchPoint: 3 },
|
|
{ generalId: 2, userId: 'partial-a', amount: 175, matchPoint: 2 },
|
|
{ generalId: 3, userId: 'partial-b', amount: 87.5, matchPoint: 1 },
|
|
]);
|
|
});
|
|
});
|