token-wizard/test/components/stepThree/CrowdsaleBlock.spec.js

193 lines
5.8 KiB
JavaScript

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(
<Provider tierStore={tierStore}>
<CrowdsaleBlock num={0} />
</Provider>
)
})
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(
<Provider tierStore={tierStore}>
<CrowdsaleBlock num={1} />
</Provider>
)
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(
<Provider tierStore={tierStore}>
<CrowdsaleBlock num={1} />
</Provider>
)
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(
<Provider tierStore={tierStore}>
<CrowdsaleBlock num={1} />
</Provider>
)
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(
<Provider tierStore={tierStore}>
<CrowdsaleBlock num={1} />
</Provider>
)
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
)
})
})