@usertour/helpers 0.0.51 → 0.0.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/content-helper.test.cjs +540 -65
- package/dist/__tests__/content-helper.test.js +542 -58
- package/dist/{chunk-YR6T3KNN.js → chunk-2TMOS3DN.js} +2 -18
- package/dist/content-helper.cjs +1 -19
- package/dist/content-helper.d.cts +4 -19
- package/dist/content-helper.d.ts +4 -19
- package/dist/content-helper.js +1 -5
- package/dist/index.cjs +1 -19
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -5
- package/package.json +2 -2
|
@@ -324,7 +324,7 @@ var duplicateData = (data, contentType) => {
|
|
|
324
324
|
return data;
|
|
325
325
|
};
|
|
326
326
|
var duplicateStep = (step) => {
|
|
327
|
-
const { id,
|
|
327
|
+
const { id, createdAt, updatedAt, versionId, trigger, target, data, ...rest } = step;
|
|
328
328
|
return {
|
|
329
329
|
...rest,
|
|
330
330
|
data: data ? processQuestionElements(data) : [],
|
|
@@ -332,14 +332,6 @@ var duplicateStep = (step) => {
|
|
|
332
332
|
target: duplicateTarget(target)
|
|
333
333
|
};
|
|
334
334
|
};
|
|
335
|
-
var duplicateStepWithRename = (originalStep, sequence, existingStepNames) => {
|
|
336
|
-
const duplicated = duplicateStep(originalStep);
|
|
337
|
-
return {
|
|
338
|
-
...duplicated,
|
|
339
|
-
name: generateUniqueCopyName(originalStep.name, existingStepNames),
|
|
340
|
-
sequence
|
|
341
|
-
};
|
|
342
|
-
};
|
|
343
335
|
|
|
344
336
|
// src/__tests__/content-helper.test.ts
|
|
345
337
|
jest.mock("../helper", () => ({
|
|
@@ -769,6 +761,69 @@ describe("duplicateTriggers", () => {
|
|
|
769
761
|
expect(result[0].actions).toBeUndefined();
|
|
770
762
|
expect(result[0].conditions).toBeUndefined();
|
|
771
763
|
});
|
|
764
|
+
test("should handle empty array", () => {
|
|
765
|
+
const triggers = [];
|
|
766
|
+
const result = duplicateTriggers(triggers);
|
|
767
|
+
expect(result).toEqual([]);
|
|
768
|
+
});
|
|
769
|
+
test("should handle multiple triggers", () => {
|
|
770
|
+
const triggers = [
|
|
771
|
+
{
|
|
772
|
+
id: "trigger-1",
|
|
773
|
+
actions: [{ id: "action-1", type: "test", operators: "and", data: {} }],
|
|
774
|
+
conditions: []
|
|
775
|
+
},
|
|
776
|
+
{
|
|
777
|
+
id: "trigger-2",
|
|
778
|
+
actions: [],
|
|
779
|
+
conditions: [{ id: "condition-1", type: "test", operators: "and", data: {} }]
|
|
780
|
+
}
|
|
781
|
+
];
|
|
782
|
+
const result = duplicateTriggers(triggers);
|
|
783
|
+
expect(result).toHaveLength(2);
|
|
784
|
+
expect(result[0].id).toBe("mock-cuid");
|
|
785
|
+
expect(result[1].id).toBe("mock-cuid");
|
|
786
|
+
expect(result[0].actions[0].id).toBe("regenerated-action-1");
|
|
787
|
+
expect(result[1].conditions[0].id).toBe("regenerated-condition-1");
|
|
788
|
+
});
|
|
789
|
+
test("should preserve other trigger properties", () => {
|
|
790
|
+
const triggers = [
|
|
791
|
+
{
|
|
792
|
+
id: "trigger-1",
|
|
793
|
+
customType: "click",
|
|
794
|
+
customSelector: ".button",
|
|
795
|
+
delay: 1e3,
|
|
796
|
+
actions: [],
|
|
797
|
+
conditions: []
|
|
798
|
+
}
|
|
799
|
+
];
|
|
800
|
+
const result = duplicateTriggers(triggers);
|
|
801
|
+
expect(result[0].customType).toBe("click");
|
|
802
|
+
expect(result[0].customSelector).toBe(".button");
|
|
803
|
+
expect(result[0].delay).toBe(1e3);
|
|
804
|
+
});
|
|
805
|
+
test("should handle triggers with non-array actions", () => {
|
|
806
|
+
const triggers = [
|
|
807
|
+
{
|
|
808
|
+
id: "trigger-1",
|
|
809
|
+
actions: "not-an-array",
|
|
810
|
+
conditions: []
|
|
811
|
+
}
|
|
812
|
+
];
|
|
813
|
+
const result = duplicateTriggers(triggers);
|
|
814
|
+
expect(result[0].actions).toBe("not-an-array");
|
|
815
|
+
});
|
|
816
|
+
test("should handle triggers with non-array conditions", () => {
|
|
817
|
+
const triggers = [
|
|
818
|
+
{
|
|
819
|
+
id: "trigger-1",
|
|
820
|
+
actions: [],
|
|
821
|
+
conditions: "not-an-array"
|
|
822
|
+
}
|
|
823
|
+
];
|
|
824
|
+
const result = duplicateTriggers(triggers);
|
|
825
|
+
expect(result[0].conditions).toBe("not-an-array");
|
|
826
|
+
});
|
|
772
827
|
});
|
|
773
828
|
describe("duplicateTarget", () => {
|
|
774
829
|
test("should return undefined for undefined target", () => {
|
|
@@ -801,6 +856,42 @@ describe("duplicateTarget", () => {
|
|
|
801
856
|
const result = duplicateTarget(target);
|
|
802
857
|
expect(result).toEqual(target);
|
|
803
858
|
});
|
|
859
|
+
test("should handle target with empty actions array", () => {
|
|
860
|
+
const target = {
|
|
861
|
+
selector: ".test",
|
|
862
|
+
actions: []
|
|
863
|
+
};
|
|
864
|
+
const result = duplicateTarget(target);
|
|
865
|
+
expect(result == null ? void 0 : result.actions).toEqual([]);
|
|
866
|
+
});
|
|
867
|
+
test("should handle target with multiple actions", () => {
|
|
868
|
+
var _a, _b;
|
|
869
|
+
const target = {
|
|
870
|
+
selector: ".test",
|
|
871
|
+
actions: [
|
|
872
|
+
{ id: "action-1", type: "test1", operators: "and", data: {} },
|
|
873
|
+
{ id: "action-2", type: "test2", operators: "or", data: {} }
|
|
874
|
+
]
|
|
875
|
+
};
|
|
876
|
+
const result = duplicateTarget(target);
|
|
877
|
+
expect(result == null ? void 0 : result.actions).toHaveLength(2);
|
|
878
|
+
expect((_a = result == null ? void 0 : result.actions) == null ? void 0 : _a[0].id).toBe("regenerated-action-1");
|
|
879
|
+
expect((_b = result == null ? void 0 : result.actions) == null ? void 0 : _b[1].id).toBe("regenerated-action-2");
|
|
880
|
+
});
|
|
881
|
+
test("should preserve other target properties", () => {
|
|
882
|
+
var _a;
|
|
883
|
+
const target = {
|
|
884
|
+
selectors: [".test-selector"],
|
|
885
|
+
customPlacement: "bottom",
|
|
886
|
+
offset: { x: 10, y: 20 },
|
|
887
|
+
actions: [{ id: "action-1", type: "test", operators: "and", data: {} }]
|
|
888
|
+
};
|
|
889
|
+
const result = duplicateTarget(target);
|
|
890
|
+
expect(result == null ? void 0 : result.selectors).toEqual([".test-selector"]);
|
|
891
|
+
expect(result == null ? void 0 : result.customPlacement).toBe("bottom");
|
|
892
|
+
expect(result == null ? void 0 : result.offset).toEqual({ x: 10, y: 20 });
|
|
893
|
+
expect((_a = result == null ? void 0 : result.actions) == null ? void 0 : _a[0].id).toBe("regenerated-action-1");
|
|
894
|
+
});
|
|
804
895
|
});
|
|
805
896
|
describe("duplicateChecklistData", () => {
|
|
806
897
|
test("should return data as-is for null", () => {
|
|
@@ -877,6 +968,247 @@ describe("duplicateChecklistData", () => {
|
|
|
877
968
|
const result = duplicateChecklistData(data);
|
|
878
969
|
expect(result.items[0].onlyShowTaskConditions[0].id).toBe("regenerated-condition-1");
|
|
879
970
|
});
|
|
971
|
+
test("should process content field with question elements", () => {
|
|
972
|
+
var _a;
|
|
973
|
+
const questionElement = {
|
|
974
|
+
type: import_types4.ContentEditorElementType.NPS,
|
|
975
|
+
data: { name: "NPS Question", cvid: "old-cvid" }
|
|
976
|
+
};
|
|
977
|
+
const data = {
|
|
978
|
+
content: [
|
|
979
|
+
{
|
|
980
|
+
type: "root",
|
|
981
|
+
children: [
|
|
982
|
+
{
|
|
983
|
+
type: "column",
|
|
984
|
+
children: [
|
|
985
|
+
{
|
|
986
|
+
type: "element",
|
|
987
|
+
element: questionElement
|
|
988
|
+
}
|
|
989
|
+
]
|
|
990
|
+
}
|
|
991
|
+
]
|
|
992
|
+
}
|
|
993
|
+
],
|
|
994
|
+
items: [
|
|
995
|
+
{
|
|
996
|
+
id: "item-1",
|
|
997
|
+
clickedActions: [],
|
|
998
|
+
completeConditions: [],
|
|
999
|
+
onlyShowTaskConditions: []
|
|
1000
|
+
}
|
|
1001
|
+
]
|
|
1002
|
+
};
|
|
1003
|
+
const result = duplicateChecklistData(data);
|
|
1004
|
+
const processedElement = (_a = result.content) == null ? void 0 : _a[0].children[0].children[0].element;
|
|
1005
|
+
expect(processedElement.data.cvid).toBe("mock-cuid");
|
|
1006
|
+
});
|
|
1007
|
+
test("should handle multiple items", () => {
|
|
1008
|
+
const data = {
|
|
1009
|
+
items: [
|
|
1010
|
+
{
|
|
1011
|
+
id: "item-1",
|
|
1012
|
+
title: "Task 1",
|
|
1013
|
+
clickedActions: [{ id: "action-1", type: "test", operators: "and", data: {} }],
|
|
1014
|
+
completeConditions: [],
|
|
1015
|
+
onlyShowTaskConditions: []
|
|
1016
|
+
},
|
|
1017
|
+
{
|
|
1018
|
+
id: "item-2",
|
|
1019
|
+
title: "Task 2",
|
|
1020
|
+
clickedActions: [],
|
|
1021
|
+
completeConditions: [{ id: "condition-2", type: "test", operators: "and", data: {} }],
|
|
1022
|
+
onlyShowTaskConditions: []
|
|
1023
|
+
}
|
|
1024
|
+
]
|
|
1025
|
+
};
|
|
1026
|
+
const result = duplicateChecklistData(data);
|
|
1027
|
+
expect(result.items).toHaveLength(2);
|
|
1028
|
+
expect(result.items[0].id).toBe("mock-uuid");
|
|
1029
|
+
expect(result.items[1].id).toBe("mock-uuid");
|
|
1030
|
+
expect(result.items[0].clickedActions[0].id).toBe("regenerated-action-1");
|
|
1031
|
+
expect(result.items[1].completeConditions[0].id).toBe("regenerated-condition-2");
|
|
1032
|
+
});
|
|
1033
|
+
test("should handle items without conditions arrays", () => {
|
|
1034
|
+
const data = {
|
|
1035
|
+
items: [
|
|
1036
|
+
{
|
|
1037
|
+
id: "item-1",
|
|
1038
|
+
title: "Task 1"
|
|
1039
|
+
}
|
|
1040
|
+
]
|
|
1041
|
+
};
|
|
1042
|
+
const result = duplicateChecklistData(data);
|
|
1043
|
+
expect(result.items[0].id).toBe("mock-uuid");
|
|
1044
|
+
expect(result.items[0].clickedActions).toBeUndefined();
|
|
1045
|
+
expect(result.items[0].completeConditions).toBeUndefined();
|
|
1046
|
+
expect(result.items[0].onlyShowTaskConditions).toBeUndefined();
|
|
1047
|
+
});
|
|
1048
|
+
test("should preserve other item properties", () => {
|
|
1049
|
+
const data = {
|
|
1050
|
+
items: [
|
|
1051
|
+
{
|
|
1052
|
+
id: "item-1",
|
|
1053
|
+
name: "Task 1",
|
|
1054
|
+
description: "A task description",
|
|
1055
|
+
isCompleted: false,
|
|
1056
|
+
clickedActions: [],
|
|
1057
|
+
completeConditions: [],
|
|
1058
|
+
onlyShowTaskConditions: []
|
|
1059
|
+
}
|
|
1060
|
+
]
|
|
1061
|
+
};
|
|
1062
|
+
const result = duplicateChecklistData(data);
|
|
1063
|
+
expect(result.items[0].name).toBe("Task 1");
|
|
1064
|
+
expect(result.items[0].description).toBe("A task description");
|
|
1065
|
+
expect(result.items[0].isCompleted).toBe(false);
|
|
1066
|
+
});
|
|
1067
|
+
});
|
|
1068
|
+
describe("duplicateLauncherData", () => {
|
|
1069
|
+
test("should return data as-is for null", () => {
|
|
1070
|
+
const result = duplicateLauncherData(null);
|
|
1071
|
+
expect(result).toBeNull();
|
|
1072
|
+
});
|
|
1073
|
+
test("should return data as-is for undefined", () => {
|
|
1074
|
+
const result = duplicateLauncherData(void 0);
|
|
1075
|
+
expect(result).toBeUndefined();
|
|
1076
|
+
});
|
|
1077
|
+
test("should return data as-is for non-object", () => {
|
|
1078
|
+
const result = duplicateLauncherData("string");
|
|
1079
|
+
expect(result).toBe("string");
|
|
1080
|
+
});
|
|
1081
|
+
test("should return data as-is for number", () => {
|
|
1082
|
+
const result = duplicateLauncherData(123);
|
|
1083
|
+
expect(result).toBe(123);
|
|
1084
|
+
});
|
|
1085
|
+
test("should regenerate behavior.actions IDs", () => {
|
|
1086
|
+
var _a;
|
|
1087
|
+
const data = {
|
|
1088
|
+
behavior: {
|
|
1089
|
+
actions: [{ id: "action-1", type: "test", operators: "and", data: {} }]
|
|
1090
|
+
}
|
|
1091
|
+
};
|
|
1092
|
+
const result = duplicateLauncherData(data);
|
|
1093
|
+
expect((_a = result.behavior) == null ? void 0 : _a.actions[0].id).toBe("regenerated-action-1");
|
|
1094
|
+
});
|
|
1095
|
+
test("should handle behavior without actions", () => {
|
|
1096
|
+
var _a, _b;
|
|
1097
|
+
const data = {
|
|
1098
|
+
behavior: {
|
|
1099
|
+
behaviorType: "click"
|
|
1100
|
+
}
|
|
1101
|
+
};
|
|
1102
|
+
const result = duplicateLauncherData(data);
|
|
1103
|
+
expect((_a = result.behavior) == null ? void 0 : _a.behaviorType).toBe("click");
|
|
1104
|
+
expect((_b = result.behavior) == null ? void 0 : _b.actions).toBeUndefined();
|
|
1105
|
+
});
|
|
1106
|
+
test("should handle behavior with non-array actions", () => {
|
|
1107
|
+
var _a;
|
|
1108
|
+
const data = {
|
|
1109
|
+
behavior: {
|
|
1110
|
+
actions: "not-an-array"
|
|
1111
|
+
}
|
|
1112
|
+
};
|
|
1113
|
+
const result = duplicateLauncherData(data);
|
|
1114
|
+
expect((_a = result.behavior) == null ? void 0 : _a.actions).toBe("not-an-array");
|
|
1115
|
+
});
|
|
1116
|
+
test("should process tooltip.content with question elements", () => {
|
|
1117
|
+
var _a, _b;
|
|
1118
|
+
const questionElement = {
|
|
1119
|
+
type: import_types4.ContentEditorElementType.NPS,
|
|
1120
|
+
data: { name: "NPS Question", cvid: "old-cvid" }
|
|
1121
|
+
};
|
|
1122
|
+
const data = {
|
|
1123
|
+
tooltip: {
|
|
1124
|
+
content: [
|
|
1125
|
+
{
|
|
1126
|
+
type: "root",
|
|
1127
|
+
children: [
|
|
1128
|
+
{
|
|
1129
|
+
type: "column",
|
|
1130
|
+
children: [
|
|
1131
|
+
{
|
|
1132
|
+
type: "element",
|
|
1133
|
+
element: questionElement
|
|
1134
|
+
}
|
|
1135
|
+
]
|
|
1136
|
+
}
|
|
1137
|
+
]
|
|
1138
|
+
}
|
|
1139
|
+
]
|
|
1140
|
+
}
|
|
1141
|
+
};
|
|
1142
|
+
const result = duplicateLauncherData(data);
|
|
1143
|
+
const processedElement = (_b = (_a = result.tooltip) == null ? void 0 : _a.content) == null ? void 0 : _b[0].children[0].children[0].element;
|
|
1144
|
+
expect(processedElement.data.cvid).toBe("mock-cuid");
|
|
1145
|
+
});
|
|
1146
|
+
test("should handle data without behavior", () => {
|
|
1147
|
+
var _a;
|
|
1148
|
+
const data = {
|
|
1149
|
+
tooltip: {
|
|
1150
|
+
content: []
|
|
1151
|
+
}
|
|
1152
|
+
};
|
|
1153
|
+
const result = duplicateLauncherData(data);
|
|
1154
|
+
expect(result.behavior).toBeUndefined();
|
|
1155
|
+
expect((_a = result.tooltip) == null ? void 0 : _a.content).toEqual([]);
|
|
1156
|
+
});
|
|
1157
|
+
test("should handle data without tooltip", () => {
|
|
1158
|
+
var _a;
|
|
1159
|
+
const data = {
|
|
1160
|
+
behavior: {
|
|
1161
|
+
actions: [{ id: "action-1", type: "test", operators: "and", data: {} }]
|
|
1162
|
+
}
|
|
1163
|
+
};
|
|
1164
|
+
const result = duplicateLauncherData(data);
|
|
1165
|
+
expect(result.tooltip).toBeUndefined();
|
|
1166
|
+
expect((_a = result.behavior) == null ? void 0 : _a.actions[0].id).toBe("regenerated-action-1");
|
|
1167
|
+
});
|
|
1168
|
+
test("should handle both behavior and tooltip", () => {
|
|
1169
|
+
var _a, _b, _c;
|
|
1170
|
+
const questionElement = {
|
|
1171
|
+
type: import_types4.ContentEditorElementType.NPS,
|
|
1172
|
+
data: { name: "NPS Question", cvid: "old-cvid" }
|
|
1173
|
+
};
|
|
1174
|
+
const data = {
|
|
1175
|
+
behavior: {
|
|
1176
|
+
actions: [{ id: "action-1", type: "test", operators: "and", data: {} }]
|
|
1177
|
+
},
|
|
1178
|
+
tooltip: {
|
|
1179
|
+
content: [
|
|
1180
|
+
{
|
|
1181
|
+
type: "root",
|
|
1182
|
+
children: [
|
|
1183
|
+
{
|
|
1184
|
+
type: "column",
|
|
1185
|
+
children: [
|
|
1186
|
+
{
|
|
1187
|
+
type: "element",
|
|
1188
|
+
element: questionElement
|
|
1189
|
+
}
|
|
1190
|
+
]
|
|
1191
|
+
}
|
|
1192
|
+
]
|
|
1193
|
+
}
|
|
1194
|
+
]
|
|
1195
|
+
}
|
|
1196
|
+
};
|
|
1197
|
+
const result = duplicateLauncherData(data);
|
|
1198
|
+
expect((_a = result.behavior) == null ? void 0 : _a.actions[0].id).toBe("regenerated-action-1");
|
|
1199
|
+
const processedElement = (_c = (_b = result.tooltip) == null ? void 0 : _b.content) == null ? void 0 : _c[0].children[0].children[0].element;
|
|
1200
|
+
expect(processedElement.data.cvid).toBe("mock-cuid");
|
|
1201
|
+
});
|
|
1202
|
+
test("should preserve other data properties", () => {
|
|
1203
|
+
const data = {
|
|
1204
|
+
customProperty: "value",
|
|
1205
|
+
behavior: {
|
|
1206
|
+
actions: []
|
|
1207
|
+
}
|
|
1208
|
+
};
|
|
1209
|
+
const result = duplicateLauncherData(data);
|
|
1210
|
+
expect(result.customProperty).toBe("value");
|
|
1211
|
+
});
|
|
880
1212
|
});
|
|
881
1213
|
describe("duplicateConfig", () => {
|
|
882
1214
|
test("should return config as-is for null", () => {
|
|
@@ -911,6 +1243,57 @@ describe("duplicateConfig", () => {
|
|
|
911
1243
|
expect(result.autoStartRules).toBeUndefined();
|
|
912
1244
|
expect(result.hideRules).toBeUndefined();
|
|
913
1245
|
});
|
|
1246
|
+
test("should handle config with both autoStartRules and hideRules", () => {
|
|
1247
|
+
var _a, _b;
|
|
1248
|
+
const config = {
|
|
1249
|
+
autoStartRules: [{ id: "auto-rule-1", type: "test", operators: "and", data: {} }],
|
|
1250
|
+
hideRules: [{ id: "hide-rule-1", type: "test", operators: "and", data: {} }]
|
|
1251
|
+
};
|
|
1252
|
+
const result = duplicateConfig(config);
|
|
1253
|
+
expect((_a = result.autoStartRules) == null ? void 0 : _a[0].id).toBe("regenerated-auto-rule-1");
|
|
1254
|
+
expect((_b = result.hideRules) == null ? void 0 : _b[0].id).toBe("regenerated-hide-rule-1");
|
|
1255
|
+
});
|
|
1256
|
+
test("should handle config with empty rules arrays", () => {
|
|
1257
|
+
const config = {
|
|
1258
|
+
autoStartRules: [],
|
|
1259
|
+
hideRules: []
|
|
1260
|
+
};
|
|
1261
|
+
const result = duplicateConfig(config);
|
|
1262
|
+
expect(result.autoStartRules).toEqual([]);
|
|
1263
|
+
expect(result.hideRules).toEqual([]);
|
|
1264
|
+
});
|
|
1265
|
+
test("should preserve other config properties", () => {
|
|
1266
|
+
const config = {
|
|
1267
|
+
autoStartRules: [{ id: "rule-1", type: "test", operators: "and", data: {} }],
|
|
1268
|
+
frequency: "once",
|
|
1269
|
+
dismissible: true,
|
|
1270
|
+
priority: 100
|
|
1271
|
+
};
|
|
1272
|
+
const result = duplicateConfig(config);
|
|
1273
|
+
expect(result.frequency).toBe("once");
|
|
1274
|
+
expect(result.dismissible).toBe(true);
|
|
1275
|
+
expect(result.priority).toBe(100);
|
|
1276
|
+
});
|
|
1277
|
+
test("should handle config with multiple rules in arrays", () => {
|
|
1278
|
+
var _a, _b, _c, _d;
|
|
1279
|
+
const config = {
|
|
1280
|
+
autoStartRules: [
|
|
1281
|
+
{ id: "rule-1", type: "test1", operators: "and", data: {} },
|
|
1282
|
+
{ id: "rule-2", type: "test2", operators: "or", data: {} }
|
|
1283
|
+
],
|
|
1284
|
+
hideRules: [
|
|
1285
|
+
{ id: "rule-3", type: "test3", operators: "and", data: {} },
|
|
1286
|
+
{ id: "rule-4", type: "test4", operators: "or", data: {} }
|
|
1287
|
+
]
|
|
1288
|
+
};
|
|
1289
|
+
const result = duplicateConfig(config);
|
|
1290
|
+
expect(result.autoStartRules).toHaveLength(2);
|
|
1291
|
+
expect(result.hideRules).toHaveLength(2);
|
|
1292
|
+
expect((_a = result.autoStartRules) == null ? void 0 : _a[0].id).toBe("regenerated-rule-1");
|
|
1293
|
+
expect((_b = result.autoStartRules) == null ? void 0 : _b[1].id).toBe("regenerated-rule-2");
|
|
1294
|
+
expect((_c = result.hideRules) == null ? void 0 : _c[0].id).toBe("regenerated-rule-3");
|
|
1295
|
+
expect((_d = result.hideRules) == null ? void 0 : _d[1].id).toBe("regenerated-rule-4");
|
|
1296
|
+
});
|
|
914
1297
|
});
|
|
915
1298
|
describe("duplicateData", () => {
|
|
916
1299
|
test("should process checklist data for CHECKLIST content type", () => {
|
|
@@ -927,106 +1310,198 @@ describe("duplicateData", () => {
|
|
|
927
1310
|
const result = duplicateData(data, import_types4.ContentDataType.CHECKLIST);
|
|
928
1311
|
expect(result.items[0].id).toBe("mock-uuid");
|
|
929
1312
|
});
|
|
930
|
-
test("should
|
|
1313
|
+
test("should process launcher data for LAUNCHER content type", () => {
|
|
1314
|
+
var _a;
|
|
1315
|
+
const data = {
|
|
1316
|
+
behavior: {
|
|
1317
|
+
actions: [{ id: "action-1", type: "test", operators: "and", data: {} }]
|
|
1318
|
+
}
|
|
1319
|
+
};
|
|
1320
|
+
const result = duplicateData(data, import_types4.ContentDataType.LAUNCHER);
|
|
1321
|
+
expect((_a = result.behavior) == null ? void 0 : _a.actions[0].id).toBe("regenerated-action-1");
|
|
1322
|
+
});
|
|
1323
|
+
test("should return data as-is for FLOW content type", () => {
|
|
931
1324
|
const data = { someData: "value" };
|
|
932
1325
|
const result = duplicateData(data, "flow");
|
|
933
1326
|
expect(result).toEqual(data);
|
|
934
1327
|
});
|
|
1328
|
+
test("should return data as-is for unknown content type", () => {
|
|
1329
|
+
const data = { someData: "value" };
|
|
1330
|
+
const result = duplicateData(data, "unknown-type");
|
|
1331
|
+
expect(result).toEqual(data);
|
|
1332
|
+
});
|
|
1333
|
+
test("should return null data as-is", () => {
|
|
1334
|
+
const result = duplicateData(null, import_types4.ContentDataType.CHECKLIST);
|
|
1335
|
+
expect(result).toBeNull();
|
|
1336
|
+
});
|
|
1337
|
+
test("should return undefined data as-is", () => {
|
|
1338
|
+
const result = duplicateData(void 0, import_types4.ContentDataType.LAUNCHER);
|
|
1339
|
+
expect(result).toBeUndefined();
|
|
1340
|
+
});
|
|
935
1341
|
});
|
|
936
|
-
describe("
|
|
937
|
-
test("should
|
|
938
|
-
const
|
|
939
|
-
id: "step-
|
|
940
|
-
cvid: "cvid
|
|
941
|
-
name: "
|
|
1342
|
+
describe("duplicateStep", () => {
|
|
1343
|
+
test("should remove id, createdAt, updatedAt, versionId fields but preserve cvid", () => {
|
|
1344
|
+
const step = {
|
|
1345
|
+
id: "step-id",
|
|
1346
|
+
cvid: "step-cvid",
|
|
1347
|
+
name: "Test Step",
|
|
942
1348
|
sequence: 0,
|
|
943
|
-
|
|
1349
|
+
createdAt: /* @__PURE__ */ new Date("2024-01-01"),
|
|
1350
|
+
updatedAt: /* @__PURE__ */ new Date("2024-01-02"),
|
|
1351
|
+
versionId: "version-id",
|
|
944
1352
|
data: [],
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
updatedAt: /* @__PURE__ */ new Date()
|
|
1353
|
+
trigger: [],
|
|
1354
|
+
target: void 0
|
|
948
1355
|
};
|
|
949
|
-
const result =
|
|
950
|
-
expect(result.name).toBe("Original Step (copy)");
|
|
951
|
-
expect(result.sequence).toBe(1);
|
|
1356
|
+
const result = duplicateStep(step);
|
|
952
1357
|
expect(result).not.toHaveProperty("id");
|
|
953
|
-
expect(result).
|
|
1358
|
+
expect(result).toHaveProperty("cvid");
|
|
1359
|
+
expect(result.cvid).toBe("step-cvid");
|
|
954
1360
|
expect(result).not.toHaveProperty("createdAt");
|
|
955
1361
|
expect(result).not.toHaveProperty("updatedAt");
|
|
1362
|
+
expect(result).not.toHaveProperty("versionId");
|
|
1363
|
+
});
|
|
1364
|
+
test("should preserve name and sequence", () => {
|
|
1365
|
+
const step = {
|
|
1366
|
+
id: "step-id",
|
|
1367
|
+
cvid: "step-cvid",
|
|
1368
|
+
name: "Test Step",
|
|
1369
|
+
sequence: 5,
|
|
1370
|
+
data: [],
|
|
1371
|
+
trigger: [],
|
|
1372
|
+
target: void 0
|
|
1373
|
+
};
|
|
1374
|
+
const result = duplicateStep(step);
|
|
1375
|
+
expect(result.name).toBe("Test Step");
|
|
1376
|
+
expect(result.sequence).toBe(5);
|
|
956
1377
|
});
|
|
957
|
-
test("should
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
name: "
|
|
1378
|
+
test("should process data field with question elements", () => {
|
|
1379
|
+
var _a;
|
|
1380
|
+
const questionElement = {
|
|
1381
|
+
type: import_types4.ContentEditorElementType.NPS,
|
|
1382
|
+
data: { name: "NPS Question", cvid: "old-cvid" }
|
|
1383
|
+
};
|
|
1384
|
+
const step = {
|
|
1385
|
+
id: "step-id",
|
|
1386
|
+
cvid: "step-cvid",
|
|
1387
|
+
name: "Test Step",
|
|
962
1388
|
sequence: 0,
|
|
1389
|
+
data: [
|
|
1390
|
+
{
|
|
1391
|
+
type: "root",
|
|
1392
|
+
children: [
|
|
1393
|
+
{
|
|
1394
|
+
type: "column",
|
|
1395
|
+
children: [
|
|
1396
|
+
{
|
|
1397
|
+
type: "element",
|
|
1398
|
+
element: questionElement
|
|
1399
|
+
}
|
|
1400
|
+
]
|
|
1401
|
+
}
|
|
1402
|
+
]
|
|
1403
|
+
}
|
|
1404
|
+
],
|
|
963
1405
|
trigger: [],
|
|
964
|
-
data: [],
|
|
965
1406
|
target: void 0
|
|
966
1407
|
};
|
|
967
|
-
const result =
|
|
968
|
-
|
|
1408
|
+
const result = duplicateStep(step);
|
|
1409
|
+
const processedElement = (_a = result.data) == null ? void 0 : _a[0].children[0].children[0].element;
|
|
1410
|
+
expect(processedElement.data.cvid).toBe("mock-cuid");
|
|
969
1411
|
});
|
|
970
|
-
test("should process
|
|
971
|
-
var _a;
|
|
972
|
-
const
|
|
973
|
-
id: "step-
|
|
974
|
-
cvid: "cvid
|
|
975
|
-
name: "Step",
|
|
1412
|
+
test("should process trigger field", () => {
|
|
1413
|
+
var _a, _b, _c;
|
|
1414
|
+
const step = {
|
|
1415
|
+
id: "step-id",
|
|
1416
|
+
cvid: "step-cvid",
|
|
1417
|
+
name: "Test Step",
|
|
976
1418
|
sequence: 0,
|
|
1419
|
+
data: [],
|
|
977
1420
|
trigger: [
|
|
978
1421
|
{
|
|
979
1422
|
id: "trigger-1",
|
|
980
1423
|
actions: [{ id: "action-1", type: "test", operators: "and", data: {} }],
|
|
981
|
-
conditions: []
|
|
1424
|
+
conditions: [{ id: "condition-1", type: "test", operators: "and", data: {} }]
|
|
982
1425
|
}
|
|
983
1426
|
],
|
|
984
|
-
data: [],
|
|
985
1427
|
target: void 0
|
|
986
1428
|
};
|
|
987
|
-
const result =
|
|
1429
|
+
const result = duplicateStep(step);
|
|
988
1430
|
expect((_a = result.trigger) == null ? void 0 : _a[0].id).toBe("mock-cuid");
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
1431
|
+
expect((_b = result.trigger) == null ? void 0 : _b[0].actions[0].id).toBe("regenerated-action-1");
|
|
1432
|
+
expect((_c = result.trigger) == null ? void 0 : _c[0].conditions[0].id).toBe("regenerated-condition-1");
|
|
1433
|
+
});
|
|
1434
|
+
test("should process target field with actions", () => {
|
|
1435
|
+
var _a, _b, _c;
|
|
1436
|
+
const step = {
|
|
1437
|
+
id: "step-id",
|
|
1438
|
+
cvid: "step-cvid",
|
|
1439
|
+
name: "Test Step",
|
|
996
1440
|
sequence: 0,
|
|
997
|
-
trigger: [],
|
|
998
1441
|
data: [],
|
|
1442
|
+
trigger: [],
|
|
999
1443
|
target: {
|
|
1444
|
+
selector: ".test",
|
|
1000
1445
|
actions: [{ id: "action-1", type: "test", operators: "and", data: {} }]
|
|
1001
1446
|
}
|
|
1002
1447
|
};
|
|
1003
|
-
const result =
|
|
1448
|
+
const result = duplicateStep(step);
|
|
1004
1449
|
expect((_b = (_a = result.target) == null ? void 0 : _a.actions) == null ? void 0 : _b[0].id).toBe("regenerated-action-1");
|
|
1450
|
+
expect((_c = result.target) == null ? void 0 : _c.selector).toBe(".test");
|
|
1005
1451
|
});
|
|
1006
|
-
test("should
|
|
1007
|
-
const
|
|
1008
|
-
id: "step-
|
|
1009
|
-
cvid: "cvid
|
|
1010
|
-
name: "Step",
|
|
1452
|
+
test("should return empty array for undefined data", () => {
|
|
1453
|
+
const step = {
|
|
1454
|
+
id: "step-id",
|
|
1455
|
+
cvid: "step-cvid",
|
|
1456
|
+
name: "Test Step",
|
|
1457
|
+
sequence: 0,
|
|
1458
|
+
data: void 0,
|
|
1459
|
+
trigger: [],
|
|
1460
|
+
target: void 0
|
|
1461
|
+
};
|
|
1462
|
+
const result = duplicateStep(step);
|
|
1463
|
+
expect(result.data).toEqual([]);
|
|
1464
|
+
});
|
|
1465
|
+
test("should return empty array for undefined trigger", () => {
|
|
1466
|
+
const step = {
|
|
1467
|
+
id: "step-id",
|
|
1468
|
+
cvid: "step-cvid",
|
|
1469
|
+
name: "Test Step",
|
|
1011
1470
|
sequence: 0,
|
|
1012
|
-
trigger: void 0,
|
|
1013
1471
|
data: [],
|
|
1472
|
+
trigger: void 0,
|
|
1014
1473
|
target: void 0
|
|
1015
1474
|
};
|
|
1016
|
-
const result =
|
|
1475
|
+
const result = duplicateStep(step);
|
|
1017
1476
|
expect(result.trigger).toEqual([]);
|
|
1018
1477
|
});
|
|
1019
|
-
test("should
|
|
1020
|
-
const
|
|
1021
|
-
id: "step-
|
|
1022
|
-
cvid: "cvid
|
|
1023
|
-
name: "Step",
|
|
1478
|
+
test("should return undefined for undefined target", () => {
|
|
1479
|
+
const step = {
|
|
1480
|
+
id: "step-id",
|
|
1481
|
+
cvid: "step-cvid",
|
|
1482
|
+
name: "Test Step",
|
|
1024
1483
|
sequence: 0,
|
|
1484
|
+
data: [],
|
|
1025
1485
|
trigger: [],
|
|
1026
|
-
data: void 0,
|
|
1027
1486
|
target: void 0
|
|
1028
1487
|
};
|
|
1029
|
-
const result =
|
|
1030
|
-
expect(result.
|
|
1488
|
+
const result = duplicateStep(step);
|
|
1489
|
+
expect(result.target).toBeUndefined();
|
|
1490
|
+
});
|
|
1491
|
+
test("should preserve custom properties", () => {
|
|
1492
|
+
const step = {
|
|
1493
|
+
id: "step-id",
|
|
1494
|
+
cvid: "step-cvid",
|
|
1495
|
+
name: "Test Step",
|
|
1496
|
+
sequence: 0,
|
|
1497
|
+
data: [],
|
|
1498
|
+
trigger: [],
|
|
1499
|
+
target: void 0,
|
|
1500
|
+
customField: "custom-value",
|
|
1501
|
+
anotherField: 123
|
|
1502
|
+
};
|
|
1503
|
+
const result = duplicateStep(step);
|
|
1504
|
+
expect(result.customField).toBe("custom-value");
|
|
1505
|
+
expect(result.anotherField).toBe(123);
|
|
1031
1506
|
});
|
|
1032
1507
|
});
|