mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.7 KiB
69 lines
1.7 KiB
import { Test, TestingModule } from '@nestjs/testing';
|
|
import Big from 'big.js';
|
|
|
|
import { FireCalculatorService } from './fire-calculator.service';
|
|
|
|
describe('FireCalculatorService', () => {
|
|
let fireCalculatorService: FireCalculatorService;
|
|
|
|
beforeEach(async () => {
|
|
const module: TestingModule = await Test.createTestingModule({
|
|
providers: [FireCalculatorService]
|
|
}).compile();
|
|
|
|
fireCalculatorService = module.get<FireCalculatorService>(
|
|
FireCalculatorService
|
|
);
|
|
});
|
|
|
|
describe('Test periods to retire', () => {
|
|
it('should return the correct amount of periods to retire with no interst rate', async () => {
|
|
const r = 0;
|
|
const P = 1000;
|
|
const totalAmount = 1900;
|
|
const PMT = 100;
|
|
|
|
const periodsToRetire = fireCalculatorService.calculatePeriodsToRetire({
|
|
P,
|
|
r,
|
|
PMT,
|
|
totalAmount
|
|
});
|
|
|
|
expect(periodsToRetire).toBe(9);
|
|
});
|
|
|
|
it('should return the 0 when total amount is 0', async () => {
|
|
const r = 0.05;
|
|
const P = 100000;
|
|
const totalAmount = 0;
|
|
const PMT = 10000;
|
|
|
|
const periodsToRetire = fireCalculatorService.calculatePeriodsToRetire({
|
|
P,
|
|
r,
|
|
PMT,
|
|
totalAmount
|
|
});
|
|
|
|
expect(periodsToRetire).toBe(0);
|
|
});
|
|
|
|
it('should return the correct amount of periods to retire with interst rate', async () => {
|
|
const r = 0.05;
|
|
const P = 598478.96;
|
|
const totalAmount = 812399.66;
|
|
const PMT = 6000;
|
|
const expectedPeriods = 24;
|
|
|
|
const periodsToRetire = fireCalculatorService.calculatePeriodsToRetire({
|
|
P,
|
|
r,
|
|
PMT,
|
|
totalAmount
|
|
});
|
|
|
|
expect(Math.round(periodsToRetire)).toBe(expectedPeriods);
|
|
});
|
|
});
|
|
});
|
|
|