UNPKG

devextreme

Version:

JavaScript/TypeScript Component Suite for Responsive Web Development

233 lines (232 loc) • 8.91 kB
/** * DevExtreme (esm/__internal/scheduler/appointment_popup/customize_form_items.test.js) * Version: 25.2.7 * Build date: Tue May 05 2026 * * Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import { describe, expect, it } from "@jest/globals"; import { customizeFormItems } from "./m_customize_form_items"; const subjectGroup = { name: "subjectGroup", itemType: "group", cssClass: "dx-scheduler-form-subject-group dx-scheduler-form-group-with-icon" }; const dateGroup = { name: "dateGroup", itemType: "group", cssClass: "dx-scheduler-form-date-range-group dx-scheduler-form-group-with-icon" }; const repeatGroup = { name: "repeatGroup", itemType: "group", cssClass: "dx-scheduler-form-repeat-group dx-scheduler-form-group-with-icon" }; const resourcesGroup = { name: "resourcesGroup", itemType: "group", cssClass: "dx-scheduler-form-resources-group dx-scheduler-form-group-with-icon" }; const descriptionGroup = { name: "descriptionGroup", itemType: "group", cssClass: "dx-scheduler-form-description-group dx-scheduler-form-group-with-icon" }; const mainGroup = { items: [subjectGroup, dateGroup, repeatGroup, resourcesGroup, descriptionGroup], name: "mainGroup", itemType: "group", cssClass: "dx-scheduler-form-main-group", colSpan: 1 }; const recurrenceGroup = { name: "recurrenceGroup", itemType: "group", cssClass: "dx-scheduler-form-recurrence-group dx-scheduler-form-recurrence-hidden", colSpan: 1 }; const mainTestCase = [mainGroup, recurrenceGroup]; describe("customizeFormItems", () => { it("should return original items when no customization provided", () => { const result = customizeFormItems(mainTestCase); expect(result).toEqual(mainTestCase) }); it("should not mutate original data", () => { var _mainGroup$items, _mainGroup$items2; const originalMainTestCase = JSON.parse(JSON.stringify(mainTestCase)); const originalMainGroup = JSON.parse(JSON.stringify(mainGroup)); const originalSubjectGroup = JSON.parse(JSON.stringify(subjectGroup)); expect(mainGroup.items).toBe(mainGroup.items); customizeFormItems(mainTestCase, ["mainGroup"]); customizeFormItems(mainTestCase, ["subjectGroup", "dateGroup"]); customizeFormItems(mainTestCase, [{ name: "mainGroup", items: [] }]); customizeFormItems(mainTestCase, [{ name: "mainGroup", items: ["subjectGroup"] }]); expect(mainTestCase).toEqual(originalMainTestCase); expect(mainGroup).toEqual(originalMainGroup); expect(subjectGroup).toEqual(originalSubjectGroup); expect(mainGroup.items).toHaveLength(5); expect(null === (_mainGroup$items = mainGroup.items) || void 0 === _mainGroup$items ? void 0 : _mainGroup$items[0]).toBe(subjectGroup); expect(null === (_mainGroup$items2 = mainGroup.items) || void 0 === _mainGroup$items2 ? void 0 : _mainGroup$items2[1]).toBe(dateGroup) }); it("should show only mainGroup when specified by object", () => { const result = customizeFormItems(mainTestCase, [{ name: "mainGroup" }]); expect(result).toEqual([mainGroup]) }); it("should show only mainGroup when specified by string", () => { const result = customizeFormItems(mainTestCase, ["mainGroup"]); expect(result).toEqual([mainGroup]) }); it("should extract specific items from parent group", () => { const result = customizeFormItems(mainTestCase, ["subjectGroup", "dateGroup"]); expect(result).toEqual([subjectGroup, dateGroup]) }); it("should create empty mainGroup when items array is empty", () => { const result = customizeFormItems(mainTestCase, [{ name: "mainGroup", items: [], visible: false }]); expect(result).toEqual([Object.assign({}, mainGroup, { items: [], visible: false })]) }); it("should change order of top-level groups", () => { const result = customizeFormItems(mainTestCase, ["recurrenceGroup", "mainGroup"]); expect(result).toEqual([recurrenceGroup, mainGroup]) }); it("should extract item from group and change order", () => { const result = customizeFormItems(mainTestCase, ["subjectGroup", "recurrenceGroup", "mainGroup"]); const expectedMainGroup = Object.assign({}, mainGroup, { items: [dateGroup, repeatGroup, resourcesGroup, descriptionGroup] }); expect(result).toEqual([subjectGroup, recurrenceGroup, expectedMainGroup]) }); it("should extract multiple items from parent group", () => { const result = customizeFormItems(mainTestCase, ["subjectGroup", "repeatGroup", "mainGroup"]); const expectedMainGroup = Object.assign({}, mainGroup, { items: [dateGroup, resourcesGroup, descriptionGroup] }); expect(result).toEqual([subjectGroup, repeatGroup, expectedMainGroup]) }); it("should create custom form item when name not found", () => { const result = customizeFormItems(mainTestCase, ["customItem"]); expect(result).toEqual([{ name: "customItem", itemType: "simple", dataField: "customItem", editorType: "dxTextBox" }]) }); it("should create custom group with children", () => { const result = customizeFormItems(mainTestCase, [{ name: "customGroup", itemType: "group", items: ["child1", "child2"] }]); expect(result).toEqual([{ name: "customGroup", itemType: "group", items: [{ name: "child1", itemType: "simple", dataField: "child1", editorType: "dxTextBox" }, { name: "child2", itemType: "simple", dataField: "child2", editorType: "dxTextBox" }] }]) }); it("should create custom group with visibility control", () => { const result = customizeFormItems(mainTestCase, [{ name: "hiddenGroup", itemType: "group", visible: false, items: ["field1"] }]); expect(result).toEqual([{ name: "hiddenGroup", itemType: "group", visible: false, items: [{ name: "field1", itemType: "simple", dataField: "field1", editorType: "dxTextBox" }] }]) }); it("should customize mainGroup with specific items as array", () => { const result = customizeFormItems(mainTestCase, [{ name: "mainGroup", items: ["subjectGroup", "dateGroup"] }]); expect(result).toEqual([Object.assign({}, mainGroup, { items: [subjectGroup, dateGroup] })]) }); it("should customize mainGroup with specific items as objects", () => { const result = customizeFormItems(mainTestCase, [{ name: "mainGroup", items: [{ name: "subjectGroup" }, { name: "dateGroup" }] }]); expect(result).toEqual([Object.assign({}, mainGroup, { items: [subjectGroup, dateGroup] })]) }); it("should create nested custom groups", () => { const result = customizeFormItems(mainTestCase, [{ name: "mainGroup", items: [{ name: "several", itemType: "group", items: ["subjectGroup"] }, "dateGroup"] }]); expect(result).toEqual([Object.assign({}, mainGroup, { items: [{ name: "several", itemType: "group", items: [subjectGroup] }, dateGroup] })]) }); it("should set item visibility property", () => { const result = customizeFormItems(mainTestCase, [{ name: "mainGroup", items: [{ name: "subjectGroup", visible: false }, { name: "dateGroup" }] }]); expect(result).toEqual([Object.assign({}, mainGroup, { items: [Object.assign({}, subjectGroup, { visible: false }), dateGroup] })]) }) });