@contrail/cli 3.4.3 → 3.4.4-alpha.1

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.
Files changed (241) hide show
  1. package/README.md +38 -1
  2. package/bin/dev +0 -0
  3. package/bin/run +0 -0
  4. package/dist/__mocks__/@contrail/sdk.d.ts +123 -123
  5. package/dist/__mocks__/@contrail/sdk.js +716 -716
  6. package/dist/api/app-extension-deployments.d.ts +2 -2
  7. package/dist/api/app-extension-deployments.js +11 -11
  8. package/dist/api/app-extension-packages.d.ts +2 -2
  9. package/dist/api/app-extension-packages.js +11 -11
  10. package/dist/api/apps.d.ts +10 -10
  11. package/dist/api/apps.js +63 -63
  12. package/dist/api/event-workflow-action-definition.d.ts +3 -3
  13. package/dist/api/event-workflow-action-definition.js +18 -18
  14. package/dist/api/event-workflow-template-definition.d.ts +7 -7
  15. package/dist/api/event-workflow-template-definition.js +26 -26
  16. package/dist/api/event-workflow-templates.d.ts +8 -8
  17. package/dist/api/event-workflow-templates.js +32 -32
  18. package/dist/api/schedules.d.ts +7 -7
  19. package/dist/api/schedules.js +32 -32
  20. package/dist/api/types.d.ts +11 -11
  21. package/dist/api/types.js +79 -79
  22. package/dist/api/users.d.ts +2 -2
  23. package/dist/api/users.js +18 -18
  24. package/dist/api/webhooks.d.ts +4 -4
  25. package/dist/api/webhooks.js +16 -16
  26. package/dist/auth/login.d.ts +3 -3
  27. package/dist/auth/login.js +221 -221
  28. package/dist/auth/login.spec.d.ts +1 -1
  29. package/dist/auth/login.spec.js +10 -10
  30. package/dist/baseFlags.d.ts +10 -10
  31. package/dist/baseFlags.js +25 -25
  32. package/dist/basecommand.d.ts +15 -15
  33. package/dist/basecommand.js +83 -83
  34. package/dist/commands/app/create.d.ts +10 -10
  35. package/dist/commands/app/create.js +96 -96
  36. package/dist/commands/app/delete.d.ts +11 -11
  37. package/dist/commands/app/delete.js +40 -40
  38. package/dist/commands/app/extension/deploy.d.ts +18 -18
  39. package/dist/commands/app/extension/deploy.js +127 -127
  40. package/dist/commands/app/extension/deployment/list.d.ts +14 -14
  41. package/dist/commands/app/extension/deployment/list.js +82 -82
  42. package/dist/commands/app/getApiKey.d.ts +11 -11
  43. package/dist/commands/app/getApiKey.js +49 -49
  44. package/dist/commands/app/init.d.ts +10 -10
  45. package/dist/commands/app/init.js +67 -67
  46. package/dist/commands/app/install.d.ts +13 -13
  47. package/dist/commands/app/install.js +135 -135
  48. package/dist/commands/app/publish.d.ts +14 -14
  49. package/dist/commands/app/publish.js +69 -69
  50. package/dist/commands/app/uninstall.d.ts +12 -12
  51. package/dist/commands/app/uninstall.js +68 -68
  52. package/dist/commands/app/upgrade.d.ts +14 -14
  53. package/dist/commands/app/upgrade.js +108 -108
  54. package/dist/commands/app/version/major.d.ts +11 -11
  55. package/dist/commands/app/version/major.js +39 -39
  56. package/dist/commands/app/version/minor.d.ts +11 -11
  57. package/dist/commands/app/version/minor.js +39 -39
  58. package/dist/commands/app/version/patch.d.ts +11 -11
  59. package/dist/commands/app/version/patch.js +39 -39
  60. package/dist/commands/config/create.d.ts +12 -12
  61. package/dist/commands/config/create.js +27 -27
  62. package/dist/commands/config/describe.d.ts +14 -14
  63. package/dist/commands/config/describe.js +46 -46
  64. package/dist/commands/config/list.d.ts +11 -11
  65. package/dist/commands/config/list.js +38 -38
  66. package/dist/commands/config/set.d.ts +16 -16
  67. package/dist/commands/config/set.js +46 -46
  68. package/dist/commands/config/use.d.ts +14 -14
  69. package/dist/commands/config/use.js +47 -47
  70. package/dist/commands/file/upload.d.ts +15 -15
  71. package/dist/commands/file/upload.js +69 -69
  72. package/dist/commands/groups/export.d.ts +14 -14
  73. package/dist/commands/groups/export.js +103 -103
  74. package/dist/commands/groups/import.d.ts +14 -14
  75. package/dist/commands/groups/import.js +190 -190
  76. package/dist/commands/instance/export.d.ts +12 -12
  77. package/dist/commands/instance/export.js +36 -36
  78. package/dist/commands/instance/import.d.ts +11 -11
  79. package/dist/commands/instance/import.js +34 -34
  80. package/dist/commands/load/colors.d.ts +14 -14
  81. package/dist/commands/load/colors.js +53 -53
  82. package/dist/commands/load/custom-entity.d.ts +14 -14
  83. package/dist/commands/load/custom-entity.js +55 -55
  84. package/dist/commands/load/line-sheet.d.ts +14 -14
  85. package/dist/commands/load/line-sheet.js +55 -55
  86. package/dist/commands/load/upload-and-load.d.ts +14 -14
  87. package/dist/commands/load/upload-and-load.js +46 -46
  88. package/dist/commands/load-local/index.d.ts +17 -0
  89. package/dist/commands/load-local/index.js +156 -0
  90. package/dist/commands/projects/export.d.ts +13 -13
  91. package/dist/commands/projects/export.js +35 -35
  92. package/dist/commands/projects/list.d.ts +10 -10
  93. package/dist/commands/projects/list.js +36 -36
  94. package/dist/commands/projects/load.d.ts +25 -25
  95. package/dist/commands/projects/load.js +198 -198
  96. package/dist/commands/types/exportOptionSetHierarchies.d.ts +11 -11
  97. package/dist/commands/types/exportOptionSetHierarchies.js +133 -133
  98. package/dist/commands/types/getAll.d.ts +21 -21
  99. package/dist/commands/types/getAll.js +180 -180
  100. package/dist/commands/types/getOptionSets.d.ts +16 -16
  101. package/dist/commands/types/getOptionSets.js +170 -170
  102. package/dist/commands/types/loadAll.d.ts +12 -12
  103. package/dist/commands/types/loadAll.js +55 -55
  104. package/dist/commands/types/mergeOptionSets.d.ts +13 -13
  105. package/dist/commands/types/mergeOptionSets.js +116 -116
  106. package/dist/commands/types/mergeTypeProperties.d.ts +15 -15
  107. package/dist/commands/types/mergeTypeProperties.js +95 -95
  108. package/dist/commands/types/parseOptionSetsHierarchyLocalFile.d.ts +14 -14
  109. package/dist/commands/types/parseOptionSetsHierarchyLocalFile.js +133 -133
  110. package/dist/commands/types/parseOptionSetsHierarchyValuesToKeysLocalFile.d.ts +14 -14
  111. package/dist/commands/types/parseOptionSetsHierarchyValuesToKeysLocalFile.js +102 -102
  112. package/dist/commands/types/parseOptionSetsLocalFiles.d.ts +39 -39
  113. package/dist/commands/types/parseOptionSetsLocalFiles.js +229 -229
  114. package/dist/commands/types/parseOptionSetsToFolderStructure.d.ts +13 -13
  115. package/dist/commands/types/parseOptionSetsToFolderStructure.js +68 -68
  116. package/dist/commands/types/parseTypesFromFiles.d.ts +14 -14
  117. package/dist/commands/types/parseTypesFromFiles.js +40 -40
  118. package/dist/commands/types/parseTypesFromLocalFiles.d.ts +14 -14
  119. package/dist/commands/types/parseTypesFromLocalFiles.js +37 -37
  120. package/dist/commands/types/parseTypesFromTemplateAndDataFromLocalFiles.d.ts +15 -15
  121. package/dist/commands/types/parseTypesFromTemplateAndDataFromLocalFiles.js +39 -39
  122. package/dist/commands/types/parseTypesFromTemplateFromLocalFiles.d.ts +14 -14
  123. package/dist/commands/types/parseTypesFromTemplateFromLocalFiles.js +38 -38
  124. package/dist/commands/types/uploadOptionSetHierarchies.d.ts +12 -12
  125. package/dist/commands/types/uploadOptionSetHierarchies.js +257 -257
  126. package/dist/commands/types/uploadOptionSets.d.ts +13 -13
  127. package/dist/commands/types/uploadOptionSets.js +155 -155
  128. package/dist/commands/types/uploadOptionSetsHierarchyLocalFile.d.ts +15 -15
  129. package/dist/commands/types/uploadOptionSetsHierarchyLocalFile.js +135 -135
  130. package/dist/commands/types/uploadRuleSets.d.ts +12 -12
  131. package/dist/commands/types/uploadRuleSets.js +197 -197
  132. package/dist/commands/types/uploadTypePolicies.d.ts +12 -12
  133. package/dist/commands/types/uploadTypePolicies.js +233 -233
  134. package/dist/commands/types/uploadTypePropertyPolicies.d.ts +13 -13
  135. package/dist/commands/types/uploadTypePropertyPolicies.js +286 -286
  136. package/dist/commands/types/uploadTypes.d.ts +13 -13
  137. package/dist/commands/types/uploadTypes.js +35 -35
  138. package/dist/commands/types/uploadUsageInfo.d.ts +15 -15
  139. package/dist/commands/types/uploadUsageInfo.js +179 -179
  140. package/dist/commands/types/uploadUsageInfo.spec.d.ts +1 -1
  141. package/dist/commands/types/uploadUsageInfo.spec.js +249 -249
  142. package/dist/commands/users/export.d.ts +14 -14
  143. package/dist/commands/users/export.js +76 -76
  144. package/dist/commands/users/import.d.ts +14 -14
  145. package/dist/commands/users/import.js +68 -68
  146. package/dist/commands/webhooks/create.d.ts +11 -11
  147. package/dist/commands/webhooks/create.js +25 -25
  148. package/dist/commands/webhooks/delete.d.ts +14 -14
  149. package/dist/commands/webhooks/delete.js +53 -53
  150. package/dist/commands/webhooks/getWebhookTrigger.d.ts +13 -13
  151. package/dist/commands/webhooks/getWebhookTrigger.js +40 -40
  152. package/dist/commands/webhooks/list.d.ts +12 -12
  153. package/dist/commands/webhooks/list.js +31 -31
  154. package/dist/commands/workflow-template-definitions/install.d.ts +10 -10
  155. package/dist/commands/workflow-template-definitions/install.js +19 -19
  156. package/dist/commands/workflow-template-definitions/list.d.ts +10 -10
  157. package/dist/commands/workflow-template-definitions/list.js +19 -19
  158. package/dist/commands/workflow-templates/delete.d.ts +10 -10
  159. package/dist/commands/workflow-templates/delete.js +19 -19
  160. package/dist/commands/workflow-templates/export.d.ts +14 -14
  161. package/dist/commands/workflow-templates/export.js +78 -78
  162. package/dist/commands/workflow-templates/list.d.ts +10 -10
  163. package/dist/commands/workflow-templates/list.js +19 -19
  164. package/dist/commands/workflow-templates/load.d.ts +13 -13
  165. package/dist/commands/workflow-templates/load.js +26 -26
  166. package/dist/common.d.ts +4 -4
  167. package/dist/common.js +18 -18
  168. package/dist/helpers/app/actions-deployer.d.ts +11 -11
  169. package/dist/helpers/app/actions-deployer.js +123 -123
  170. package/dist/helpers/app/app-config-validators.d.ts +22 -22
  171. package/dist/helpers/app/app-config-validators.js +100 -100
  172. package/dist/helpers/app/app-config-validators.spec.d.ts +1 -1
  173. package/dist/helpers/app/app-config-validators.spec.js +310 -310
  174. package/dist/helpers/app/app-deployer.d.ts +12 -12
  175. package/dist/helpers/app/app-deployer.js +278 -278
  176. package/dist/helpers/app/app-template-parsers.d.ts +14 -14
  177. package/dist/helpers/app/app-template-parsers.js +106 -106
  178. package/dist/helpers/app/extension-package-deployer.d.ts +7 -7
  179. package/dist/helpers/app/extension-package-deployer.js +175 -175
  180. package/dist/helpers/app/extensions-deployer.d.ts +9 -9
  181. package/dist/helpers/app/extensions-deployer.js +95 -95
  182. package/dist/helpers/app/load-app-config.d.ts +4 -4
  183. package/dist/helpers/app/load-app-config.js +22 -22
  184. package/dist/helpers/app/metadata-extractor.d.ts +1 -1
  185. package/dist/helpers/app/metadata-extractor.js +100 -100
  186. package/dist/helpers/app/setup-template.d.ts +8 -8
  187. package/dist/helpers/app/setup-template.js +48 -48
  188. package/dist/helpers/app/update-app-config.d.ts +2 -2
  189. package/dist/helpers/app/update-app-config.js +20 -20
  190. package/dist/helpers/app/upgrade-version.d.ts +16 -16
  191. package/dist/helpers/app/upgrade-version.js +37 -37
  192. package/dist/helpers/app/upgrade-version.spec.d.ts +1 -1
  193. package/dist/helpers/app/upgrade-version.spec.js +33 -33
  194. package/dist/helpers/colors/helpers.d.ts +12 -12
  195. package/dist/helpers/colors/helpers.js +84 -84
  196. package/dist/helpers/config/config.d.ts +16 -16
  197. package/dist/helpers/config/config.js +223 -223
  198. package/dist/helpers/file-helpers.d.ts +2 -2
  199. package/dist/helpers/file-helpers.js +36 -36
  200. package/dist/helpers/load/helpers.d.ts +20 -20
  201. package/dist/helpers/load/helpers.js +141 -141
  202. package/dist/helpers/load/helpers.spec.d.ts +1 -1
  203. package/dist/helpers/load/helpers.spec.js +62 -62
  204. package/dist/helpers/load/validators.d.ts +14 -14
  205. package/dist/helpers/load/validators.js +182 -182
  206. package/dist/helpers/load/validators.spec.d.ts +1 -1
  207. package/dist/helpers/load/validators.spec.js +450 -450
  208. package/dist/helpers/pipeline/formatters.d.ts +6 -0
  209. package/dist/helpers/pipeline/formatters.js +219 -0
  210. package/dist/helpers/projects/helpers.d.ts +3 -3
  211. package/dist/helpers/projects/helpers.js +167 -167
  212. package/dist/helpers/types/csv-parser.d.ts +1 -1
  213. package/dist/helpers/types/csv-parser.js +59 -59
  214. package/dist/helpers/types/option-set-helper.d.ts +9 -9
  215. package/dist/helpers/types/option-set-helper.js +48 -48
  216. package/dist/helpers/types/option-set-helper.spec.d.ts +1 -1
  217. package/dist/helpers/types/option-set-helper.spec.js +64 -64
  218. package/dist/helpers/types/parseOptionSetsLocalFiles.spec.d.ts +1 -1
  219. package/dist/helpers/types/parseOptionSetsLocalFiles.spec.js +285 -285
  220. package/dist/helpers/types/type-extractor.d.ts +1 -1
  221. package/dist/helpers/types/type-extractor.js +36 -36
  222. package/dist/helpers/types/type-parser.d.ts +4 -4
  223. package/dist/helpers/types/type-parser.js +119 -119
  224. package/dist/helpers/types/type-uploader.d.ts +20 -20
  225. package/dist/helpers/types/type-uploader.js +336 -336
  226. package/dist/helpers/types/type-uploader.spec.d.ts +1 -1
  227. package/dist/helpers/types/type-uploader.spec.js +266 -266
  228. package/dist/helpers/types/uploadOptionSets.spec.d.ts +1 -1
  229. package/dist/helpers/types/uploadOptionSets.spec.js +19 -19
  230. package/dist/helpers/workflow-template-definitions/workflow-template-definition-deployer.d.ts +12 -12
  231. package/dist/helpers/workflow-template-definitions/workflow-template-definition-deployer.js +158 -158
  232. package/dist/helpers/workflow-templates/helper.d.ts +20 -20
  233. package/dist/helpers/workflow-templates/helper.js +285 -285
  234. package/dist/index.d.ts +1 -1
  235. package/dist/index.js +5 -5
  236. package/dist/interfaces.d.ts +470 -470
  237. package/dist/interfaces.js +163 -163
  238. package/dist/logger.d.ts +3 -3
  239. package/dist/logger.js +33 -33
  240. package/oclif.manifest.json +85 -1
  241. package/package.json +7 -2
