gantt-source_management
Version:
Gantt, Schedule,
438 lines (422 loc) • 21.2 kB
text/typescript
import { DataChartTime, DataScrollHorizontal, ItemData } from '../../dist/gstc';
import { fixed } from '../helpers';
describe('Move items outside view', () => {
it('should calculate right scroll and item position', () => {
let state, gstc;
cy.load('/examples/complex-1')
.window()
.then((win) => {
// @ts-ignore
state = win.state;
// @ts-ignore
gstc = win.gstc;
})
.scrollH(1000)
.get('#expand-time')
.click()
.wait(Cypress.env('wait'))
.then(() => {
state.update('config.scroll.horizontal.multiplier', 3);
state.update('config.chart.items.gstcid-2.time', (itemTime) => {
itemTime.start = gstc.api.time.date('2020-03-25').valueOf();
itemTime.end = gstc.api.time.date('2020-03-30').endOf('day').valueOf();
return itemTime;
});
})
.get('.gstc__list-column-row-expander-toggle[data-gstcid="gstcid-1"]')
.click()
.get('.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-2"]')
.should('be.visible')
.then(() => {
const time: DataChartTime = state.get('$data.chart.time');
expect(time.toDate.format('YYYY-MM-DD')).to.eq('2020-03-31');
})
.move('.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-2"]', 160, 0)
.move('.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-2"]', 100, 0)
.then(() => {
const horizontalScroll: DataScrollHorizontal = state.get('$data.scroll.horizontal');
const time: DataChartTime = state.get('$data.chart.time');
expect(time.toDate.format('YYYY-MM-DD')).to.eq('2020-04-02');
expect(horizontalScroll.data.leftGlobalDate.format('YYYY-MM-DD')).to.eq('2020-03-18');
const itemsData = state.get('$data.chart.items');
expect(itemsData['gstcid-2'].time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-04-02 23:59:59');
});
});
it('should calculate right item position in normal mode', () => {
const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
let state, gstc, secondaryItem, secondaryItemData;
cy.load('/examples/complex-1')
.window()
.then((win) => {
// @ts-ignore
state = win.state;
// @ts-ignore
gstc = win.gstc;
})
.then(() => {
gstc.api.scrollToTime(gstc.api.time.date('2020-02-14'), false);
})
.wait(Cypress.env('wait'))
.then(() => {
state.update('config.scroll.horizontal.multiplier', 3);
state.update('config.chart.items.gstcid-15', (item) => {
item.time.start = gstc.api.time.date('2020-02-20').valueOf();
item.time.end = gstc.api.time.date('2020-02-24').endOf('day').valueOf();
return item;
});
})
.wait(Cypress.env('wait'))
.then(() => {
const itemData = state.get('$data.chart.items.gstcid-15');
expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-20 00:00:00');
expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-24 23:59:59');
expect(fixed(itemData.width)).to.eq(fixed(itemData.actualWidth));
expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
expect(fixed(itemData.position.right)).to.eq(fixed(itemData.position.actualRight));
secondaryItemData = gstc.api.mergeDeep({}, itemData);
secondaryItem = gstc.api.mergeDeep({}, state.get('config.chart.items.gstcid-15'));
})
.get(itemClass)
.should('be.visible')
.move(itemClass, 250, 0)
.get(itemClass)
.should('be.visible')
.then(() => {
const itemData = state.get('$data.chart.items.gstcid-15');
expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-23 00:00:00');
expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-27 23:59:59');
expect(fixed(itemData.position.left)).to.be.greaterThan(fixed(secondaryItemData.position.left));
expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(secondaryItemData.position.right));
expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(itemData.position.actualRight));
expect(fixed(itemData.width)).to.eq(fixed(secondaryItemData.width));
expect(fixed(itemData.actualWidth)).to.be.lessThan(fixed(itemData.width));
const item = state.get('config.chart.items.gstcid-15');
expect(item.time.start).to.be.greaterThan(secondaryItem.time.start);
expect(item.time.end).to.be.greaterThan(secondaryItem.time.end);
});
});
// it('should calculate right item position in normal mode with hidden dates', () => {
// const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
// let state, gstc, secondaryItem, secondaryItemData;
// cy.load('/examples/complex-1')
// .window()
// .then((win) => {
// // @ts-ignore
// state = win.state;
// // @ts-ignore
// gstc = win.gstc;
// })
// .then(() => {
// gstc.api.scrollToTime(gstc.api.time.date('2020-02-14'), false);
// })
// .wait(Cypress.env('wait'))
// .get('#hide-weekends')
// .click()
// .wait(Cypress.env('wait'))
// .then(() => {
// state.update('config.chart.items.gstcid-15', (item) => {
// item.time.start = gstc.api.time.date('2020-02-20').valueOf();
// item.time.end = gstc.api.time.date('2020-02-26').endOf('day').valueOf();
// return item;
// });
// })
// .wait(Cypress.env('wait'))
// .then(() => {
// const itemData = state.get('$data.chart.items.gstcid-15');
// expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-20 00:00:00');
// expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-26 23:59:59');
// expect(fixed(itemData.width)).to.eq(fixed(itemData.actualWidth));
// expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
// expect(fixed(itemData.position.right)).to.eq(fixed(itemData.position.actualRight));
// secondaryItemData = gstc.api.mergeDeep({}, itemData);
// secondaryItem = gstc.api.mergeDeep({}, state.get('config.chart.items.gstcid-15'));
// })
// .get(itemClass)
// .should('be.visible')
// .move(itemClass, 400, 0)
// .get(itemClass)
// .should('be.visible')
// .then(() => {
// const itemData = state.get('$data.chart.items.gstcid-15');
// expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-27 00:00:00');
// expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-03-04 23:59:59');
// expect(fixed(itemData.position.left)).to.be.greaterThan(fixed(secondaryItemData.position.left));
// expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(secondaryItemData.position.right));
// expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
// expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(itemData.position.actualRight));
// expect(fixed(itemData.width)).to.eq(fixed(secondaryItemData.width));
// expect(fixed(itemData.actualWidth)).to.be.lessThan(fixed(itemData.width));
// const item = state.get('config.chart.items.gstcid-15');
// expect(item.time.start).to.be.greaterThan(secondaryItem.time.start);
// expect(item.time.end).to.be.greaterThan(secondaryItem.time.end);
// });
// });
it('should calculate right item position in normal mode with hidden dates when moving out of time (left)', () => {
const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
let state, gstc, secondaryItem, secondaryItemData;
cy.load('/examples/complex-1')
.window()
.then((win) => {
// @ts-ignore
state = win.state;
// @ts-ignore
gstc = win.gstc;
})
.get('#hide-weekends')
.click()
.get('#expand-time')
.click()
.wait(Cypress.env('wait'))
.then(() => {
state.update('config.scroll.horizontal.multiplier', 3);
state.update('config.plugin.ItemMovement.autoScroll.edgeThreshold.horizontal', 0);
state.update('config.chart.items.gstcid-15', (item) => {
item.time.start = gstc.api.time.date('2020-02-04').valueOf();
item.time.end = gstc.api.time.date('2020-02-10').endOf('day').valueOf();
return item;
});
})
.wait(Cypress.env('wait'))
.then(() => {
const itemData = state.get('$data.chart.items.gstcid-15');
expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-04 00:00:00');
expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-10 23:59:59');
expect(fixed(itemData.width)).to.eq(fixed(itemData.actualWidth));
expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
expect(fixed(itemData.position.right)).to.eq(fixed(itemData.position.actualRight));
secondaryItemData = gstc.api.mergeDeep({}, itemData);
secondaryItem = gstc.api.mergeDeep({}, state.get('config.chart.items.gstcid-15'));
})
.get(itemClass)
.should('be.visible')
.move(itemClass, -100, 0)
.move(itemClass, -83, 0)
.move(itemClass, -83, 0)
.move(itemClass, -83, 0)
.get(itemClass)
.should('be.visible')
.then(() => {
const itemData = state.get('$data.chart.items.gstcid-15');
expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-29 00:00:00');
expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-04 23:59:59');
expect(fixed(itemData.position.left)).to.be.lessThan(fixed(secondaryItemData.position.left));
expect(fixed(itemData.position.right)).to.be.lessThan(fixed(secondaryItemData.position.right));
expect(fixed(itemData.position.left)).not.to.eq(fixed(itemData.position.actualLeft));
expect(fixed(itemData.position.right)).to.be.eq(fixed(itemData.position.actualRight));
expect(fixed(itemData.width)).to.eq(fixed(secondaryItemData.width));
expect(fixed(itemData.actualWidth)).to.be.lessThan(fixed(itemData.width));
const item = state.get('config.chart.items.gstcid-15');
expect(item.time.start).to.be.below(secondaryItem.time.start);
expect(item.time.end).to.be.below(secondaryItem.time.end);
});
});
it('should calculate right item position in normal mode with hidden dates when moving out of time (right)', () => {
const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
let state, gstc, secondaryItem, secondaryItemData;
cy.load('/examples/complex-1')
.window()
.then((win) => {
// @ts-ignore
state = win.state;
// @ts-ignore
gstc = win.gstc;
})
.then(() => {
gstc.api.scrollToTime(gstc.api.time.date('2020-03-13'), false);
})
.wait(Cypress.env('wait'))
.get('#expand-time')
.click()
.get('#hide-weekends')
.click()
.wait(Cypress.env('wait'))
.then(() => {
state.update('config.scroll.horizontal.multiplier', 3);
state.update('config.chart.items.gstcid-15', (item) => {
item.time.start = gstc.api.time.date('2020-03-20').valueOf();
item.time.end = gstc.api.time.date('2020-03-26').endOf('day').valueOf();
return item;
});
})
.wait(Cypress.env('wait'))
.then(() => {
const itemData = state.get('$data.chart.items.gstcid-15');
expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-03-20 00:00:00');
expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-03-26 23:59:59');
expect(fixed(itemData.width)).to.eq(fixed(itemData.actualWidth));
expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
expect(fixed(itemData.position.right)).to.eq(fixed(itemData.position.actualRight));
secondaryItemData = gstc.api.mergeDeep({}, itemData);
secondaryItem = gstc.api.mergeDeep({}, state.get('config.chart.items.gstcid-15'));
})
.get(itemClass)
.should('be.visible')
.move(itemClass, 400, 0)
.move(itemClass, 50, 0)
.move(itemClass, 50, 0)
.move(itemClass, 80, 0)
.scrollH(100)
.get(itemClass)
.should('be.visible')
.then(() => {
const itemData = state.get('$data.chart.items.gstcid-15');
expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-03-31 00:00:00');
expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-04-06 23:59:59');
expect(fixed(itemData.position.left)).to.be.greaterThan(fixed(secondaryItemData.position.left));
expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(secondaryItemData.position.right));
expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
expect(fixed(itemData.position.right)).to.be.eq(fixed(itemData.position.actualRight));
//expect(fixed(itemData.width)).to.eq(fixed(secondaryItemData.width)); // TODO: DST is changing the width
const item = state.get('config.chart.items.gstcid-15');
expect(item.time.start).to.be.greaterThan(secondaryItem.time.start);
expect(item.time.end).to.be.greaterThan(secondaryItem.time.end);
});
});
it('should calculate right item position in calculatedZoomMode', () => {
const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
let state, gstc, secondaryItem, secondaryItemData;
cy.load('/examples/one-month')
.window()
.then((win) => {
// @ts-ignore
state = win.state;
// @ts-ignore
gstc = win.gstc;
})
.then(() => {
state.update('config.scroll.horizontal.multiplier', 3);
state.update('config.chart.items.gstcid-15', (item) => {
item.time.start = gstc.api.time.date('2020-01-20').valueOf();
item.time.end = gstc.api.time.date('2020-01-24').endOf('day').valueOf();
return item;
});
})
.wait(Cypress.env('wait'))
.then(() => {
const itemData = state.get('$data.chart.items.gstcid-15');
expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-20 00:00:00');
expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-24 23:59:59');
expect(fixed(itemData.width)).to.eq(fixed(itemData.actualWidth));
expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
expect(fixed(itemData.position.right)).to.eq(fixed(itemData.position.actualRight));
secondaryItemData = gstc.api.mergeDeep({}, itemData);
secondaryItem = gstc.api.mergeDeep({}, state.get('config.chart.items.gstcid-15'));
})
.get(itemClass)
.should('be.visible')
.move(itemClass, 300, 0)
.wait(Cypress.env('wait'))
.then(() => {
const itemData = state.get('$data.chart.items.gstcid-15');
expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-29 00:00:00');
expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-02 23:59:59');
expect(fixed(itemData.position.left)).to.be.greaterThan(fixed(secondaryItemData.position.left));
expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(secondaryItemData.position.right));
expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(itemData.position.actualRight)); // probably cypress bug because in the console everything is fine
expect(fixed(itemData.width)).to.eq(fixed(secondaryItemData.width));
expect(fixed(itemData.actualWidth)).to.be.lessThan(fixed(itemData.width)); // probably cypress bug because in the console everything is fine
const item = state.get('config.chart.items.gstcid-15');
expect(item.time.start).to.be.greaterThan(secondaryItem.time.start);
expect(item.time.end).to.be.greaterThan(secondaryItem.time.end);
});
});
it('should calculate right item position in calculatedZoomMode with hidden weekends', () => {
const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
let state, gstc;
cy.load('/examples/one-month')
.window()
.then((win) => {
// @ts-ignore
state = win.state;
// @ts-ignore
gstc = win.gstc;
})
.get('#hide-weekends')
.click()
.wait(Cypress.env('wait'))
.then(() => {
state.update('config.scroll.horizontal.multiplier', 3);
state.update('config.chart.items.gstcid-15', (item) => {
item.time.start = gstc.api.time.date('2020-01-24').valueOf();
item.time.end = gstc.api.time.date('2020-01-31').endOf('day').valueOf();
return item;
});
})
.wait(Cypress.env('wait'))
.then(() => {
const itemData = state.get('$data.chart.items.gstcid-15');
expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-24 00:00:00');
expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-31 23:59:59');
expect(fixed(itemData.width)).to.eq(fixed(itemData.actualWidth));
expect(fixed(itemData.position.left)).to.eq(fixed(itemData.position.actualLeft));
expect(fixed(itemData.position.right)).to.eq(fixed(itemData.position.actualRight));
})
.move(itemClass, 50, 0)
.move(itemClass, 50, 0)
.then(() => {
const itemData: ItemData = state.get('$data.chart.items.gstcid-15');
expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-30 00:00:00');
expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-06 23:59:59');
const time: DataChartTime = state.get('$data.chart.time');
const cellWidth = time.allDates[time.level][0].width;
expect(fixed(itemData.width)).to.eq(fixed(6 * cellWidth));
expect(fixed(itemData.actualWidth)).to.eq(fixed(2 * cellWidth));
})
.get(itemClass)
.should('be.visible')
.get('#btn-next-month')
.click()
.wait(300)
.then(() => {
const itemData = state.get('$data.chart.items.gstcid-15');
expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-01-30 00:00:00');
expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-02-06 23:59:59');
const time: DataChartTime = state.get('$data.chart.time');
const cellWidth = time.allDates[time.level][0].width;
expect(fixed(itemData.width)).to.eq(fixed(6 * cellWidth));
expect(fixed(itemData.actualWidth)).to.eq(fixed(4 * cellWidth));
});
});
it('should show arrow on hidden dates when scroll is moved to the end of the view', () => {
const itemClass = '.gstc__chart-timeline-items-row-item[data-gstcid="gstcid-15"]';
let state, gstc;
cy.load('/examples/complex-1')
.window()
.then((win) => {
// @ts-ignore
state = win.state;
// @ts-ignore
gstc = win.gstc;
})
.get('#hide-weekends')
.click()
.wait(Cypress.env('wait'))
.get('#expand-time')
.click()
.wait(Cypress.env('wait'))
.then(() => {
state.update('config.scroll.horizontal.multiplier', 3);
state.update('config.chart.items.gstcid-15', (item) => {
item.time.start = gstc.api.time.date('2020-03-10').valueOf();
item.time.end = gstc.api.time.date('2020-04-01').endOf('day').valueOf();
return item;
});
gstc.api.scrollToTime(gstc.api.time.date('2020-03-16'), false);
})
.wait(Cypress.env('wait'))
.then(() => {
const itemData = state.get('$data.chart.items.gstcid-15');
expect(itemData.time.startDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-03-10 00:00:00');
expect(itemData.time.endDate.format('YYYY-MM-DD HH:mm:ss')).to.eq('2020-04-01 23:59:59');
expect(fixed(itemData.width)).to.be.greaterThan(fixed(itemData.actualWidth));
expect(fixed(itemData.position.left)).to.be.lessThan(fixed(itemData.position.actualLeft));
expect(fixed(itemData.position.right)).to.be.greaterThan(fixed(itemData.position.actualRight));
})
.get(`${itemClass} .gstc__chart-timeline-items-row-item--left-cut-icon`)
.should('be.visible')
.get(`${itemClass} .gstc__chart-timeline-items-row-item--right-cut-icon`)
.should('be.visible');
});
});