UNPKG

poui

Version:

A React component for designating partial orders

135 lines (114 loc) 4.48 kB
"use strict"; var _react = _interopRequireDefault(require("react")); var _enzyme = require("enzyme"); var _ListItems = _interopRequireDefault(require("../../ListItems")); var _ListItemsFixtures = _interopRequireDefault(require("../../fixtures/ListItemsFixtures")); var _PartoWithSelection = _interopRequireDefault(require("../PartoWithSelection")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } describe('SelectInOrder', function () { var itemList = _ListItemsFixtures.default.salad; var initialOrder = ['T', 'L', ['M', 'P'], 'A']; var currentOrdering = initialOrder; var updateOrderingCallback = jest.fn(function (ordering) { currentOrdering = ordering; }); var wrapper; beforeEach(function () { wrapper = (0, _enzyme.mount)( /*#__PURE__*/_react.default.createElement(_PartoWithSelection.default, { itemList: itemList, parto: initialOrder, updateOrdering: updateOrderingCallback })); }); it('sends a callback when the ordering changes', function () { var item = _ListItems.default.itemFor(itemList, 'R'); var itemWrapper = wrapper.find({ itemKey: item.key }); itemWrapper.simulate("click"); expect(updateOrderingCallback.mock.calls.length).toBe(1); expect(currentOrdering).toEqual(['T', 'L', ['M', 'P'], 'A', 'R', ['Z', 'C']]); }); it('raises first selected item', function () { var item = _ListItems.default.itemFor(itemList, 'R'); var itemWrapper = wrapper.find({ itemKey: item.key }); itemWrapper.simulate("click"); var olWrapper = wrapper.find('.poui-parto-ol'); var raisedItem = olWrapper.childAt(initialOrder.length); expect(raisedItem.text().trim()).toEqual(item.description); }); it('moves a subsequent selected item to the end of the order', function () { var first = _ListItems.default.itemFor(itemList, 'R'); var second = _ListItems.default.itemFor(itemList, 'Z'); wrapper.find({ itemKey: first.key }).simulate("click"); wrapper.find({ itemKey: second.key }).simulate("click"); var olWrapper = wrapper.find('.poui-parto-ol'); var secondOrderedItem = olWrapper.childAt(initialOrder.length + 1); expect(secondOrderedItem.text().trim()).toEqual(second.description); }); it('raises item out of an internal group', function () { var item = _ListItems.default.itemFor(itemList, 'P'); var itemWrapper = wrapper.find({ itemKey: item.key }); itemWrapper.simulate("click"); var olWrapper = wrapper.find('.poui-parto-ol'); var extracted = olWrapper.childAt(2); var ungrouped = olWrapper.childAt(3); var ungroupedItem = _ListItems.default.itemFor(itemList, 'M'); expect(extracted.text().trim()).toEqual(item.description); expect(ungrouped.text().trim()).toEqual(ungroupedItem.description); }); it('reverses when item clicked twice', function () { var item = _ListItems.default.itemFor(itemList, 'P'); wrapper.find({ itemKey: item.key }).simulate("click"); wrapper.find({ itemKey: item.key }).simulate("click"); var firstGroup = wrapper.find('.poui-parto-ul').first(); var firstUnordered = firstGroup.children().first(); expect(firstUnordered.text().trim()).toEqual(item.description); }); it.skip('reorders when item dropped on a different one', function () { var sourceKey = 'L'; var destKey = 'A'; var mockEvent = { clientY: 0, dataTransfer: { getData: function getData() { return sourceKey; } } }; var itemWrapper = wrapper.find({ itemKey: destKey }); var domNode = itemWrapper.getDOMNode(); Object.defineProperty(domNode, "getBoundingClientRect", { value: function value() { return { top: 0, height: 4 }; }, writeable: false }); itemWrapper.simulate('dragOver', mockEvent); itemWrapper.simulate('drop', mockEvent); var orderedList = wrapper.find('.poui-parto-ol'); var itemT = _ListItems.default.itemFor(itemList, 'T'); expect(orderedList.childAt(0).text().trim()).toEqual(itemT.description); var itemL = _ListItems.default.itemFor(itemList, 'L'); expect(orderedList.childAt(2).text().trim()).toEqual(itemL.description); var itemA = _ListItems.default.itemFor(itemList, 'A'); expect(orderedList.childAt(3).text().trim()).toEqual(itemA.description); }); });