import React from 'react' import TierStore from '../../../src/stores/TierStore' import { CrowdsaleBlock } from '../../../src/components/stepThree/CrowdsaleBlock' import MockDate from 'mockdate' import moment from 'moment' import { VALIDATION_TYPES } from '../../../src/utils/constants' import { Provider } from 'mobx-react' import Adapter from 'enzyme-adapter-react-15' import toJson from 'enzyme-to-json' import { configure, mount } from 'enzyme' import { defaultTier, defaultTierValidations } from '../../../src/utils/constants' configure({ adapter: new Adapter() }) const currentTime = '2018-03-05T11:00:00' const { INVALID } = VALIDATION_TYPES MockDate.set(currentTime) describe('CrowdsaleBlock', () => { const INPUT_EVENT = { CHANGE: 'change', CLICK: 'click' } const addCrowdsale = num => { const newTier = Object.assign({}, defaultTier) const newTierValidations = Object.assign({}, defaultTierValidations) newTier.tier = `Tier ${num + 1}` if (0 === num) { newTier.whitelistEnabled = 'no' newTier.walletAddress = '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1' } tierStore.addTier(newTier, newTierValidations) } let changeMock let tierStore let initialTierWrapper beforeEach(() => { tierStore = new TierStore() addCrowdsale(0) changeMock = { target: { value: '' } } initialTierWrapper = mount( ) }) it('Should render the component for the first Tier', () => { expect(toJson(initialTierWrapper)).toMatchSnapshot() }) it('Should render the component for the second Tier', () => { addCrowdsale(1) const wrapper = mount( ) expect(toJson(wrapper)).toMatchSnapshot() }) it('Should render the component for the second Tier with whitelist enabled', () => { addCrowdsale(1) tierStore.setTierProperty('yes', 'whitelistEnabled', 0) const wrapper = mount( ) expect(toJson(wrapper)).toMatchSnapshot() }) it('Should set current time + 5 minutes in startTime (first tier)', () => { const expectedStartTime = moment(currentTime).add(5, 'minutes') const startTimeValue = initialTierWrapper .find('input[type="datetime-local"]') .at(0) .props().value expect(expectedStartTime.isSame(startTimeValue)).toBeTruthy() }) it('Should set endTime at the beginning of 4 days in the future of startTime (first tier)', () => { const expectedEndTime = moment(currentTime) .add(4, 'days') .startOf('day') const endTimeValue = initialTierWrapper .find('input[type="datetime-local"]') .at(1) .props().value expect(expectedEndTime.isSame(endTimeValue)).toBeTruthy() }) it('Should set startTime at the same time as the end time of the previous tier (second tier)', () => { addCrowdsale(1) const secondTierWrapper = mount( ) const firstTierEndTimeValue = initialTierWrapper .find('input[type="datetime-local"]') .at(1) .props().value const secondTierStartTimeValue = secondTierWrapper .find('input[type="datetime-local"]') .at(0) .props().value expect(firstTierEndTimeValue).toBe(secondTierStartTimeValue) }) it('Should give error if startTime of the second tier is previous to the endTime of the first tier', () => { addCrowdsale(1) const secondTierWrapper = mount( ) const firstTierEndTimeValue = initialTierWrapper .find('input[type="datetime-local"]') .at(1) .props().value const secondTierStartTime = secondTierWrapper.find('input[type="datetime-local"]').at(0) changeMock.target.value = moment(firstTierEndTimeValue) .subtract(1, 'days') .toJSON() secondTierStartTime.simulate(INPUT_EVENT.CHANGE, changeMock) const secondTierStartTimeProps = secondTierWrapper.find('InputField[title="Start Time"]').props() expect( moment(firstTierEndTimeValue) .subtract(1, 'days') .isSame(secondTierStartTimeProps.value) ).toBeTruthy() expect(secondTierStartTimeProps.valid).toBe(INVALID) }) it('Should properly apply Rate update', () => { const rate = initialTierWrapper.find('input[type="text"]').at(1) changeMock.target.value = '1234' rate.simulate(INPUT_EVENT.CHANGE, changeMock) expect(initialTierWrapper.find('BigNumberInput').props().value).toBe(changeMock.target.value) }) it('Should properly update supply value', () => { const supply = initialTierWrapper.find('input[type="number"]').at(0) changeMock.target.value = '1234' supply.simulate(INPUT_EVENT.CHANGE, changeMock) expect(initialTierWrapper.find('InputField[title="Supply"]').props().value).toBe(changeMock.target.value) }) it('Should properly change End Time', () => { const endTime = initialTierWrapper.find('input[type="datetime-local"]').at(1) const modifiedDate = moment(endTime).subtract(1, 'days') changeMock.target.value = modifiedDate.toJSON() endTime.simulate(INPUT_EVENT.CHANGE, changeMock) expect(modifiedDate.isSame(initialTierWrapper.find('InputField[title="End Time"]').props().value)).toBeTruthy() }) it('Should properly change Tier name', () => { const tierName = initialTierWrapper.find('input[type="text"]').at(0) changeMock.target.value = 'The first Tier' tierName.simulate(INPUT_EVENT.CHANGE, changeMock) expect(initialTierWrapper.find('InputField[title="Crowdsale setup name"]').props().value).toBe( changeMock.target.value ) }) })