@@ -1,450 +1,450 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const validators_1 = require("./validators");
4
- describe('LoadValidators', () => {
5
- describe('ValidateColorsLoadFile', () => {
6
- it('should return errors if Federated ID is missing in the config file', () => {
7
- const colorsData = [{ id: 1, name: 'Red', hex: '#FF0000' }];
8
- const config = {
9
- federatedMappings: { name: 'Colors' },
10
- loadType: ['COLOR'],
11
- conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
12
- };
13
- const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
14
- expect(result.errors).toContain('"federatedId" is required in the config file');
15
- });
16
- it('should return errors if Name is missing in the config file', () => {
17
- const colorsData = [{ id: 1, name: 'Red', hex: '#FF0000' }];
18
- const config = {
19
- federatedMappings: { federatedId: 'id' },
20
- loadType: ['COLOR'],
21
- conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
22
- };
23
- const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
24
- expect(result.errors).toContain('"name" is required in the config file');
25
- });
26
- it('should return errors if Name column is not found in the CSV file', () => {
27
- const colorsData = [{ id: 1, name: 'Red', hex: '#FF0000' }];
28
- const config = {
29
- federatedMappings: { federatedId: 'id', name: 'Colors' },
30
- loadType: ['COLOR'],
31
- conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
32
- };
33
- const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
34
- expect(result.errors).toContain('Name column (Colors) not found in the CSV file');
35
- });
36
- it('should return errors if Federated ID is not found in the CSV file', () => {
37
- const colorsData = [{ Colors: 'Red', hex: '#FF0000' }];
38
- const config = {
39
- federatedMappings: { name: 'Colors', federatedId: 'id' },
40
- loadType: ['COLOR'],
41
- conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
42
- };
43
- const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
44
- expect(result.errors).toContain('Federated ID column (id) not found in the CSV file');
45
- });
46
- it('should return multiple errors', () => {
47
- const colorsData = [{ hex: '#FF0000' }];
48
- const config = {
49
- federatedMappings: { name: 'Colors', federatedId: 'id' },
50
- loadType: ['COLOR'],
51
- conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
52
- };
53
- const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
54
- expect(result.errors).toContain('Name column (Colors) not found in the CSV file');
55
- expect(result.errors).toContain('Federated ID column (id) not found in the CSV file');
56
- });
57
- it('should return warnings if Hex is ignored when red, green, and blue columns are present', () => {
58
- const colorsData = [{ id: 1, name: 'Red', red: 255, green: 0, blue: 0, hex: '#FF0000' }];
59
- const config = {
60
- loadType: ['COLOR'],
61
- conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
62
- federatedMappings: {
63
- red: 'red',
64
- green: 'green',
65
- blue: 'blue',
66
- hex: 'hex',
67
- name: 'Colors',
68
- federatedId: 'id',
69
- },
70
- };
71
- const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
72
- expect(result.warnings).toContain('"Hex" is ignored when red, green, and blue columns are present');
73
- });
74
- it('should return empty errors and warnings if all validations pass', () => {
75
- const colorsData = [{ id: 1, Colors: 'Red', red: 255, green: 0, blue: 0 }];
76
- const config = {
77
- loadType: ['COLOR'],
78
- conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
79
- federatedMappings: {
80
- red: 'red',
81
- green: 'green',
82
- blue: 'blue',
83
- name: 'Colors',
84
- federatedId: 'id',
85
- },
86
- };
87
- const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
88
- expect(result.errors).toEqual([]);
89
- expect(result.warnings).toEqual([]);
90
- });
91
- it('should return error if duplicate federatedId is found', () => {
92
- const colorsData = [
93
- { id: 1, Colors: 'Red', red: 255, green: 0, blue: 0 },
94
- { id: 1, Colors: 'Green', red: 0, green: 255, blue: 0 },
95
- { id: 2, Colors: 'Blue', red: 0, green: 0, blue: 255 },
96
- ];
97
- const config = {
98
- loadType: ['COLOR'],
99
- conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
100
- federatedMappings: {
101
- red: 'red',
102
- green: 'green',
103
- blue: 'blue',
104
- name: 'Colors',
105
- federatedId: 'id',
106
- },
107
- };
108
- const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
109
- expect(result.errors).toContain('Duplicate FederatedIds found: 1');
110
- });
111
- it('should throw error if typePath is present in the csv header but have incorrect typePath', () => {
112
- const colorsData = [{ name: 'color1', typePath: 'color1' }];
113
- const config = {
114
- loadType: ['COLOR'],
115
- conditionalColumns: [],
116
- federatedMappings: {
117
- red: 'red',
118
- green: 'green',
119
- blue: 'blue',
120
- name: 'Colors',
121
- federatedId: 'id',
122
- },
123
- };
124
- const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
125
- expect(result.errors).toContain('"typePath" must be "color" in each row in the csv file');
126
- });
127
- it('should not throw error if typepath is present in the csv header and have correct typePath', () => {
128
- const colorsData = [{ name: 'color1', typePath: 'color' }];
129
- const config = {
130
- loadType: ['COLOR'],
131
- conditionalColumns: [],
132
- federatedMappings: {
133
- red: 'red',
134
- green: 'green',
135
- blue: 'blue',
136
- name: 'name',
137
- federatedId: 'name',
138
- },
139
- };
140
- const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
141
- expect(result.errors).toHaveLength(0);
142
- });
143
- });
144
- describe('ValidateCustomEntityLoadFile', () => {
145
- it('should return error if config is null', () => {
146
- const customEntityData = [{ id: 1, name: 'Test' }];
147
- const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, null);
148
- expect(result.errors).toContain('Config file is empty');
149
- });
150
- it('should return error if loadType is missing in config', () => {
151
- const customEntityData = [{ id: 1, name: 'Test' }];
152
- const config = {};
153
- const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
154
- expect(result.errors).toContain('"loadType" is required in the config file');
155
- });
156
- it('should return error if loadType is not CUSTOM_ENTITY', () => {
157
- const customEntityData = [{ id: 1, name: 'Test' }];
158
- const config = { loadType: ['OTHER_TYPE'] };
159
- const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
160
- expect(result.errors).toContain('"loadType" must be must be single value "CUSTOM_ENTITY" in the config file');
161
- });
162
- it('should return error if federatedMappings.federatedId is missing in config', () => {
163
- const customEntityData = [{ id: 1, name: 'Test' }];
164
- const config = { loadType: ['CUSTOM_ENTITY'] };
165
- const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
166
- expect(result.errors).toContain('"federatedId" is required in the config file');
167
- });
168
- it('should return error if federatedMappings.name is missing in config', () => {
169
- const customEntityData = [{ id: 1, name: 'Test' }];
170
- const config = {
171
- loadType: ['CUSTOM_ENTITY'],
172
- federatedMappings: { federatedId: 'id' },
173
- };
174
- const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
175
- expect(result.errors).toContain('"name" is required in the config file');
176
- });
177
- it('should return error if federatedId column is missing in CSV', () => {
178
- const customEntityData = [{ name: 'Test' }];
179
- const config = {
180
- loadType: ['CUSTOM_ENTITY'],
181
- federatedMappings: { federatedId: 'id', name: 'name' },
182
- conditionalColumns: ['typePath'],
183
- };
184
- const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
185
- expect(result.errors).toContain('Federated ID column (id) not found in the CSV file');
186
- });
187
- it('should return error if conditionalColumns is missing in config', () => {
188
- const customEntityData = [{ id: 1, name: 'Test' }];
189
- const config = {
190
- loadType: ['CUSTOM_ENTITY'],
191
- federatedMappings: { federatedId: 'id', name: 'name' },
192
- };
193
- const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
194
- expect(result.errors).toContain('Missing "typePath" column in the csv file or config file');
195
- });
196
- it('should return error if name column is missing in CSV', () => {
197
- const customEntityData = [{ id: 1 }];
198
- const config = {
199
- loadType: ['CUSTOM_ENTITY'],
200
- federatedMappings: { federatedId: 'id', name: 'name' },
201
- conditionalColumns: ['typePath'],
202
- };
203
- const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
204
- expect(result.errors).toContain('Name column not found in the CSV file');
205
- });
206
- it('should not return errors if all conditions are met', () => {
207
- const customEntityData = [{ id: 1, name: 'Test' }];
208
- const config = {
209
- loadType: ['CUSTOM_ENTITY'],
210
- federatedMappings: { federatedId: 'id', name: 'name' },
211
- conditionalColumns: [{ toProperty: 'typePath', default: 'custom-entity:material' }],
212
- };
213
- const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
214
- expect(result.errors).toHaveLength(0);
215
- });
216
- it('should return error if duplicate federatedId is found', () => {
217
- const customEntityData = [
218
- { id: 1, name: 'Test' },
219
- { id: 2, name: 'Test2' },
220
- { id: 1, name: 'Test3' },
221
- ];
222
- const config = {
223
- loadType: ['CUSTOM_ENTITY'],
224
- federatedMappings: { federatedId: 'id', name: 'name' },
225
- conditionalColumns: [{ toProperty: 'typePath', default: 'custom-entity' }],
226
- };
227
- const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
228
- expect(result.errors).toContain('Duplicate FederatedIds found: 1');
229
- });
230
- it('should throw error if typepath is present in the csv header but have incorrect typePath', () => {
231
- const customEntityData = [{ name: 'custom-entity1', typePath: 'custom-entity1' }];
232
- const config = {
233
- loadType: ['CUSTOM_ENTITY'],
234
- federatedMappings: { federatedId: 'name', name: 'name' },
235
- conditionalColumns: [],
236
- };
237
- const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
238
- expect(result.errors).toContain('"typePath" must be "custom-entity:<subtypepath>" in each row in the csv file');
239
- });
240
- it('should not throw error if typepath is present in the csv header but have correct typePath', () => {
241
- const customEntityData = [{ name: 'custom-entity1', typePath: 'custom-entity:material' }];
242
- const config = {
243
- loadType: ['CUSTOM_ENTITY'],
244
- federatedMappings: { federatedId: 'name', name: 'name' },
245
- conditionalColumns: [],
246
- };
247
- const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
248
- expect(result.errors).toHaveLength(0);
249
- });
250
- });
251
- describe('ValidateLineSheetLoadFile', () => {
252
- it('should return an error if config is empty', () => {
253
- const lineSheetData = [{ header1: 'value1' }];
254
- const config = null;
255
- const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
256
- expect(result.errors).toContain('Config file is empty');
257
- expect(result.warnings).toHaveLength(0);
258
- });
259
- it('should return an error if load type is missing', () => {
260
- const lineSheetData = [{ header1: 'value1' }];
261
- const config = { loadType: '', federatedMappings: {} };
262
- const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
263
- expect(result.errors).toContain('"loadType" is required in the config file');
264
- });
265
- it('should return an error if load type is invalid', () => {
266
- const lineSheetData = [{ header1: 'value1' }];
267
- const config = { loadType: ['INVALID'], federatedMappings: {} };
268
- const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
269
- expect(result.errors).toContain('"loadType" must be either of values ["ITEM", "PROJECT_ITEM", "ASSORTMENT"] in the config file');
270
- });
271
- it('should return an error if name is not mapped in federatedMappings', () => {
272
- const lineSheetData = [{ header1: 'value1' }];
273
- const config = { loadType: ['ITEM'], federatedMappings: {} };
274
- const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
275
- expect(result.errors).toContain('"name" is required in the config file and must be mapped to Item Family Name');
276
- });
277
- it('should return a warning if optionName is not mapped in federatedMappings', () => {
278
- const lineSheetData = [{ header1: 'value1' }];
279
- const config = {
280
- loadType: ['ITEM'],
281
- federatedMappings: {
282
- name: 'header1',
283
- itemFamilyFederatedId: 'someId',
284
- },
285
- };
286
- const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
287
- expect(result.warnings).toContain('"optionName" is not mapped in the config file');
288
- });
289
- it('should return an error if itemFamilyFederatedId is not mapped in federatedMappings', () => {
290
- const lineSheetData = [{ header1: 'value1' }];
291
- const config = {
292
- loadType: ['ITEM'],
293
- federatedMappings: {
294
- name: 'header1',
295
- },
296
- };
297
- const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
298
- expect(result.errors).toContain('"itemFamilyFederatedId" is required in the config file');
299
- });
300
- it('should return a warning if itemOptionFederatedId is not mapped in federatedMappings', () => {
301
- const lineSheetData = [{ header1: 'value1' }];
302
- const config = {
303
- loadType: ['ITEM'],
304
- federatedMappings: {
305
- name: 'header1',
306
- itemFamilyFederatedId: 'someId',
307
- },
308
- };
309
- const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
310
- expect(result.warnings).toContain('"itemOptionFederatedId" is not mapped in the config file');
311
- });
312
- it('should return an error if itemFamilyFederatedId is missing in the CSV file', () => {
313
- const lineSheetData = [{ header1: 'value1', itemFamilyFederatedId: 'someId' }];
314
- const config = {
315
- loadType: ['ITEM'],
316
- federatedMappings: {
317
- name: 'header1',
318
- itemFamilyFederatedId: null,
319
- },
320
- };
321
- const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
322
- expect(result.errors).toContain(`itemFamilyFederatedId column (${config?.federatedMappings?.itemFamilyFederatedId}) not found in the CSV file`);
323
- });
324
- it('should return an error if itemFamilyFederatedId is null or undefined or empty in lineSheetData', () => {
325
- const lineSheetData = [
326
- { header1: 'value1', itemFamilyFederatedId: null },
327
- { header1: 'value2', itemFamilyFederatedId: undefined },
328
- { header1: 'value3', itemFamilyFederatedId: 'valid' },
329
- { header1: 'value4', itemFamilyFederatedId: '' },
330
- ];
331
- const config = {
332
- loadType: ['ITEM'],
333
- federatedMappings: {
334
- name: 'header1',
335
- itemFamilyFederatedId: 'itemFamilyFederatedId',
336
- },
337
- };
338
- const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
339
- expect(result.errors).toContain('some rows contain itemFamilyFederatedId is null or undefined or empty in the CSV file (rows 0,1,3)');
340
- });
341
- it('should return errors if duplicate itemFamilyFederatedId is found in lineSheetData', () => {
342
- const lineSheetData = [
343
- {
344
- header1: 'value1',
345
- itemFamilyFederatedId: '1',
346
- },
347
- {
348
- header1: 'value2',
349
- itemFamilyFederatedId: '1',
350
- },
351
- {
352
- header1: 'value3',
353
- itemFamilyFederatedId: '2',
354
- },
355
- ];
356
- const config = {
357
- loadType: ['ITEM'],
358
- federatedMappings: {
359
- name: 'header1',
360
- itemFamilyFederatedId: 'itemFamilyFederatedId',
361
- },
362
- };
363
- const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
364
- expect(result.errors).toContain('Found conflicting fields for family federated Ids: (1: (value1, value2))');
365
- });
366
- it('should allow for the same itemFamilyFederatedId if the names are the same', () => {
367
- const lineSheetData = [
368
- {
369
- itemName: 'foo',
370
- itemFamilyFederatedId: '1',
371
- },
372
- {
373
- itemName: 'foo',
374
- itemFamilyFederatedId: '1',
375
- },
376
- {
377
- itemName: 'bar',
378
- itemFamilyFederatedId: '2',
379
- },
380
- ];
381
- const config = {
382
- loadType: ['ITEM'],
383
- federatedMappings: {
384
- name: 'itemName',
385
- itemFamilyFederatedId: 'itemFamilyFederatedId',
386
- },
387
- };
388
- const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
389
- expect(result.errors.length).toBe(0);
390
- });
391
- it('should find error if itemFamilyFederatedId is duplicated across different names', () => {
392
- const lineSheetData = [
393
- {
394
- itemName: 'foo',
395
- itemFamilyFederatedId: '1',
396
- },
397
- {
398
- itemName: 'bar',
399
- itemFamilyFederatedId: '1',
400
- },
401
- {
402
- itemName: 'baz',
403
- itemFamilyFederatedId: '2',
404
- },
405
- ];
406
- const config = {
407
- loadType: ['ITEM'],
408
- federatedMappings: {
409
- name: 'itemName',
410
- itemFamilyFederatedId: 'itemFamilyFederatedId',
411
- },
412
- };
413
- const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
414
- expect(result.errors).toContain('Found conflicting fields for family federated Ids: (1: (foo, bar))');
415
- });
416
- it('should return warnings if duplicate itemOptionFederatedId is found in lineSheetData', () => {
417
- const lineSheetData = [
418
- {
419
- header1: 'value1',
420
- itemFamilyFederatedId: '1',
421
- itemOptionFederatedId: '1',
422
- optionName: 'option1',
423
- },
424
- {
425
- header1: 'value2',
426
- itemFamilyFederatedId: '2',
427
- itemOptionFederatedId: '1',
428
- optionName: 'option2',
429
- },
430
- {
431
- header1: 'value3',
432
- itemFamilyFederatedId: '3',
433
- itemOptionFederatedId: '2',
434
- optionName: 'option3',
435
- },
436
- ];
437
- const config = {
438
- loadType: ['ITEM'],
439
- federatedMappings: {
440
- name: 'header1',
441
- itemFamilyFederatedId: 'itemFamilyFederatedId',
442
- itemOptionFederatedId: 'itemOptionFederatedId',
443
- optionName: 'optionName',
444
- },
445
- };
446
- const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
447
- expect(result.errors).toContain('Duplicate itemOptionFederatedId found: 1');
448
- });
449
- });
450
- });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const validators_1 = require("./validators");
4
+ describe('LoadValidators', () => {
5
+ describe('ValidateColorsLoadFile', () => {
6
+ it('should return errors if Federated ID is missing in the config file', () => {
7
+ const colorsData = [{ id: 1, name: 'Red', hex: '#FF0000' }];
8
+ const config = {
9
+ federatedMappings: { name: 'Colors' },
10
+ loadType: ['COLOR'],
11
+ conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
12
+ };
13
+ const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
14
+ expect(result.errors).toContain('"federatedId" is required in the config file');
15
+ });
16
+ it('should return errors if Name is missing in the config file', () => {
17
+ const colorsData = [{ id: 1, name: 'Red', hex: '#FF0000' }];
18
+ const config = {
19
+ federatedMappings: { federatedId: 'id' },
20
+ loadType: ['COLOR'],
21
+ conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
22
+ };
23
+ const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
24
+ expect(result.errors).toContain('"name" is required in the config file');
25
+ });
26
+ it('should return errors if Name column is not found in the CSV file', () => {
27
+ const colorsData = [{ id: 1, name: 'Red', hex: '#FF0000' }];
28
+ const config = {
29
+ federatedMappings: { federatedId: 'id', name: 'Colors' },
30
+ loadType: ['COLOR'],
31
+ conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
32
+ };
33
+ const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
34
+ expect(result.errors).toContain('Name column (Colors) not found in the CSV file');
35
+ });
36
+ it('should return errors if Federated ID is not found in the CSV file', () => {
37
+ const colorsData = [{ Colors: 'Red', hex: '#FF0000' }];
38
+ const config = {
39
+ federatedMappings: { name: 'Colors', federatedId: 'id' },
40
+ loadType: ['COLOR'],
41
+ conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
42
+ };
43
+ const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
44
+ expect(result.errors).toContain('Federated ID column (id) not found in the CSV file');
45
+ });
46
+ it('should return multiple errors', () => {
47
+ const colorsData = [{ hex: '#FF0000' }];
48
+ const config = {
49
+ federatedMappings: { name: 'Colors', federatedId: 'id' },
50
+ loadType: ['COLOR'],
51
+ conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
52
+ };
53
+ const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
54
+ expect(result.errors).toContain('Name column (Colors) not found in the CSV file');
55
+ expect(result.errors).toContain('Federated ID column (id) not found in the CSV file');
56
+ });
57
+ it('should return warnings if Hex is ignored when red, green, and blue columns are present', () => {
58
+ const colorsData = [{ id: 1, name: 'Red', red: 255, green: 0, blue: 0, hex: '#FF0000' }];
59
+ const config = {
60
+ loadType: ['COLOR'],
61
+ conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
62
+ federatedMappings: {
63
+ red: 'red',
64
+ green: 'green',
65
+ blue: 'blue',
66
+ hex: 'hex',
67
+ name: 'Colors',
68
+ federatedId: 'id',
69
+ },
70
+ };
71
+ const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
72
+ expect(result.warnings).toContain('"Hex" is ignored when red, green, and blue columns are present');
73
+ });
74
+ it('should return empty errors and warnings if all validations pass', () => {
75
+ const colorsData = [{ id: 1, Colors: 'Red', red: 255, green: 0, blue: 0 }];
76
+ const config = {
77
+ loadType: ['COLOR'],
78
+ conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
79
+ federatedMappings: {
80
+ red: 'red',
81
+ green: 'green',
82
+ blue: 'blue',
83
+ name: 'Colors',
84
+ federatedId: 'id',
85
+ },
86
+ };
87
+ const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
88
+ expect(result.errors).toEqual([]);
89
+ expect(result.warnings).toEqual([]);
90
+ });
91
+ it('should return error if duplicate federatedId is found', () => {
92
+ const colorsData = [
93
+ { id: 1, Colors: 'Red', red: 255, green: 0, blue: 0 },
94
+ { id: 1, Colors: 'Green', red: 0, green: 255, blue: 0 },
95
+ { id: 2, Colors: 'Blue', red: 0, green: 0, blue: 255 },
96
+ ];
97
+ const config = {
98
+ loadType: ['COLOR'],
99
+ conditionalColumns: [{ toProperty: 'typePath', default: 'color' }],
100
+ federatedMappings: {
101
+ red: 'red',
102
+ green: 'green',
103
+ blue: 'blue',
104
+ name: 'Colors',
105
+ federatedId: 'id',
106
+ },
107
+ };
108
+ const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
109
+ expect(result.errors).toContain('Duplicate FederatedIds found: 1');
110
+ });
111
+ it('should throw error if typePath is present in the csv header but have incorrect typePath', () => {
112
+ const colorsData = [{ name: 'color1', typePath: 'color1' }];
113
+ const config = {
114
+ loadType: ['COLOR'],
115
+ conditionalColumns: [],
116
+ federatedMappings: {
117
+ red: 'red',
118
+ green: 'green',
119
+ blue: 'blue',
120
+ name: 'Colors',
121
+ federatedId: 'id',
122
+ },
123
+ };
124
+ const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
125
+ expect(result.errors).toContain('"typePath" must be "color" in each row in the csv file');
126
+ });
127
+ it('should not throw error if typepath is present in the csv header and have correct typePath', () => {
128
+ const colorsData = [{ name: 'color1', typePath: 'color' }];
129
+ const config = {
130
+ loadType: ['COLOR'],
131
+ conditionalColumns: [],
132
+ federatedMappings: {
133
+ red: 'red',
134
+ green: 'green',
135
+ blue: 'blue',
136
+ name: 'name',
137
+ federatedId: 'name',
138
+ },
139
+ };
140
+ const result = validators_1.LoadValidators.ValidateColorsLoadFile(colorsData, config);
141
+ expect(result.errors).toHaveLength(0);
142
+ });
143
+ });
144
+ describe('ValidateCustomEntityLoadFile', () => {
145
+ it('should return error if config is null', () => {
146
+ const customEntityData = [{ id: 1, name: 'Test' }];
147
+ const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, null);
148
+ expect(result.errors).toContain('Config file is empty');
149
+ });
150
+ it('should return error if loadType is missing in config', () => {
151
+ const customEntityData = [{ id: 1, name: 'Test' }];
152
+ const config = {};
153
+ const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
154
+ expect(result.errors).toContain('"loadType" is required in the config file');
155
+ });
156
+ it('should return error if loadType is not CUSTOM_ENTITY', () => {
157
+ const customEntityData = [{ id: 1, name: 'Test' }];
158
+ const config = { loadType: ['OTHER_TYPE'] };
159
+ const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
160
+ expect(result.errors).toContain('"loadType" must be must be single value "CUSTOM_ENTITY" in the config file');
161
+ });
162
+ it('should return error if federatedMappings.federatedId is missing in config', () => {
163
+ const customEntityData = [{ id: 1, name: 'Test' }];
164
+ const config = { loadType: ['CUSTOM_ENTITY'] };
165
+ const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
166
+ expect(result.errors).toContain('"federatedId" is required in the config file');
167
+ });
168
+ it('should return error if federatedMappings.name is missing in config', () => {
169
+ const customEntityData = [{ id: 1, name: 'Test' }];
170
+ const config = {
171
+ loadType: ['CUSTOM_ENTITY'],
172
+ federatedMappings: { federatedId: 'id' },
173
+ };
174
+ const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
175
+ expect(result.errors).toContain('"name" is required in the config file');
176
+ });
177
+ it('should return error if federatedId column is missing in CSV', () => {
178
+ const customEntityData = [{ name: 'Test' }];
179
+ const config = {
180
+ loadType: ['CUSTOM_ENTITY'],
181
+ federatedMappings: { federatedId: 'id', name: 'name' },
182
+ conditionalColumns: ['typePath'],
183
+ };
184
+ const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
185
+ expect(result.errors).toContain('Federated ID column (id) not found in the CSV file');
186
+ });
187
+ it('should return error if conditionalColumns is missing in config', () => {
188
+ const customEntityData = [{ id: 1, name: 'Test' }];
189
+ const config = {
190
+ loadType: ['CUSTOM_ENTITY'],
191
+ federatedMappings: { federatedId: 'id', name: 'name' },
192
+ };
193
+ const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
194
+ expect(result.errors).toContain('Missing "typePath" column in the csv file or config file');
195
+ });
196
+ it('should return error if name column is missing in CSV', () => {
197
+ const customEntityData = [{ id: 1 }];
198
+ const config = {
199
+ loadType: ['CUSTOM_ENTITY'],
200
+ federatedMappings: { federatedId: 'id', name: 'name' },
201
+ conditionalColumns: ['typePath'],
202
+ };
203
+ const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
204
+ expect(result.errors).toContain('Name column not found in the CSV file');
205
+ });
206
+ it('should not return errors if all conditions are met', () => {
207
+ const customEntityData = [{ id: 1, name: 'Test' }];
208
+ const config = {
209
+ loadType: ['CUSTOM_ENTITY'],
210
+ federatedMappings: { federatedId: 'id', name: 'name' },
211
+ conditionalColumns: [{ toProperty: 'typePath', default: 'custom-entity:material' }],
212
+ };
213
+ const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
214
+ expect(result.errors).toHaveLength(0);
215
+ });
216
+ it('should return error if duplicate federatedId is found', () => {
217
+ const customEntityData = [
218
+ { id: 1, name: 'Test' },
219
+ { id: 2, name: 'Test2' },
220
+ { id: 1, name: 'Test3' },
221
+ ];
222
+ const config = {
223
+ loadType: ['CUSTOM_ENTITY'],
224
+ federatedMappings: { federatedId: 'id', name: 'name' },
225
+ conditionalColumns: [{ toProperty: 'typePath', default: 'custom-entity' }],
226
+ };
227
+ const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
228
+ expect(result.errors).toContain('Duplicate FederatedIds found: 1');
229
+ });
230
+ it('should throw error if typepath is present in the csv header but have incorrect typePath', () => {
231
+ const customEntityData = [{ name: 'custom-entity1', typePath: 'custom-entity1' }];
232
+ const config = {
233
+ loadType: ['CUSTOM_ENTITY'],
234
+ federatedMappings: { federatedId: 'name', name: 'name' },
235
+ conditionalColumns: [],
236
+ };
237
+ const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
238
+ expect(result.errors).toContain('"typePath" must be "custom-entity:<subtypepath>" in each row in the csv file');
239
+ });
240
+ it('should not throw error if typepath is present in the csv header but have correct typePath', () => {
241
+ const customEntityData = [{ name: 'custom-entity1', typePath: 'custom-entity:material' }];
242
+ const config = {
243
+ loadType: ['CUSTOM_ENTITY'],
244
+ federatedMappings: { federatedId: 'name', name: 'name' },
245
+ conditionalColumns: [],
246
+ };
247
+ const result = validators_1.LoadValidators.ValidateCustomEntityLoadFile(customEntityData, config);
248
+ expect(result.errors).toHaveLength(0);
249
+ });
250
+ });
251
+ describe('ValidateLineSheetLoadFile', () => {
252
+ it('should return an error if config is empty', () => {
253
+ const lineSheetData = [{ header1: 'value1' }];
254
+ const config = null;
255
+ const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
256
+ expect(result.errors).toContain('Config file is empty');
257
+ expect(result.warnings).toHaveLength(0);
258
+ });
259
+ it('should return an error if load type is missing', () => {
260
+ const lineSheetData = [{ header1: 'value1' }];
261
+ const config = { loadType: '', federatedMappings: {} };
262
+ const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
263
+ expect(result.errors).toContain('"loadType" is required in the config file');
264
+ });
265
+ it('should return an error if load type is invalid', () => {
266
+ const lineSheetData = [{ header1: 'value1' }];
267
+ const config = { loadType: ['INVALID'], federatedMappings: {} };
268
+ const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
269
+ expect(result.errors).toContain('"loadType" must be either of values ["ITEM", "PROJECT_ITEM", "ASSORTMENT"] in the config file');
270
+ });
271
+ it('should return an error if name is not mapped in federatedMappings', () => {
272
+ const lineSheetData = [{ header1: 'value1' }];
273
+ const config = { loadType: ['ITEM'], federatedMappings: {} };
274
+ const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
275
+ expect(result.errors).toContain('"name" is required in the config file and must be mapped to Item Family Name');
276
+ });
277
+ it('should return a warning if optionName is not mapped in federatedMappings', () => {
278
+ const lineSheetData = [{ header1: 'value1' }];
279
+ const config = {
280
+ loadType: ['ITEM'],
281
+ federatedMappings: {
282
+ name: 'header1',
283
+ itemFamilyFederatedId: 'someId',
284
+ },
285
+ };
286
+ const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
287
+ expect(result.warnings).toContain('"optionName" is not mapped in the config file');
288
+ });
289
+ it('should return an error if itemFamilyFederatedId is not mapped in federatedMappings', () => {
290
+ const lineSheetData = [{ header1: 'value1' }];
291
+ const config = {
292
+ loadType: ['ITEM'],
293
+ federatedMappings: {
294
+ name: 'header1',
295
+ },
296
+ };
297
+ const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
298
+ expect(result.errors).toContain('"itemFamilyFederatedId" is required in the config file');
299
+ });
300
+ it('should return a warning if itemOptionFederatedId is not mapped in federatedMappings', () => {
301
+ const lineSheetData = [{ header1: 'value1' }];
302
+ const config = {
303
+ loadType: ['ITEM'],
304
+ federatedMappings: {
305
+ name: 'header1',
306
+ itemFamilyFederatedId: 'someId',
307
+ },
308
+ };
309
+ const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
310
+ expect(result.warnings).toContain('"itemOptionFederatedId" is not mapped in the config file');
311
+ });
312
+ it('should return an error if itemFamilyFederatedId is missing in the CSV file', () => {
313
+ const lineSheetData = [{ header1: 'value1', itemFamilyFederatedId: 'someId' }];
314
+ const config = {
315
+ loadType: ['ITEM'],
316
+ federatedMappings: {
317
+ name: 'header1',
318
+ itemFamilyFederatedId: null,
319
+ },
320
+ };
321
+ const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
322
+ expect(result.errors).toContain(`itemFamilyFederatedId column (${config?.federatedMappings?.itemFamilyFederatedId}) not found in the CSV file`);
323
+ });
324
+ it('should return an error if itemFamilyFederatedId is null or undefined or empty in lineSheetData', () => {
325
+ const lineSheetData = [
326
+ { header1: 'value1', itemFamilyFederatedId: null },
327
+ { header1: 'value2', itemFamilyFederatedId: undefined },
328
+ { header1: 'value3', itemFamilyFederatedId: 'valid' },
329
+ { header1: 'value4', itemFamilyFederatedId: '' },
330
+ ];
331
+ const config = {
332
+ loadType: ['ITEM'],
333
+ federatedMappings: {
334
+ name: 'header1',
335
+ itemFamilyFederatedId: 'itemFamilyFederatedId',
336
+ },
337
+ };
338
+ const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
339
+ expect(result.errors).toContain('some rows contain itemFamilyFederatedId is null or undefined or empty in the CSV file (rows 0,1,3)');
340
+ });
341
+ it('should return errors if duplicate itemFamilyFederatedId is found in lineSheetData', () => {
342
+ const lineSheetData = [
343
+ {
344
+ header1: 'value1',
345
+ itemFamilyFederatedId: '1',
346
+ },
347
+ {
348
+ header1: 'value2',
349
+ itemFamilyFederatedId: '1',
350
+ },
351
+ {
352
+ header1: 'value3',
353
+ itemFamilyFederatedId: '2',
354
+ },
355
+ ];
356
+ const config = {
357
+ loadType: ['ITEM'],
358
+ federatedMappings: {
359
+ name: 'header1',
360
+ itemFamilyFederatedId: 'itemFamilyFederatedId',
361
+ },
362
+ };
363
+ const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
364
+ expect(result.errors).toContain('Found conflicting fields for family federated Ids: (1: (value1, value2))');
365
+ });
366
+ it('should allow for the same itemFamilyFederatedId if the names are the same', () => {
367
+ const lineSheetData = [
368
+ {
369
+ itemName: 'foo',
370
+ itemFamilyFederatedId: '1',
371
+ },
372
+ {
373
+ itemName: 'foo',
374
+ itemFamilyFederatedId: '1',
375
+ },
376
+ {
377
+ itemName: 'bar',
378
+ itemFamilyFederatedId: '2',
379
+ },
380
+ ];
381
+ const config = {
382
+ loadType: ['ITEM'],
383
+ federatedMappings: {
384
+ name: 'itemName',
385
+ itemFamilyFederatedId: 'itemFamilyFederatedId',
386
+ },
387
+ };
388
+ const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
389
+ expect(result.errors.length).toBe(0);
390
+ });
391
+ it('should find error if itemFamilyFederatedId is duplicated across different names', () => {
392
+ const lineSheetData = [
393
+ {
394
+ itemName: 'foo',
395
+ itemFamilyFederatedId: '1',
396
+ },
397
+ {
398
+ itemName: 'bar',
399
+ itemFamilyFederatedId: '1',
400
+ },
401
+ {
402
+ itemName: 'baz',
403
+ itemFamilyFederatedId: '2',
404
+ },
405
+ ];
406
+ const config = {
407
+ loadType: ['ITEM'],
408
+ federatedMappings: {
409
+ name: 'itemName',
410
+ itemFamilyFederatedId: 'itemFamilyFederatedId',
411
+ },
412
+ };
413
+ const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
414
+ expect(result.errors).toContain('Found conflicting fields for family federated Ids: (1: (foo, bar))');
415
+ });
416
+ it('should return warnings if duplicate itemOptionFederatedId is found in lineSheetData', () => {
417
+ const lineSheetData = [
418
+ {
419
+ header1: 'value1',
420
+ itemFamilyFederatedId: '1',
421
+ itemOptionFederatedId: '1',
422
+ optionName: 'option1',
423
+ },
424
+ {
425
+ header1: 'value2',
426
+ itemFamilyFederatedId: '2',
427
+ itemOptionFederatedId: '1',
428
+ optionName: 'option2',
429
+ },
430
+ {
431
+ header1: 'value3',
432
+ itemFamilyFederatedId: '3',
433
+ itemOptionFederatedId: '2',
434
+ optionName: 'option3',
435
+ },
436
+ ];
437
+ const config = {
438
+ loadType: ['ITEM'],
439
+ federatedMappings: {
440
+ name: 'header1',
441
+ itemFamilyFederatedId: 'itemFamilyFederatedId',
442
+ itemOptionFederatedId: 'itemOptionFederatedId',
443
+ optionName: 'optionName',
444
+ },
445
+ };
446
+ const result = validators_1.LoadValidators.ValidateLineSheetLoadFile(lineSheetData, config);
447
+ expect(result.errors).toContain('Duplicate itemOptionFederatedId found: 1');
448
+ });
449
+ });
450
+ });