| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- import React from 'react';
- import { shallow } from 'enzyme';
- import sinon from 'sinon';
- import * as dateMath from '@grafana/ui/src/utils/datemath';
- import * as rangeUtil from '@grafana/ui/src/utils/rangeutil';
- import TimePicker from './TimePicker';
- import { RawTimeRange, TimeRange, TIME_FORMAT } from '@grafana/ui';
- import { toUtc, isDateTime, dateTime } from '@grafana/ui/src/utils/moment_wrapper';
- const DEFAULT_RANGE = {
- from: 'now-6h',
- to: 'now',
- };
- const fromRaw = (rawRange: RawTimeRange): TimeRange => {
- const raw = {
- from: isDateTime(rawRange.from) ? dateTime(rawRange.from) : rawRange.from,
- to: isDateTime(rawRange.to) ? dateTime(rawRange.to) : rawRange.to,
- };
- return {
- from: dateMath.parse(raw.from, false),
- to: dateMath.parse(raw.to, true),
- raw: rawRange,
- };
- };
- describe('<TimePicker />', () => {
- it('render default values when closed and relative time range', () => {
- const range = fromRaw(DEFAULT_RANGE);
- const wrapper = shallow(<TimePicker range={range} timeZone="browser" />);
- expect(wrapper.state('fromRaw')).toBe(DEFAULT_RANGE.from);
- expect(wrapper.state('toRaw')).toBe(DEFAULT_RANGE.to);
- expect(wrapper.find('.timepicker-rangestring').text()).toBe('Last 6 hours');
- expect(wrapper.find('.gf-timepicker-dropdown').exists()).toBeFalsy();
- expect(wrapper.find('.gf-timepicker-utc').exists()).toBeFalsy();
- });
- it('render default values when closed, utc and relative time range', () => {
- const range = fromRaw(DEFAULT_RANGE);
- const wrapper = shallow(<TimePicker range={range} timeZone="utc" />);
- expect(wrapper.state('fromRaw')).toBe(DEFAULT_RANGE.from);
- expect(wrapper.state('toRaw')).toBe(DEFAULT_RANGE.to);
- expect(wrapper.find('.timepicker-rangestring').text()).toBe('Last 6 hours');
- expect(wrapper.find('.gf-timepicker-dropdown').exists()).toBeFalsy();
- expect(wrapper.find('.gf-timepicker-utc').exists()).toBeTruthy();
- });
- it('renders default values when open and relative range', () => {
- const range = fromRaw(DEFAULT_RANGE);
- const wrapper = shallow(<TimePicker range={range} isOpen timeZone="browser" />);
- expect(wrapper.state('fromRaw')).toBe(DEFAULT_RANGE.from);
- expect(wrapper.state('toRaw')).toBe(DEFAULT_RANGE.to);
- expect(wrapper.find('.timepicker-rangestring').text()).toBe('Last 6 hours');
- expect(wrapper.find('.gf-timepicker-dropdown').exists()).toBeTruthy();
- expect(wrapper.find('.gf-timepicker-utc').exists()).toBeFalsy();
- expect(wrapper.find('.timepicker-from').props().value).toBe(DEFAULT_RANGE.from);
- expect(wrapper.find('.timepicker-to').props().value).toBe(DEFAULT_RANGE.to);
- });
- it('renders default values when open, utc and relative range', () => {
- const range = fromRaw(DEFAULT_RANGE);
- const wrapper = shallow(<TimePicker range={range} isOpen timeZone="utc" />);
- expect(wrapper.state('fromRaw')).toBe(DEFAULT_RANGE.from);
- expect(wrapper.state('toRaw')).toBe(DEFAULT_RANGE.to);
- expect(wrapper.find('.timepicker-rangestring').text()).toBe('Last 6 hours');
- expect(wrapper.find('.gf-timepicker-dropdown').exists()).toBeTruthy();
- expect(wrapper.find('.gf-timepicker-utc').exists()).toBeTruthy();
- expect(wrapper.find('.timepicker-from').props().value).toBe(DEFAULT_RANGE.from);
- expect(wrapper.find('.timepicker-to').props().value).toBe(DEFAULT_RANGE.to);
- });
- it('apply with absolute range and non-utc', () => {
- const range = {
- from: toUtc(1),
- to: toUtc(1000),
- raw: {
- from: toUtc(1),
- to: toUtc(1000),
- },
- };
- const localRange = {
- from: dateTime(1),
- to: dateTime(1000),
- raw: {
- from: dateTime(1),
- to: dateTime(1000),
- },
- };
- const expectedRangeString = rangeUtil.describeTimeRange(localRange);
- const onChangeTime = sinon.spy();
- const wrapper = shallow(<TimePicker range={range} isOpen onChangeTime={onChangeTime} timeZone="browser" />);
- expect(wrapper.state('fromRaw')).toBe(localRange.from.format(TIME_FORMAT));
- expect(wrapper.state('toRaw')).toBe(localRange.to.format(TIME_FORMAT));
- expect(wrapper.state('initialRange')).toBe(range.raw);
- expect(wrapper.find('.timepicker-rangestring').text()).toBe(expectedRangeString);
- expect(wrapper.find('.timepicker-from').props().value).toBe(localRange.from.format(TIME_FORMAT));
- expect(wrapper.find('.timepicker-to').props().value).toBe(localRange.to.format(TIME_FORMAT));
- wrapper.find('button.gf-form-btn').simulate('click');
- expect(onChangeTime.calledOnce).toBeTruthy();
- expect(onChangeTime.getCall(0).args[0].from.valueOf()).toBe(0);
- expect(onChangeTime.getCall(0).args[0].to.valueOf()).toBe(1000);
- expect(wrapper.state('isOpen')).toBeFalsy();
- expect(wrapper.state('rangeString')).toBe(expectedRangeString);
- });
- it('apply with absolute range and utc', () => {
- const range = {
- from: toUtc(1),
- to: toUtc(1000),
- raw: {
- from: toUtc(1),
- to: toUtc(1000),
- },
- };
- const onChangeTime = sinon.spy();
- const wrapper = shallow(<TimePicker range={range} timeZone="utc" isOpen onChangeTime={onChangeTime} />);
- expect(wrapper.state('fromRaw')).toBe('1970-01-01 00:00:00');
- expect(wrapper.state('toRaw')).toBe('1970-01-01 00:00:01');
- expect(wrapper.state('initialRange')).toBe(range.raw);
- expect(wrapper.find('.timepicker-rangestring').text()).toBe('1970-01-01 00:00:00 to 1970-01-01 00:00:01');
- expect(wrapper.find('.timepicker-from').props().value).toBe('1970-01-01 00:00:00');
- expect(wrapper.find('.timepicker-to').props().value).toBe('1970-01-01 00:00:01');
- wrapper.find('button.gf-form-btn').simulate('click');
- expect(onChangeTime.calledOnce).toBeTruthy();
- expect(onChangeTime.getCall(0).args[0].from.valueOf()).toBe(0);
- expect(onChangeTime.getCall(0).args[0].to.valueOf()).toBe(1000);
- expect(wrapper.state('isOpen')).toBeFalsy();
- expect(wrapper.state('rangeString')).toBe('1970-01-01 00:00:00 to 1970-01-01 00:00:01');
- });
- it('moves ranges backward by half the range on left arrow click when utc', () => {
- const rawRange = {
- from: toUtc(2000),
- to: toUtc(4000),
- raw: {
- from: toUtc(2000),
- to: toUtc(4000),
- },
- };
- const range = fromRaw(rawRange);
- const onChangeTime = sinon.spy();
- const wrapper = shallow(<TimePicker range={range} isOpen onChangeTime={onChangeTime} timeZone="utc" />);
- expect(wrapper.state('fromRaw')).toBe('1970-01-01 00:00:02');
- expect(wrapper.state('toRaw')).toBe('1970-01-01 00:00:04');
- wrapper.find('.timepicker-left').simulate('click');
- expect(onChangeTime.calledOnce).toBeTruthy();
- expect(onChangeTime.getCall(0).args[0].from.valueOf()).toBe(1000);
- expect(onChangeTime.getCall(0).args[0].to.valueOf()).toBe(3000);
- });
- it('moves ranges backward by half the range on left arrow click when not utc', () => {
- const range = {
- from: toUtc(2000),
- to: toUtc(4000),
- raw: {
- from: toUtc(2000),
- to: toUtc(4000),
- },
- };
- const localRange = {
- from: dateTime(2000),
- to: dateTime(4000),
- raw: {
- from: dateTime(2000),
- to: dateTime(4000),
- },
- };
- const onChangeTime = sinon.spy();
- const wrapper = shallow(<TimePicker range={range} isOpen onChangeTime={onChangeTime} timeZone="browser" />);
- expect(wrapper.state('fromRaw')).toBe(localRange.from.format(TIME_FORMAT));
- expect(wrapper.state('toRaw')).toBe(localRange.to.format(TIME_FORMAT));
- wrapper.find('.timepicker-left').simulate('click');
- expect(onChangeTime.calledOnce).toBeTruthy();
- expect(onChangeTime.getCall(0).args[0].from.valueOf()).toBe(1000);
- expect(onChangeTime.getCall(0).args[0].to.valueOf()).toBe(3000);
- });
- it('moves ranges forward by half the range on right arrow click when utc', () => {
- const range = {
- from: toUtc(1000),
- to: toUtc(3000),
- raw: {
- from: toUtc(1000),
- to: toUtc(3000),
- },
- };
- const onChangeTime = sinon.spy();
- const wrapper = shallow(<TimePicker range={range} isOpen onChangeTime={onChangeTime} timeZone="utc" />);
- expect(wrapper.state('fromRaw')).toBe('1970-01-01 00:00:01');
- expect(wrapper.state('toRaw')).toBe('1970-01-01 00:00:03');
- wrapper.find('.timepicker-right').simulate('click');
- expect(onChangeTime.calledOnce).toBeTruthy();
- expect(onChangeTime.getCall(0).args[0].from.valueOf()).toBe(2000);
- expect(onChangeTime.getCall(0).args[0].to.valueOf()).toBe(4000);
- });
- it('moves ranges forward by half the range on right arrow click when not utc', () => {
- const range = {
- from: toUtc(1000),
- to: toUtc(3000),
- raw: {
- from: toUtc(1000),
- to: toUtc(3000),
- },
- };
- const localRange = {
- from: dateTime(1000),
- to: dateTime(3000),
- raw: {
- from: dateTime(1000),
- to: dateTime(3000),
- },
- };
- const onChangeTime = sinon.spy();
- const wrapper = shallow(<TimePicker range={range} isOpen onChangeTime={onChangeTime} timeZone="browser" />);
- expect(wrapper.state('fromRaw')).toBe(localRange.from.format(TIME_FORMAT));
- expect(wrapper.state('toRaw')).toBe(localRange.to.format(TIME_FORMAT));
- wrapper.find('.timepicker-right').simulate('click');
- expect(onChangeTime.calledOnce).toBeTruthy();
- expect(onChangeTime.getCall(0).args[0].from.valueOf()).toBe(2000);
- expect(onChangeTime.getCall(0).args[0].to.valueOf()).toBe(4000);
- });
- });
|