wix-style-react
Version:
wix-style-react
115 lines • 5.62 kB
JavaScript
import { baseUniDriverFactory } from '../test-utils/utils/unidriver';
import { addItemUniDriverFactory } from '../AddItem/AddItem.uni.driver';
import { DataAttribute, DataHook } from './constants';
export const timeTableDriverFactory = base => {
const byHook = dataHook => `[data-hook="${dataHook}"]`;
const getElementAt = async (dataHook, index) => (await base.$$(byHook(dataHook))).get(index);
async function getColumnByIndex(columnIndex) {
const column = await getElementAt(DataHook.Column, columnIndex);
if (!(await column.exists())) {
throw new Error(`Column with index ${columnIndex} doesn't exist`);
}
return column;
}
const getColumnActions = async (columnIndex) => {
const column = await getColumnByIndex(columnIndex);
await column.hover();
return column.$$(byHook(DataHook.ColumnAction));
};
const getAction = async (columnIndex, actionIndex) => {
const actions = await getColumnActions(columnIndex);
return actions?.get(actionIndex);
};
const getBooleanDataAttribute = async (element, dataAttribute) => (await element.attr(dataAttribute)) === 'true';
const getAllColumnItemElementsAt = async (columnIndex) => {
const column = await getColumnByIndex(columnIndex);
return column.$$(byHook(DataHook.Item));
};
const getColumnItemElementAt = async (columnIndex, itemIndex) => {
const items = await getAllColumnItemElementsAt(columnIndex);
return items.get(itemIndex);
};
const getAddItemButtonElementAt = async (columnIndex) => {
const column = await getColumnByIndex(columnIndex);
await column.hover();
return addItemUniDriverFactory(column.$(byHook(DataHook.AddItemButton)));
};
return {
...baseUniDriverFactory(base),
/** Get column count. */
getColumnCount: async () => {
return (await base.$$(byHook(DataHook.Column))).count();
},
/** Get title at column index. */
getTitleAt: async (columnIndex) => {
return (await getElementAt(DataHook.Title, columnIndex)).text();
},
/** Get actions count in column with give columnIndex. */
getActionsCount: async (columnIndex) => {
const actions = await getColumnActions(columnIndex);
return actions.count();
},
/** Clicks at action with given column and action id */
clickActionAt: async (columnIndex, actionIndex) => {
const action = await getAction(columnIndex, actionIndex);
if ((await action.exists()) === false) {
throw new Error(`Action at columnIndex: ${columnIndex}, actionIndex: ${actionIndex} doesn't exist`);
}
return addItemUniDriverFactory(action).click();
},
/** Hover column by column index. Used to display action buttons */
hoverColumn: async (columnIndex) => {
const column = await getColumnByIndex(columnIndex);
await column.hover();
},
/** Return label of action by column and action id */
getActionLabelAt: async (columnIndex, actionIndex) => {
const action = await getAction(columnIndex, actionIndex);
return action.text();
},
/** Get subtitle at column index. */
getSubtitleAt: async (columnIndex) => {
return (await getElementAt(DataHook.Subtitle, columnIndex)).text();
},
/** Get active state at column index. */
isColumnActiveAt: async (columnIndex) => {
const column = await getColumnByIndex(columnIndex);
return getBooleanDataAttribute(column, DataAttribute.ColumnActive);
},
/** Get disabled state at column index. */
isColumnDisabledAt: async (columnIndex) => {
const column = await getColumnByIndex(columnIndex);
return getBooleanDataAttribute(column, DataAttribute.ColumnDisabled);
},
/** Get droppable state at column index. */
isColumnDroppableAt: async (columnIndex) => {
const column = await getColumnByIndex(columnIndex);
return getBooleanDataAttribute(column, DataAttribute.ColumnDroppable);
},
/** Get item count at column index. */
getItemCountAt: async (columnIndex) => {
return (await getAllColumnItemElementsAt(columnIndex)).count();
},
/** Get item disabled state at column and item index. */
isItemDisabledAt: async (columnIndex, itemIndex) => {
const item = await getColumnItemElementAt(columnIndex, itemIndex);
return getBooleanDataAttribute(item, DataAttribute.ItemDisabled);
},
/** Get item draggable state at column and item index. */
isItemDraggableAt: async (columnIndex, itemIndex) => {
const item = await getColumnItemElementAt(columnIndex, itemIndex);
return getBooleanDataAttribute(item, DataAttribute.ItemDraggable);
},
/** Click on add item button at column index. */
clickOnAddItemButtonAt: async (columnIndex) => {
const addItemButton = await getAddItemButtonElementAt(columnIndex);
return addItemButton.click();
},
/** Check if add button is shown on hover at column index. */
addItemButtonExistsAt: async (columnIndex) => {
const addItemButton = await getAddItemButtonElementAt(columnIndex);
return addItemButton.exists();
},
};
};
//# sourceMappingURL=TimeTable.uni.driver.js.map