devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
252 lines (251 loc) • 9.34 kB
JavaScript
/**
* DevExtreme (esm/__internal/scheduler/utils/resource_manager/appointment_groups_utils.test.js)
* Version: 25.1.3
* Build date: Wed Jun 25 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import {
describe,
expect,
it
} from "@jest/globals";
import {
complexIdResourceMock,
getResourceManagerMock,
resourceIndexesMock,
resourceItemsByIdMock
} from "../../../scheduler/__mock__/resourceManager.mock";
import {
getAppointmentGroupIndex,
getAppointmentGroupValues,
getAppointmentResources,
getRawAppointmentGroupValues,
getResourceItemById,
getSafeGroupValues,
groupAppointmentsByGroupLeafs,
setAppointmentGroupValues
} from "./appointment_groups_utils";
describe("appointment groups utils", (() => {
describe("getResourceItemById", (() => {
it("should return resource item by id", (() => {
const manager = getResourceManagerMock();
expect(getResourceItemById(manager.resourceById.assigneeId, 1)).toEqual(manager.resourceById.assigneeId.items[0])
}));
it("should return undefined for unreached item", (() => {
const manager = getResourceManagerMock(complexIdResourceMock);
expect(getResourceItemById(manager.resources[0], {
_value: "guid-2"
})).toEqual(manager.resources[0].items[1])
}));
it("should return resource item by complex id", (() => {
const manager = getResourceManagerMock();
expect(getResourceItemById(manager.resourceById.assigneeId, 10)).toEqual(void 0)
}))
}));
describe("getAppointmentGroupValues", (() => {
it("should return appointment group array values", (() => {
const manager = getResourceManagerMock();
expect(getAppointmentGroupValues({
assigneeId: [1, 2],
roomId: 3,
nested: {
priorityId: 1
}
}, manager.resources)).toEqual({
assigneeId: [1, 2],
roomId: [3],
"nested.priorityId": [1]
})
}))
}));
describe("getRawAppointmentGroupValues", (() => {
it("should return appointment group initial values", (() => {
const manager = getResourceManagerMock();
expect(getRawAppointmentGroupValues({
assigneeId: [1, 2],
roomId: 3,
nested: {
priorityId: 1
}
}, manager.resources)).toEqual({
assigneeId: [1, 2],
roomId: 3,
"nested.priorityId": 1
})
}))
}));
describe("getSafeGroupValues", (() => {
it("should return appointment group array values", (() => {
expect(getSafeGroupValues({
assigneeId: [1, 2],
roomId: 3,
"nested.priorityId": 1
})).toEqual({
assigneeId: [1, 2],
roomId: [3],
"nested.priorityId": [1]
})
}))
}));
describe("getAppointmentResources", (() => {
it("should return appointment resource texts in order as in appointment", (async () => {
const manager = getResourceManagerMock();
await manager.loadGroupResources(resourceIndexesMock);
expect(getAppointmentResources({
assigneeId: [4, 1, 2],
roomId: [2],
"nested.priorityId": [1]
}, manager.resourceById)).toEqual([{
label: "Assignee",
values: ["Sandra Johnson", "Samantha Bright", "John Heart"]
}, {
label: "Room",
values: ["Room 3"]
}, {
label: "Priority",
values: ["Low Priority"]
}])
}));
it("label can be undefined if not specified", (async () => {
const manager = getResourceManagerMock([{
field: "roomId",
dataSource: resourceItemsByIdMock.roomId,
allowMultiple: true
}]);
await manager.loadGroupResources(resourceIndexesMock);
expect(getAppointmentResources({
roomId: [2, 0]
}, manager.resourceById)).toEqual([{
label: void 0,
values: ["Room 3", "Room 1"]
}])
}));
it("should return appointment resource texts with complex ids", (async () => {
const manager = getResourceManagerMock(complexIdResourceMock);
await manager.loadGroupResources(["ownerId"]);
expect(getAppointmentResources({
ownerId: [{
_value: "guid-2"
}, {
_value: "guid-3"
}, {
_value: "guid-1"
}]
}, manager.resourceById)).toEqual([{
label: void 0,
values: ["two", "three", "one"]
}])
}))
}));
describe("setAppointmentGroupValues", (() => {
it("should set nothing", (() => {
const appointment = {
something: 1
};
const manager = getResourceManagerMock();
setAppointmentGroupValues(appointment, manager.resourceById, void 0);
expect(appointment).toEqual(appointment)
}));
it("should set appointment group values", (() => {
const appointment = {};
const manager = getResourceManagerMock();
setAppointmentGroupValues(appointment, manager.resourceById, {
assigneeId: 1,
roomId: 2,
"nested.priorityId": 1
});
expect(appointment).toEqual({
assigneeId: [1],
roomId: 2,
nested: {
priorityId: 1
}
})
}))
}));
describe("getAppointmentGroupIndex", (() => {
it("should return appointment group indexes", (async () => {
const manager = getResourceManagerMock();
await manager.loadGroupResources(resourceIndexesMock);
expect(getAppointmentGroupIndex({
assigneeId: [1, 2],
roomId: [2],
"nested.priorityId": [1]
}, manager.groupsLeafs)).toEqual([2, 5])
}))
}));
describe("groupAppointmentsByGroupLeafs", (() => {
it("should return appointment grouped by leafs (rare appointments)", (async () => {
const appointments = [{
assigneeId: [1],
nested: {
priorityId: 1
}
}];
const manager = getResourceManagerMock();
await manager.loadGroupResources(["assigneeId", "nested.priorityId"]);
expect(groupAppointmentsByGroupLeafs(manager.resourceById, manager.groupsLeafs, appointments)).toEqual([
[appointments[0]],
[],
[],
[],
[],
[],
[],
[]
])
}));
it("should return appointment grouped by leafs", (async () => {
const appointments = [{
assigneeId: [1, 2],
nested: {
priorityId: 1
}
}, {
assigneeId: [2],
nested: {
priorityId: 1
}
}, {
assigneeId: [3, 4],
nested: {
priorityId: 2
}
}];
const manager = getResourceManagerMock();
await manager.loadGroupResources(["assigneeId", "nested.priorityId"]);
expect(groupAppointmentsByGroupLeafs(manager.resourceById, manager.groupsLeafs, appointments)).toEqual([
[appointments[0]],
[],
[appointments[0], appointments[1]],
[],
[],
[appointments[2]],
[],
[appointments[2]]
])
}));
it("should return appointments for no grouping", (() => {
const appointments = [{
assigneeId: [1, 2],
nested: {
priorityId: 1
}
}, {
assigneeId: [2],
nested: {
priorityId: 1
}
}, {
assigneeId: [3, 4],
nested: {
priorityId: 2
}
}];
const manager = getResourceManagerMock();
expect(groupAppointmentsByGroupLeafs(manager.resourceById, manager.groupsLeafs, appointments)).toEqual([appointments])
}))
}))
}));