// Copyright (C) 2020 Storj Labs, Inc. // See LICENSE for copying information. import Vuex from 'vuex'; import EstimationArea from '@/app/components/payments/EstimationArea.vue'; import { APPSTATE_MUTATIONS, appStateModule } from '@/app/store/modules/appState'; import { newNodeModule, NODE_MUTATIONS } from '@/app/store/modules/node'; import { newPayoutModule, PAYOUT_MUTATIONS } from '@/app/store/modules/payout'; import { PayoutInfoRange } from '@/app/types/payout'; import { PayoutHttpApi } from '@/storagenode/api/payout'; import { StorageNodeApi } from '@/storagenode/api/storagenode'; import { EstimatedPayout, PayoutPeriod, Paystub, PreviousMonthEstimatedPayout, TotalPaystubForPeriod, } from '@/storagenode/payouts/payouts'; import { PayoutService } from '@/storagenode/payouts/service'; import { StorageNodeService } from '@/storagenode/sno/service'; import { Satellites } from '@/storagenode/sno/sno'; import { createLocalVue, shallowMount } from '@vue/test-utils'; const localVue = createLocalVue(); localVue.use(Vuex); localVue.filter('centsToDollars', (cents: number): string => { return `$${(cents / 100).toFixed(2)}`; }); const nodeApi = new StorageNodeApi(); const nodeService = new StorageNodeService(nodeApi); const nodeModule = newNodeModule(nodeService); const payoutApi = new PayoutHttpApi(); const payoutService = new PayoutService(payoutApi); const payoutModule = newPayoutModule(payoutService); const store = new Vuex.Store({ modules: { payoutModule, appStateModule, node: nodeModule }}); describe('EstimationArea', (): void => { it('renders correctly with actual values and current period', async (): Promise => { const _Date = Date; const mockedDate1 = new Date(1580522290000); // Sat Feb 01 2020 const mockedDate2 = new Date(1577982290000); // Thu Jan 02 2020 const allSatellitesInfo = new Satellites(); allSatellitesInfo.joinDate = mockedDate2; global.Date = jest.fn(() => mockedDate1); const estimatedPayout = new EstimatedPayout( new PreviousMonthEstimatedPayout( 100000000, 200000000, 300000000, 400000000, 500000000, 600000000, 700000000, 800000000, 900000000, ), ); await store.commit(PAYOUT_MUTATIONS.SET_ESTIMATION, estimatedPayout); await store.commit(NODE_MUTATIONS.SELECT_ALL_SATELLITES, allSatellitesInfo); await store.commit(PAYOUT_MUTATIONS.SET_RANGE, new PayoutInfoRange(null, new PayoutPeriod(2020, 1))); const wrapper = shallowMount(EstimationArea, { store, localVue, }); expect(wrapper).toMatchSnapshot(); global.Date = _Date; wrapper.destroy(); }); it('renders correctly with actual values and current period and not fist day on month', async (): Promise => { const _Date = Date; const mockedDate1 = new Date(1580722290000); // Sat Feb 03 2020 const mockedDate2 = new Date(1577982290000); // Thu Jan 02 2020 const allSatellitesInfo = new Satellites(); allSatellitesInfo.joinDate = mockedDate2; global.Date = jest.fn(() => mockedDate1); const estimatedPayout = new EstimatedPayout( new PreviousMonthEstimatedPayout( 10000000, 20000000, 30000000, 40000000, 50000000, 60000000, 70000000, 80000000, 90000000, ), ); await store.commit(PAYOUT_MUTATIONS.SET_ESTIMATION, estimatedPayout); await store.commit(NODE_MUTATIONS.SELECT_ALL_SATELLITES, allSatellitesInfo); await store.commit(PAYOUT_MUTATIONS.SET_RANGE, new PayoutInfoRange(null, new PayoutPeriod(2020, 1))); const wrapper = shallowMount(EstimationArea, { store, localVue, }); expect(wrapper).toMatchSnapshot(); global.Date = _Date; wrapper.destroy(); }); it('renders correctly with actual values and previous period without paystub', async (): Promise => { const _Date = Date; const mockedDate1 = new Date(1580522290000); // Sat Feb 01 2020 const mockedDate2 = new Date(1577982290000); // Thu Jan 02 2020 const allSatellitesInfo = new Satellites(); allSatellitesInfo.joinDate = mockedDate2; global.Date = jest.fn(() => mockedDate1); const estimatedPayout = new EstimatedPayout( new PreviousMonthEstimatedPayout(), new PreviousMonthEstimatedPayout( 100000000, 200000000, 300000000, 400000000, 500000000, 600000000, 700000000, 800000000, 900000000, ), ); await store.commit(PAYOUT_MUTATIONS.SET_ESTIMATION, estimatedPayout); await store.commit(NODE_MUTATIONS.SELECT_ALL_SATELLITES, allSatellitesInfo); await store.commit(PAYOUT_MUTATIONS.SET_RANGE, new PayoutInfoRange(null, new PayoutPeriod(2020, 0))); const wrapper = shallowMount(EstimationArea, { store, localVue, }); expect(wrapper).toMatchSnapshot(); global.Date = _Date; wrapper.destroy(); }); it('renders correctly with actual values and historical period with paystub', async (): Promise => { const _Date = Date; const mockedDate1 = new Date(1580522290000); // Sat Feb 01 2020 const mockedDate2 = new Date(1577982290000); // Thu Jan 02 2020 const payoutPeriod = new PayoutPeriod(2020, 0); const allSatellitesInfo = new Satellites(); allSatellitesInfo.joinDate = mockedDate2; global.Date = jest.fn(() => mockedDate1); const paystub = new Paystub(); paystub.held = 777777; paystub.paid = 555555; paystub.surgePercent = 300; const totalPaystubForPeriod = new TotalPaystubForPeriod([paystub]); await store.commit(PAYOUT_MUTATIONS.SET_PERIODS, [payoutPeriod]); await store.commit(PAYOUT_MUTATIONS.SET_PAYOUT_INFO, totalPaystubForPeriod); await store.commit(NODE_MUTATIONS.SELECT_ALL_SATELLITES, allSatellitesInfo); await store.commit(PAYOUT_MUTATIONS.SET_RANGE, new PayoutInfoRange(null, payoutPeriod)); const wrapper = shallowMount(EstimationArea, { store, localVue, }); expect(wrapper).toMatchSnapshot(); wrapper.destroy(); global.Date = _Date; }); it('renders correctly with actual values and historical period without paystub', async (): Promise => { const _Date = Date; const mockedDate1 = new Date(1580522290000); // Sat Feb 01 2020 const mockedDate2 = new Date(1577982290000); // Thu Jan 02 2020 const payoutPeriod = new PayoutPeriod(2020, 0); const allSatellitesInfo = new Satellites(); allSatellitesInfo.joinDate = mockedDate2; global.Date = jest.fn(() => mockedDate1); await store.commit(PAYOUT_MUTATIONS.SET_PERIODS, [payoutPeriod]); await store.commit(NODE_MUTATIONS.SELECT_ALL_SATELLITES, allSatellitesInfo); await store.commit(PAYOUT_MUTATIONS.SET_RANGE, new PayoutInfoRange(null, payoutPeriod)); await store.commit(APPSTATE_MUTATIONS.SET_NO_PAYOUT_INFO, true); const wrapper = shallowMount(EstimationArea, { store, localVue, }); expect(wrapper).toMatchSnapshot(); wrapper.destroy(); global.Date = _Date; }); });