import { of } from 'rxjs'; import { EarningsService } from 'app/modules/earnings/services/earnings.service'; import { createEarningsAggregations, createEarningsAggregationsDTO } from 'app/testUtils/mocks/earnings.mock'; import { MONTHLY } from 'app/shared/services/aggregationPeriods/aggregationPeriods.service'; import { createVesselsEarnings, createVesselsEarningsDTO } from 'app/testUtils/mocks/vesselEarningsData.mock'; import { take } from 'rxjs/operators'; import { FiltersState } from '../../../shared/store/filters/filters.types'; describe('Earnings service tests', () => { const mockApiClient = { getAggregations: jest.fn(), getVesselsEarnings: jest.fn(), }; const UNKNOWN_POOL_ID = 6666666; const sut = new EarningsService(mockApiClient); let filters: FiltersState = { year: null, aggregationPeriodId: MONTHLY, poolId: null, poolPartnerAxCodes: [], groupIds: [], omitGroupIds: [], }; it('executes fetching earnings aggregations data', (done) => { const earningsAggregationsDTOMock = createEarningsAggregationsDTO(); const earningsAggregationsMock = createEarningsAggregations(); const poolId = 1; mockApiClient.getAggregations = jest.fn((filter) => of(earningsAggregationsDTOMock[filter.poolId] || [])); filters = { ...filters, poolId: poolId, }; sut.getAggregations(filters).pipe(take(1)).subscribe((data) => { expect(data).toEqual(earningsAggregationsMock[poolId]); done(); }); }); it('returns empty array for unknown poolId', () => { const earningsAggregationsDTOMock = createEarningsAggregationsDTO(); const expectedEarningsAggregationsMock = []; filters = { ...filters, poolId: UNKNOWN_POOL_ID, }; mockApiClient.getAggregations = jest.fn((poolId) => of(earningsAggregationsDTOMock[poolId] || [])); sut.getAggregations(filters).pipe(take(1)).subscribe((data) => expect(data).toEqual(expectedEarningsAggregationsMock)); }); it('executes fetching vessels earnings', (done) => { const poolId = 1; const partnerAxCodes = 'MT'; const vesselsEarningsDTO = createVesselsEarningsDTO(); const poolVesselsEarnings = createVesselsEarnings(); mockApiClient.getVesselsEarnings = jest.fn(() => of(vesselsEarningsDTO)); filters = { ...filters, poolId: poolId, poolPartnerAxCodes: [ partnerAxCodes ], }; const expectedData = [ poolVesselsEarnings.averagePoolEarnings, poolVesselsEarnings.averageFilteredEarnings, poolVesselsEarnings.vesselsEarnings ]; sut.getVesselsData(filters, 'date').pipe(take(1)).subscribe((data) => { expect(data).toEqual(expectedData); done(); }); }); });