@darkpos/pricing 1.0.66 → 1.0.68

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.
@@ -356,11 +356,12 @@ describe('getModifierTags Function', () => {
356
356
 
357
357
  const result = pricingServiceGroupModifiers.item.getModifierTags({ item });
358
358
 
359
- expect(result).toHaveLength(2);
360
- expect(result[0].label.replace(/\s/g, '')).toEqual(
359
+ expect(result).toHaveLength(3);
360
+ expect(result[0].label.replace(/\s/g, '')).toEqual('1White');
361
+ expect(result[1].label.replace(/\s/g, '')).toEqual(
361
362
  '1CRC5.10discount(-CRC5.10)'
362
363
  );
363
- expect(result[1].label.replace(/\s/g, '')).toEqual(
364
+ expect(result[2].label.replace(/\s/g, '')).toEqual(
364
365
  '1CRC37.50discount(-CRC37.50)'
365
366
  );
366
367
  });
@@ -1,6 +1,11 @@
1
1
  const usePricing = require('../index');
2
+ const mockStores = require('./mocks/stores');
2
3
 
3
- const pricingService = usePricing();
4
+ const session = {
5
+ store: mockStores[0],
6
+ };
7
+
8
+ const pricingService = usePricing(session);
4
9
 
5
10
  describe('Item actions', () => {
6
11
  test('Get calculated Item: included: false && direct: false', () => {
@@ -856,4 +861,448 @@ describe('Item actions', () => {
856
861
  _actual: 135,
857
862
  });
858
863
  });
864
+
865
+ test('Remove Item', () => {
866
+ const item1 = {
867
+ _id: '1',
868
+ };
869
+ const item2 = {
870
+ _id: '2',
871
+ };
872
+
873
+ const order = {
874
+ items: [item1, item2],
875
+ };
876
+ const result = pricingService.order.removeItem({ order, item: item2 });
877
+
878
+ expect(result.items).toMatchObject([{ _id: '1' }]);
879
+ });
880
+
881
+ test('Remove related Item', () => {
882
+ const item1 = {
883
+ _id: '1',
884
+ itemId: 'a',
885
+ };
886
+ const item2 = {
887
+ _id: '2',
888
+ };
889
+ const item3 = {
890
+ _id: '3',
891
+ properties: {
892
+ relatedItem: true,
893
+ parentId: item1._id,
894
+ parentItemId: item1.itemId,
895
+ },
896
+ };
897
+
898
+ const order = {
899
+ items: [item1, item2, item3],
900
+ };
901
+ const result = pricingService.order.removeItem({ order, item: item3 });
902
+
903
+ expect(result.items).toMatchObject([
904
+ {
905
+ _id: '1',
906
+ },
907
+ {
908
+ _id: '2',
909
+ },
910
+ ]);
911
+ });
912
+
913
+ test('Remove parent Item having 1 related item', () => {
914
+ const item1 = {
915
+ _id: '1',
916
+ itemId: 'a',
917
+ };
918
+ const item2 = {
919
+ _id: '2',
920
+ };
921
+ const item3 = {
922
+ _id: '3',
923
+ properties: {
924
+ relatedItem: true,
925
+ parentId: item1._id,
926
+ parentItemId: item1.itemId,
927
+ },
928
+ };
929
+
930
+ const order = {
931
+ items: [item1, item2, item3],
932
+ };
933
+ const result = pricingService.order.removeItem({ order, item: item1 });
934
+
935
+ expect(result.items).toMatchObject([
936
+ {
937
+ _id: '2',
938
+ },
939
+ ]);
940
+ });
941
+
942
+ test('Remove parent Item, having more than 1 related item', () => {
943
+ const item1 = {
944
+ _id: '1',
945
+ itemId: 'a',
946
+ };
947
+ const item2 = {
948
+ _id: '2',
949
+ };
950
+ const item3 = {
951
+ _id: '3',
952
+ properties: {
953
+ relatedItem: true,
954
+ parentId: item1._id,
955
+ parentItemId: item1.itemId,
956
+ },
957
+ };
958
+ const item4 = {
959
+ _id: '4',
960
+ properties: {
961
+ relatedItem: true,
962
+ parentId: item1._id,
963
+ parentItemId: item1.itemId,
964
+ },
965
+ };
966
+
967
+ const order = {
968
+ items: [item1, item2, item3, item4],
969
+ };
970
+ const result = pricingService.order.removeItem({ order, item: item1 });
971
+
972
+ expect(result.items).toMatchObject([
973
+ {
974
+ _id: '2',
975
+ },
976
+ ]);
977
+ });
978
+
979
+ test('Remove related Item, having nested related items', () => {
980
+ const item1 = {
981
+ _id: '1',
982
+ itemId: 'a',
983
+ };
984
+ const item2 = {
985
+ _id: '2',
986
+ };
987
+ const item3 = {
988
+ _id: '3',
989
+ properties: {
990
+ relatedItem: true,
991
+ parentId: item1._id,
992
+ parentItemId: item1.itemId,
993
+ },
994
+ };
995
+ const item4 = {
996
+ _id: '4',
997
+ itemId: 'd',
998
+ properties: {
999
+ relatedItem: true,
1000
+ parentId: item1._id,
1001
+ parentItemId: item1.itemId,
1002
+ },
1003
+ };
1004
+
1005
+ const nestedItem5 = {
1006
+ _id: '5',
1007
+ properties: {
1008
+ relatedItem: true,
1009
+ parentId: item4._id,
1010
+ parentItemId: item4.itemId,
1011
+ },
1012
+ };
1013
+
1014
+ const order = {
1015
+ items: [item1, item2, item3, item4, nestedItem5],
1016
+ };
1017
+ const result = pricingService.order.removeItem({
1018
+ order,
1019
+ item: nestedItem5,
1020
+ });
1021
+
1022
+ expect(result.items).toMatchObject([item1, item2, item3, item4]);
1023
+ });
1024
+
1025
+ test('Remove related Item, having nested related items 2', () => {
1026
+ const item1 = {
1027
+ _id: '1',
1028
+ itemId: 'a',
1029
+ };
1030
+ const item2 = {
1031
+ _id: '2',
1032
+ };
1033
+ const item3 = {
1034
+ _id: '3',
1035
+ properties: {
1036
+ relatedItem: true,
1037
+ parentId: item1._id,
1038
+ parentItemId: item1.itemId,
1039
+ },
1040
+ };
1041
+ const item4 = {
1042
+ _id: '4',
1043
+ itemId: 'd',
1044
+ properties: {
1045
+ relatedItem: true,
1046
+ parentId: item1._id,
1047
+ parentItemId: item1.itemId,
1048
+ },
1049
+ };
1050
+
1051
+ const nestedItem5 = {
1052
+ _id: '5',
1053
+ properties: {
1054
+ relatedItem: true,
1055
+ parentId: item4._id,
1056
+ parentItemId: item4.itemId,
1057
+ },
1058
+ };
1059
+
1060
+ const nestedItem6 = {
1061
+ _id: '6',
1062
+ properties: {
1063
+ relatedItem: true,
1064
+ parentId: item4._id,
1065
+ parentItemId: item4.itemId,
1066
+ },
1067
+ };
1068
+
1069
+ const order = {
1070
+ items: [item1, item2, item3, item4, nestedItem5, nestedItem6],
1071
+ };
1072
+ const result = pricingService.order.removeItem({
1073
+ order,
1074
+ item: nestedItem5,
1075
+ });
1076
+
1077
+ expect(result.items).toMatchObject([
1078
+ item1,
1079
+ item2,
1080
+ item3,
1081
+ item4,
1082
+ nestedItem6,
1083
+ ]);
1084
+ });
1085
+
1086
+ test('Remove parent related Item, having nested related items', () => {
1087
+ const item1 = {
1088
+ _id: '1',
1089
+ itemId: 'a',
1090
+ };
1091
+ const item2 = {
1092
+ _id: '2',
1093
+ };
1094
+ const item3 = {
1095
+ _id: '3',
1096
+ properties: {
1097
+ relatedItem: true,
1098
+ parentId: item1._id,
1099
+ parentItemId: item1.itemId,
1100
+ },
1101
+ };
1102
+ const item4 = {
1103
+ _id: '4',
1104
+ itemId: 'd',
1105
+ properties: {
1106
+ relatedItem: true,
1107
+ parentId: item1._id,
1108
+ parentItemId: item1.itemId,
1109
+ },
1110
+ };
1111
+
1112
+ const nestedItem5 = {
1113
+ _id: '5',
1114
+ properties: {
1115
+ relatedItem: true,
1116
+ parentId: item4._id,
1117
+ parentItemId: item4.itemId,
1118
+ },
1119
+ };
1120
+
1121
+ const nestedItem6 = {
1122
+ _id: '6',
1123
+ properties: {
1124
+ relatedItem: true,
1125
+ parentId: item4._id,
1126
+ parentItemId: item4.itemId,
1127
+ },
1128
+ };
1129
+
1130
+ const order = {
1131
+ items: [item1, item2, item3, item4, nestedItem5, nestedItem6],
1132
+ };
1133
+ const result = pricingService.order.removeItem({ order, item: item1 });
1134
+
1135
+ expect(result.items).toMatchObject([item2]);
1136
+ });
1137
+
1138
+ test('Should add related item and its related addModifiers to the parent item, then removing that relateditem should also remove the mod from the parent item', () => {
1139
+ const rawRelatedItem1 = {
1140
+ name: 'the related item',
1141
+
1142
+ _id: '67e2cadd8dcf08ebcc5ef888',
1143
+ };
1144
+
1145
+ const rawRelatedItem2 = {
1146
+ name: 'the 2nd related item',
1147
+ _id: '67e2cadd8dcf08ebcc5ef88a',
1148
+ };
1149
+
1150
+ const groupMod = {
1151
+ _id: '67e2cadd8dcf08ebcc5ef889',
1152
+ name: 'General Repair Department',
1153
+ attributes: ['group'],
1154
+ modifierId: 'mod1',
1155
+ properties: {
1156
+ group: {
1157
+ items: [rawRelatedItem1, rawRelatedItem2],
1158
+ },
1159
+ },
1160
+ };
1161
+
1162
+ const parentItem = {
1163
+ name: 'the parent item',
1164
+ modifiers: [groupMod],
1165
+ _id: '67e2cadd8dcf08ebcc5ef887',
1166
+ __typename: 'OrderItem',
1167
+ properties: {
1168
+ basePrice: 100,
1169
+ },
1170
+ };
1171
+
1172
+ const relatedItem1 = {
1173
+ ...rawRelatedItem1,
1174
+ properties: {
1175
+ relatedItem: true,
1176
+ parentId: parentItem._id,
1177
+ includeParent: true,
1178
+ addModifiers: [groupMod],
1179
+ relatedItemId: rawRelatedItem1._id,
1180
+ },
1181
+ __typename: 'OrderItem',
1182
+ };
1183
+
1184
+ const relatedItem2 = {
1185
+ ...rawRelatedItem2,
1186
+ properties: {
1187
+ relatedItem: true,
1188
+ parentId: parentItem._id,
1189
+ includeParent: true,
1190
+ addModifiers: [groupMod],
1191
+ relatedItemId: rawRelatedItem2._id,
1192
+ },
1193
+ __typename: 'OrderItem',
1194
+ };
1195
+ const order = {
1196
+ items: [parentItem, relatedItem1, relatedItem2],
1197
+ };
1198
+
1199
+ const result = pricingService.order.removeItem({
1200
+ order,
1201
+ item: relatedItem2,
1202
+ });
1203
+
1204
+ expect(result.items.length).toBe(2);
1205
+ expect(result.items[0].modifiers.length).toBe(1);
1206
+ expect(result.items[0].modifiers[0].modifierId).toBe('mod1');
1207
+
1208
+ const result2 = pricingService.order.removeItem({
1209
+ order: result,
1210
+ item: relatedItem1,
1211
+ });
1212
+
1213
+ expect(result2.items.length).toBe(1);
1214
+ expect(result2.items[0].modifiers.length).toBe(0);
1215
+ });
1216
+
1217
+ test('Should not remove the group modifier if it still hasModifiers', () => {
1218
+ const rawRelatedItem1 = {
1219
+ name: 'the related item',
1220
+ _id: '67e2cadd8dcf08ebcc5ef888',
1221
+ };
1222
+
1223
+ const rawRelatedItem2 = {
1224
+ name: 'the 2nd related item',
1225
+ _id: '67e2cadd8dcf08ebcc5ef88a',
1226
+ };
1227
+
1228
+ const rawRelatedMod1 = {
1229
+ name: 'related modifier',
1230
+ _id: '123',
1231
+ modifierId: 'abc',
1232
+ addModifiers: [
1233
+ {
1234
+ _id: '67e2cadd8dcf08ebcc5ef889',
1235
+ name: 'General Repair Department',
1236
+ attributes: ['group'],
1237
+ modifierId: 'mod1',
1238
+ properties: {
1239
+ group: {
1240
+ items: [rawRelatedItem1, rawRelatedItem2],
1241
+ },
1242
+ },
1243
+ },
1244
+ ],
1245
+ };
1246
+
1247
+ const groupMod = {
1248
+ _id: '67e2cadd8dcf08ebcc5ef889',
1249
+ name: 'General Repair Department',
1250
+ attributes: ['group'],
1251
+ modifierId: 'mod1',
1252
+ properties: {
1253
+ group: {
1254
+ items: [rawRelatedItem1, rawRelatedItem2],
1255
+ modifiers: [rawRelatedMod1],
1256
+ },
1257
+ },
1258
+ };
1259
+
1260
+ const parentItem = {
1261
+ name: 'the parent item',
1262
+ modifiers: [groupMod, rawRelatedMod1],
1263
+ _id: '67e2cadd8dcf08ebcc5ef887',
1264
+ __typename: 'OrderItem',
1265
+ properties: {
1266
+ basePrice: 100,
1267
+ },
1268
+ };
1269
+
1270
+ const relatedItem1 = {
1271
+ ...rawRelatedItem1,
1272
+ properties: {
1273
+ relatedItem: true,
1274
+ parentId: parentItem._id,
1275
+ includeParent: true,
1276
+ addModifiers: [groupMod],
1277
+ relatedItemId: rawRelatedItem1._id,
1278
+ },
1279
+ __typename: 'OrderItem',
1280
+ };
1281
+
1282
+ const relatedItem2 = {
1283
+ ...rawRelatedItem2,
1284
+ properties: {
1285
+ relatedItem: true,
1286
+ parentId: parentItem._id,
1287
+ includeParent: true,
1288
+ addModifiers: [groupMod],
1289
+ relatedItemId: rawRelatedItem2._id,
1290
+ },
1291
+ __typename: 'OrderItem',
1292
+ };
1293
+ const order = {
1294
+ items: [parentItem, relatedItem1, relatedItem2],
1295
+ };
1296
+
1297
+ const newItem = pricingService.item.removeModifiers({
1298
+ item: parentItem,
1299
+ modifiers: [rawRelatedMod1],
1300
+ originalItem: parentItem,
1301
+ customer: undefined,
1302
+ order,
1303
+ });
1304
+
1305
+ expect(newItem.modifiers.length).toBe(1);
1306
+ expect(newItem.modifiers[0].name).toBe('General Repair Department');
1307
+ });
859
1308
  });