core tests
This commit is contained in:
@@ -1,8 +1,200 @@
|
||||
import * as mod from '@core/payments/domain/entities/MembershipFee';
|
||||
import {
|
||||
MembershipFee,
|
||||
MembershipFeeType,
|
||||
} from '@core/payments/domain/entities/MembershipFee';
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
describe('payments/domain/entities/MembershipFee.ts', () => {
|
||||
it('imports', () => {
|
||||
expect(mod).toBeTruthy();
|
||||
describe('payments/domain/entities/MembershipFee', () => {
|
||||
describe('MembershipFeeType enum', () => {
|
||||
it('should have correct fee type values', () => {
|
||||
expect(MembershipFeeType.SEASON).toBe('season');
|
||||
expect(MembershipFeeType.MONTHLY).toBe('monthly');
|
||||
expect(MembershipFeeType.PER_RACE).toBe('per_race');
|
||||
});
|
||||
});
|
||||
|
||||
describe('MembershipFee interface', () => {
|
||||
it('should have all required properties', () => {
|
||||
const fee: MembershipFee = {
|
||||
id: 'fee-123',
|
||||
leagueId: 'league-456',
|
||||
type: MembershipFeeType.SEASON,
|
||||
amount: 100,
|
||||
enabled: true,
|
||||
createdAt: new Date('2024-01-01'),
|
||||
updatedAt: new Date('2024-01-01'),
|
||||
};
|
||||
|
||||
expect(fee.id).toBe('fee-123');
|
||||
expect(fee.leagueId).toBe('league-456');
|
||||
expect(fee.type).toBe(MembershipFeeType.SEASON);
|
||||
expect(fee.amount).toBe(100);
|
||||
expect(fee.enabled).toBe(true);
|
||||
expect(fee.createdAt).toEqual(new Date('2024-01-01'));
|
||||
expect(fee.updatedAt).toEqual(new Date('2024-01-01'));
|
||||
});
|
||||
|
||||
it('should support optional seasonId property', () => {
|
||||
const fee: MembershipFee = {
|
||||
id: 'fee-123',
|
||||
leagueId: 'league-456',
|
||||
seasonId: 'season-789',
|
||||
type: MembershipFeeType.SEASON,
|
||||
amount: 100,
|
||||
enabled: true,
|
||||
createdAt: new Date('2024-01-01'),
|
||||
updatedAt: new Date('2024-01-01'),
|
||||
};
|
||||
|
||||
expect(fee.seasonId).toBe('season-789');
|
||||
});
|
||||
});
|
||||
|
||||
describe('MembershipFee.rehydrate', () => {
|
||||
it('should rehydrate a MembershipFee from props', () => {
|
||||
const props: MembershipFee = {
|
||||
id: 'fee-123',
|
||||
leagueId: 'league-456',
|
||||
type: MembershipFeeType.SEASON,
|
||||
amount: 100,
|
||||
enabled: true,
|
||||
createdAt: new Date('2024-01-01'),
|
||||
updatedAt: new Date('2024-01-01'),
|
||||
};
|
||||
|
||||
const rehydrated = MembershipFee.rehydrate(props);
|
||||
|
||||
expect(rehydrated).toEqual(props);
|
||||
expect(rehydrated.id).toBe('fee-123');
|
||||
expect(rehydrated.leagueId).toBe('league-456');
|
||||
expect(rehydrated.type).toBe(MembershipFeeType.SEASON);
|
||||
expect(rehydrated.amount).toBe(100);
|
||||
expect(rehydrated.enabled).toBe(true);
|
||||
expect(rehydrated.createdAt).toEqual(new Date('2024-01-01'));
|
||||
expect(rehydrated.updatedAt).toEqual(new Date('2024-01-01'));
|
||||
});
|
||||
|
||||
it('should preserve optional seasonId when rehydrating', () => {
|
||||
const props: MembershipFee = {
|
||||
id: 'fee-123',
|
||||
leagueId: 'league-456',
|
||||
seasonId: 'season-789',
|
||||
type: MembershipFeeType.SEASON,
|
||||
amount: 100,
|
||||
enabled: true,
|
||||
createdAt: new Date('2024-01-01'),
|
||||
updatedAt: new Date('2024-01-01'),
|
||||
};
|
||||
|
||||
const rehydrated = MembershipFee.rehydrate(props);
|
||||
|
||||
expect(rehydrated.seasonId).toBe('season-789');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Business rules and invariants', () => {
|
||||
it('should support different fee types', () => {
|
||||
const seasonFee: MembershipFee = {
|
||||
id: 'fee-123',
|
||||
leagueId: 'league-456',
|
||||
type: MembershipFeeType.SEASON,
|
||||
amount: 100,
|
||||
enabled: true,
|
||||
createdAt: new Date('2024-01-01'),
|
||||
updatedAt: new Date('2024-01-01'),
|
||||
};
|
||||
|
||||
const monthlyFee: MembershipFee = {
|
||||
id: 'fee-124',
|
||||
leagueId: 'league-456',
|
||||
type: MembershipFeeType.MONTHLY,
|
||||
amount: 50,
|
||||
enabled: true,
|
||||
createdAt: new Date('2024-01-01'),
|
||||
updatedAt: new Date('2024-01-01'),
|
||||
};
|
||||
|
||||
const perRaceFee: MembershipFee = {
|
||||
id: 'fee-125',
|
||||
leagueId: 'league-456',
|
||||
type: MembershipFeeType.PER_RACE,
|
||||
amount: 10,
|
||||
enabled: true,
|
||||
createdAt: new Date('2024-01-01'),
|
||||
updatedAt: new Date('2024-01-01'),
|
||||
};
|
||||
|
||||
expect(seasonFee.type).toBe(MembershipFeeType.SEASON);
|
||||
expect(monthlyFee.type).toBe(MembershipFeeType.MONTHLY);
|
||||
expect(perRaceFee.type).toBe(MembershipFeeType.PER_RACE);
|
||||
});
|
||||
|
||||
it('should handle enabled/disabled state', () => {
|
||||
const enabledFee: MembershipFee = {
|
||||
id: 'fee-123',
|
||||
leagueId: 'league-456',
|
||||
type: MembershipFeeType.SEASON,
|
||||
amount: 100,
|
||||
enabled: true,
|
||||
createdAt: new Date('2024-01-01'),
|
||||
updatedAt: new Date('2024-01-01'),
|
||||
};
|
||||
|
||||
const disabledFee: MembershipFee = {
|
||||
id: 'fee-124',
|
||||
leagueId: 'league-456',
|
||||
type: MembershipFeeType.SEASON,
|
||||
amount: 0,
|
||||
enabled: false,
|
||||
createdAt: new Date('2024-01-01'),
|
||||
updatedAt: new Date('2024-01-01'),
|
||||
};
|
||||
|
||||
expect(enabledFee.enabled).toBe(true);
|
||||
expect(disabledFee.enabled).toBe(false);
|
||||
});
|
||||
|
||||
it('should handle zero and negative amounts', () => {
|
||||
const zeroFee: MembershipFee = {
|
||||
id: 'fee-123',
|
||||
leagueId: 'league-456',
|
||||
type: MembershipFeeType.SEASON,
|
||||
amount: 0,
|
||||
enabled: false,
|
||||
createdAt: new Date('2024-01-01'),
|
||||
updatedAt: new Date('2024-01-01'),
|
||||
};
|
||||
|
||||
expect(zeroFee.amount).toBe(0);
|
||||
expect(zeroFee.enabled).toBe(false);
|
||||
});
|
||||
|
||||
it('should handle different league and season combinations', () => {
|
||||
const leagueOnlyFee: MembershipFee = {
|
||||
id: 'fee-123',
|
||||
leagueId: 'league-456',
|
||||
type: MembershipFeeType.MONTHLY,
|
||||
amount: 50,
|
||||
enabled: true,
|
||||
createdAt: new Date('2024-01-01'),
|
||||
updatedAt: new Date('2024-01-01'),
|
||||
};
|
||||
|
||||
const leagueAndSeasonFee: MembershipFee = {
|
||||
id: 'fee-124',
|
||||
leagueId: 'league-456',
|
||||
seasonId: 'season-789',
|
||||
type: MembershipFeeType.SEASON,
|
||||
amount: 100,
|
||||
enabled: true,
|
||||
createdAt: new Date('2024-01-01'),
|
||||
updatedAt: new Date('2024-01-01'),
|
||||
};
|
||||
|
||||
expect(leagueOnlyFee.leagueId).toBe('league-456');
|
||||
expect(leagueOnlyFee.seasonId).toBeUndefined();
|
||||
expect(leagueAndSeasonFee.leagueId).toBe('league-456');
|
||||
expect(leagueAndSeasonFee.seasonId).toBe('season-789');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user