smartling-api-sdk-nodejs 3.2.2 → 3.3.0

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 (150) hide show
  1. package/.env.example +13 -0
  2. package/api/base/base-api.ts +2 -1
  3. package/api/base/base-file-api.ts +8 -3
  4. package/api/glossaries/dto/custom-field-value-dto.ts +6 -0
  5. package/api/glossaries/dto/entry-request-translation-status-dto.ts +7 -0
  6. package/api/glossaries/dto/glossary-entries-count-dto.ts +5 -0
  7. package/api/glossaries/dto/glossary-entry-dto.ts +23 -0
  8. package/api/glossaries/dto/glossary-import-result-dto.ts +11 -0
  9. package/api/glossaries/dto/glossary-import-status-dto.ts +7 -0
  10. package/api/glossaries/dto/glossary-uids-dto.ts +3 -0
  11. package/api/glossaries/dto/import-entry-changes-dto.ts +6 -0
  12. package/api/glossaries/dto/import-entry-translation-changes-dto.ts +6 -0
  13. package/api/glossaries/dto/import-warning-dto.ts +4 -0
  14. package/api/glossaries/dto/label-dto.ts +4 -0
  15. package/api/glossaries/dto/locale-workflow-dto.ts +4 -0
  16. package/api/glossaries/dto/operation-dto.ts +3 -0
  17. package/api/glossaries/dto/translation-dto.ts +20 -0
  18. package/api/glossaries/dto/translation-request-status-dto.ts +5 -0
  19. package/api/glossaries/enums/import-file-media-type.ts +5 -0
  20. package/api/glossaries/enums/import-status.ts +6 -0
  21. package/api/glossaries/enums/index.ts +4 -0
  22. package/api/glossaries/enums/part-of-speech.ts +11 -0
  23. package/api/glossaries/enums/suggestion-status.ts +5 -0
  24. package/api/glossaries/index.ts +281 -0
  25. package/api/glossaries/params/archive-glossaries-parameters.ts +9 -0
  26. package/api/glossaries/params/authorize-entries-parameters.ts +37 -0
  27. package/api/glossaries/params/create-glossary-entry-parameters.ts +50 -0
  28. package/api/glossaries/params/create-glossary-parameters.ts +40 -0
  29. package/api/glossaries/params/create-label-parameters.ts +9 -0
  30. package/api/glossaries/params/entries-bulk-action-parameters.ts +149 -0
  31. package/api/glossaries/params/entries-bulk-labels-parameters.ts +123 -0
  32. package/api/glossaries/params/export-entries-parameters.ts +16 -48
  33. package/api/glossaries/params/initialize-import-parameters.ts +42 -0
  34. package/api/glossaries/params/search-glossary-counts-parameters.ts +41 -0
  35. package/api/glossaries/params/search-glossary-entries-parameters.ts +105 -0
  36. package/built/api/base/base-api.js +2 -1
  37. package/built/api/base/base-api.js.map +1 -1
  38. package/built/api/base/base-file-api.js +9 -3
  39. package/built/api/base/base-file-api.js.map +1 -1
  40. package/built/api/glossaries/dto/custom-field-value-dto.d.ts +6 -0
  41. package/built/api/glossaries/dto/custom-field-value-dto.js +3 -0
  42. package/built/api/glossaries/dto/custom-field-value-dto.js.map +1 -0
  43. package/built/api/glossaries/dto/entry-request-translation-status-dto.d.ts +6 -0
  44. package/built/api/glossaries/dto/entry-request-translation-status-dto.js +3 -0
  45. package/built/api/glossaries/dto/entry-request-translation-status-dto.js.map +1 -0
  46. package/built/api/glossaries/dto/glossary-entries-count-dto.d.ts +5 -0
  47. package/built/api/glossaries/dto/glossary-entries-count-dto.js +3 -0
  48. package/built/api/glossaries/dto/glossary-entries-count-dto.js.map +1 -0
  49. package/built/api/glossaries/dto/glossary-entry-dto.d.ts +22 -0
  50. package/built/api/glossaries/dto/glossary-entry-dto.js +3 -0
  51. package/built/api/glossaries/dto/glossary-entry-dto.js.map +1 -0
  52. package/built/api/glossaries/dto/glossary-import-result-dto.d.ts +10 -0
  53. package/built/api/glossaries/dto/glossary-import-result-dto.js +3 -0
  54. package/built/api/glossaries/dto/glossary-import-result-dto.js.map +1 -0
  55. package/built/api/glossaries/dto/glossary-import-status-dto.d.ts +6 -0
  56. package/built/api/glossaries/dto/glossary-import-status-dto.js +3 -0
  57. package/built/api/glossaries/dto/glossary-import-status-dto.js.map +1 -0
  58. package/built/api/glossaries/dto/glossary-uids-dto.d.ts +3 -0
  59. package/built/api/glossaries/dto/glossary-uids-dto.js +3 -0
  60. package/built/api/glossaries/dto/glossary-uids-dto.js.map +1 -0
  61. package/built/api/glossaries/dto/import-entry-changes-dto.d.ts +6 -0
  62. package/built/api/glossaries/dto/import-entry-changes-dto.js +3 -0
  63. package/built/api/glossaries/dto/import-entry-changes-dto.js.map +1 -0
  64. package/built/api/glossaries/dto/import-entry-translation-changes-dto.d.ts +6 -0
  65. package/built/api/glossaries/dto/import-entry-translation-changes-dto.js +3 -0
  66. package/built/api/glossaries/dto/import-entry-translation-changes-dto.js.map +1 -0
  67. package/built/api/glossaries/dto/import-warning-dto.d.ts +4 -0
  68. package/built/api/glossaries/dto/import-warning-dto.js +3 -0
  69. package/built/api/glossaries/dto/import-warning-dto.js.map +1 -0
  70. package/built/api/glossaries/dto/label-dto.d.ts +4 -0
  71. package/built/api/glossaries/dto/label-dto.js +3 -0
  72. package/built/api/glossaries/dto/label-dto.js.map +1 -0
  73. package/built/api/glossaries/dto/locale-workflow-dto.d.ts +4 -0
  74. package/built/api/glossaries/dto/locale-workflow-dto.js +3 -0
  75. package/built/api/glossaries/dto/locale-workflow-dto.js.map +1 -0
  76. package/built/api/glossaries/dto/operation-dto.d.ts +3 -0
  77. package/built/api/glossaries/dto/operation-dto.js +3 -0
  78. package/built/api/glossaries/dto/operation-dto.js.map +1 -0
  79. package/built/api/glossaries/dto/translation-dto.d.ts +19 -0
  80. package/built/api/glossaries/dto/translation-dto.js +3 -0
  81. package/built/api/glossaries/dto/translation-dto.js.map +1 -0
  82. package/built/api/glossaries/dto/translation-request-status-dto.d.ts +5 -0
  83. package/built/api/glossaries/dto/translation-request-status-dto.js +3 -0
  84. package/built/api/glossaries/dto/translation-request-status-dto.js.map +1 -0
  85. package/built/api/glossaries/enums/import-file-media-type.d.ts +5 -0
  86. package/built/api/glossaries/enums/import-file-media-type.js +10 -0
  87. package/built/api/glossaries/enums/import-file-media-type.js.map +1 -0
  88. package/built/api/glossaries/enums/import-status.d.ts +6 -0
  89. package/built/api/glossaries/enums/import-status.js +11 -0
  90. package/built/api/glossaries/enums/import-status.js.map +1 -0
  91. package/built/api/glossaries/enums/index.d.ts +4 -0
  92. package/built/api/glossaries/enums/index.js +9 -1
  93. package/built/api/glossaries/enums/index.js.map +1 -1
  94. package/built/api/glossaries/enums/part-of-speech.d.ts +11 -0
  95. package/built/api/glossaries/enums/part-of-speech.js +16 -0
  96. package/built/api/glossaries/enums/part-of-speech.js.map +1 -0
  97. package/built/api/glossaries/enums/suggestion-status.d.ts +5 -0
  98. package/built/api/glossaries/enums/suggestion-status.js +10 -0
  99. package/built/api/glossaries/enums/suggestion-status.js.map +1 -0
  100. package/built/api/glossaries/index.d.ts +39 -0
  101. package/built/api/glossaries/index.js +127 -0
  102. package/built/api/glossaries/index.js.map +1 -1
  103. package/built/api/glossaries/params/archive-glossaries-parameters.d.ts +4 -0
  104. package/built/api/glossaries/params/archive-glossaries-parameters.js +12 -0
  105. package/built/api/glossaries/params/archive-glossaries-parameters.js.map +1 -0
  106. package/built/api/glossaries/params/authorize-entries-parameters.d.ts +10 -0
  107. package/built/api/glossaries/params/authorize-entries-parameters.js +28 -0
  108. package/built/api/glossaries/params/authorize-entries-parameters.js.map +1 -0
  109. package/built/api/glossaries/params/create-glossary-entry-parameters.d.ts +13 -0
  110. package/built/api/glossaries/params/create-glossary-entry-parameters.js +36 -0
  111. package/built/api/glossaries/params/create-glossary-entry-parameters.js.map +1 -0
  112. package/built/api/glossaries/params/create-glossary-parameters.d.ts +10 -0
  113. package/built/api/glossaries/params/create-glossary-parameters.js +32 -0
  114. package/built/api/glossaries/params/create-glossary-parameters.js.map +1 -0
  115. package/built/api/glossaries/params/create-label-parameters.d.ts +4 -0
  116. package/built/api/glossaries/params/create-label-parameters.js +12 -0
  117. package/built/api/glossaries/params/create-label-parameters.js.map +1 -0
  118. package/built/api/glossaries/params/entries-bulk-action-parameters.d.ts +28 -0
  119. package/built/api/glossaries/params/entries-bulk-action-parameters.js +112 -0
  120. package/built/api/glossaries/params/entries-bulk-action-parameters.js.map +1 -0
  121. package/built/api/glossaries/params/entries-bulk-labels-parameters.d.ts +29 -0
  122. package/built/api/glossaries/params/entries-bulk-labels-parameters.js +84 -0
  123. package/built/api/glossaries/params/entries-bulk-labels-parameters.js.map +1 -0
  124. package/built/api/glossaries/params/export-entries-parameters.js +16 -48
  125. package/built/api/glossaries/params/export-entries-parameters.js.map +1 -1
  126. package/built/api/glossaries/params/initialize-import-parameters.d.ts +12 -0
  127. package/built/api/glossaries/params/initialize-import-parameters.js +60 -0
  128. package/built/api/glossaries/params/initialize-import-parameters.js.map +1 -0
  129. package/built/api/glossaries/params/search-glossary-counts-parameters.d.ts +11 -0
  130. package/built/api/glossaries/params/search-glossary-counts-parameters.js +32 -0
  131. package/built/api/glossaries/params/search-glossary-counts-parameters.js.map +1 -0
  132. package/built/api/glossaries/params/search-glossary-entries-parameters.d.ts +25 -0
  133. package/built/api/glossaries/params/search-glossary-entries-parameters.js +72 -0
  134. package/built/api/glossaries/params/search-glossary-entries-parameters.js.map +1 -0
  135. package/built/index.d.ts +29 -0
  136. package/built/index.js +29 -0
  137. package/built/index.js.map +1 -1
  138. package/built/package.json +5 -3
  139. package/built/test/base-file.spec.js +9 -0
  140. package/built/test/base-file.spec.js.map +1 -1
  141. package/built/test/glossaries.spec.js +404 -0
  142. package/built/test/glossaries.spec.js.map +1 -1
  143. package/built/test/integration/glossaries.spec.d.ts +1 -0
  144. package/built/test/integration/glossaries.spec.js +222 -0
  145. package/built/test/integration/glossaries.spec.js.map +1 -0
  146. package/index.ts +29 -0
  147. package/package.json +5 -3
  148. package/test/base-file.spec.ts +14 -0
  149. package/test/glossaries.spec.ts +559 -0
  150. package/test/integration/glossaries.spec.ts +358 -0
@@ -0,0 +1,358 @@
1
+ import dotenv from "dotenv";
2
+ import assert from "assert";
3
+ import { SmartlingApiClientBuilder } from "../../api/builder/index";
4
+ import { SmartlingGlossariesApi } from "../../api/glossaries/index";
5
+ import { CreateGlossaryParameters } from "../../api/glossaries/params/create-glossary-parameters";
6
+ import { ArchiveGlossariesParameters } from "../../api/glossaries/params/archive-glossaries-parameters";
7
+ import { SearchGlossaryCountsParameters } from "../../api/glossaries/params/search-glossary-counts-parameters";
8
+ import { SearchGlossariesParameters } from "../../api/glossaries/params/search-glossaries-parameters";
9
+ import { CreateGlossaryEntryParameters } from "../../api/glossaries/params/create-glossary-entry-parameters";
10
+ import { SearchGlossaryEntriesParameters } from "../../api/glossaries/params/search-glossary-entries-parameters";
11
+ import { EntriesBulkActionParameters } from "../../api/glossaries/params/entries-bulk-action-parameters";
12
+ import { EntriesBulkLabelsParameters } from "../../api/glossaries/params/entries-bulk-labels-parameters";
13
+ import { CreateLabelParameters } from "../../api/glossaries/params/create-label-parameters";
14
+ import { InitializeImportParameters } from "../../api/glossaries/params/initialize-import-parameters";
15
+ import { ExportEntriesParameters } from "../../api/glossaries/params/export-entries-parameters";
16
+ import { ImportFileMediaType } from "../../api/glossaries/enums/import-file-media-type";
17
+ import { ExportFormat } from "../../api/glossaries/enums/export-format";
18
+
19
+ dotenv.config();
20
+
21
+ const baseSmartlingApiUrl = process.env.SMARTLING_API_BASE_URL || "https://api.smartling.com";
22
+ const accountUid = process.env.SMARTLING_ACCOUNT_UID as string;
23
+ const userId = process.env.SMARTLING_USER_ID as string;
24
+ const userSecret = process.env.SMARTLING_USER_SECRET as string;
25
+ const hasCredentials = Boolean(accountUid && userId && userSecret);
26
+ const logResponsesEnabled = process.env.SMARTLING_LOG_RESPONSES === "true";
27
+
28
+ function logResponse(label: string, response: unknown): void {
29
+ if (!logResponsesEnabled) {
30
+ return;
31
+ }
32
+
33
+ // eslint-disable-next-line no-console
34
+ console.log(`\n--- ${label} ---\n${JSON.stringify(response, null, 2)}`);
35
+ }
36
+
37
+ describe("SmartlingGlossariesApi integration tests.", function integrationSuite() {
38
+ this.timeout(60000);
39
+
40
+ let api: SmartlingGlossariesApi;
41
+ let glossaryUid: string;
42
+ let entryUid: string;
43
+ let labelUid: string;
44
+
45
+ before(function skipWithoutCredentials() {
46
+ if (!hasCredentials) {
47
+ // eslint-disable-next-line no-console
48
+ console.log("Skipping Glossaries integration tests: set SMARTLING_ACCOUNT_UID, SMARTLING_USER_ID, SMARTLING_USER_SECRET in .env");
49
+ this.skip();
50
+ }
51
+
52
+ api = new SmartlingApiClientBuilder()
53
+ .setBaseSmartlingApiUrl(baseSmartlingApiUrl)
54
+ .authWithUserIdAndUserSecret(userId, userSecret)
55
+ .build(SmartlingGlossariesApi);
56
+ });
57
+
58
+ before(async () => {
59
+ const created = await api.createGlossary(
60
+ accountUid,
61
+ new CreateGlossaryParameters()
62
+ .setGlossaryName(`Integration test glossary ${Date.now()}`)
63
+ .setLocaleIds(["en-US", "fr-FR"])
64
+ );
65
+
66
+ logResponse("createGlossary", created);
67
+ ({ glossaryUid } = created);
68
+ });
69
+
70
+ after(async () => {
71
+ if (glossaryUid) {
72
+ const archived = await api.archiveGlossaries(
73
+ accountUid,
74
+ new ArchiveGlossariesParameters().setGlossaryUids([glossaryUid])
75
+ );
76
+
77
+ logResponse("archiveGlossaries (cleanup)", archived);
78
+ }
79
+ });
80
+
81
+ it("gets the created glossary", async () => {
82
+ const glossary = await api.getGlossary(accountUid, glossaryUid);
83
+
84
+ logResponse("getGlossary", glossary);
85
+ assert.equal(glossary.glossaryUid, glossaryUid);
86
+ });
87
+
88
+ it("updates the glossary", async () => {
89
+ const updatedName = `Integration test glossary ${Date.now()} (updated)`;
90
+ const updated = await api.updateGlossary(
91
+ accountUid,
92
+ glossaryUid,
93
+ new CreateGlossaryParameters()
94
+ .setGlossaryName(updatedName)
95
+ .setLocaleIds(["en-US", "fr-FR"])
96
+ );
97
+
98
+ logResponse("updateGlossary", updated);
99
+ assert.equal(updated.glossaryUid, glossaryUid);
100
+ assert.equal(updated.glossaryName, updatedName);
101
+ assert.equal(updated.localeIds.length, 2);
102
+ assert.ok(updated.localeIds.includes("en-US"));
103
+ assert.ok(updated.localeIds.includes("fr-FR"));
104
+ });
105
+
106
+ it("archives and restores the glossary", async () => {
107
+ const archived = await api.archiveGlossaries(
108
+ accountUid,
109
+ new ArchiveGlossariesParameters().setGlossaryUids([glossaryUid])
110
+ );
111
+
112
+ logResponse("archiveGlossaries", archived);
113
+ assert.ok(archived.glossaryUids.includes(glossaryUid));
114
+
115
+ const restored = await api.restoreGlossaries(
116
+ accountUid,
117
+ new ArchiveGlossariesParameters().setGlossaryUids([glossaryUid])
118
+ );
119
+
120
+ logResponse("restoreGlossaries", restored);
121
+ assert.ok(restored.glossaryUids.includes(glossaryUid));
122
+ });
123
+
124
+ it("searches glossaries", async () => {
125
+ const result = await api.searchGlossaries(
126
+ accountUid,
127
+ new SearchGlossariesParameters().setGlossaryUids([glossaryUid])
128
+ );
129
+
130
+ logResponse("searchGlossaries", result);
131
+ assert.equal(result.items.length, 1);
132
+ });
133
+
134
+ it("searches glossaries with entries counts", async () => {
135
+ const result = await api.searchGlossariesWithEntriesCounts(
136
+ accountUid,
137
+ new SearchGlossaryCountsParameters().setGlossaryUids([glossaryUid])
138
+ );
139
+
140
+ logResponse("searchGlossariesWithEntriesCounts", result);
141
+ assert.equal(result.items.length, 1);
142
+ });
143
+
144
+ it("creates a glossary entry", async () => {
145
+ const entry = await api.createGlossaryEntry(
146
+ accountUid,
147
+ glossaryUid,
148
+ new CreateGlossaryEntryParameters()
149
+ .setDefinition("Integration test term")
150
+ .setTranslations([{ localeId: "fr-FR", term: "Terme de test" }])
151
+ );
152
+
153
+ logResponse("createGlossaryEntry", entry);
154
+ ({ entryUid } = entry);
155
+ assert.ok(entryUid);
156
+ });
157
+
158
+ it("reads the created glossary entry", async () => {
159
+ const entry = await api.readGlossaryEntry(accountUid, glossaryUid, entryUid);
160
+
161
+ logResponse("readGlossaryEntry", entry);
162
+ assert.equal(entry.entryUid, entryUid);
163
+ });
164
+
165
+ it("updates the glossary entry", async () => {
166
+ const updatedDefinition = "Integration test term (updated)";
167
+ const updatedTerm = "Terme de test (modifie)";
168
+ const entry = await api.updateGlossaryEntry(
169
+ accountUid,
170
+ glossaryUid,
171
+ entryUid,
172
+ new CreateGlossaryEntryParameters()
173
+ .setDefinition(updatedDefinition)
174
+ .setTranslations([{ localeId: "fr-FR", term: updatedTerm }])
175
+ );
176
+
177
+ logResponse("updateGlossaryEntry", entry);
178
+ assert.equal(entry.entryUid, entryUid);
179
+ assert.equal(entry.definition, updatedDefinition);
180
+
181
+ const frTranslation = entry.translations.find((translation) => translation.localeId === "fr-FR");
182
+
183
+ assert.ok(frTranslation);
184
+ assert.equal(frTranslation.term, updatedTerm);
185
+ });
186
+
187
+ it("searches glossary entries", async () => {
188
+ const result = await api.searchGlossaryEntries(
189
+ accountUid,
190
+ glossaryUid,
191
+ new SearchGlossaryEntriesParameters().setEntryUids([entryUid])
192
+ );
193
+
194
+ logResponse("searchGlossaryEntries", result);
195
+ assert.equal(result.items.length, 1);
196
+ });
197
+
198
+ it("creates and reads back a label", async () => {
199
+ const label = await api.createGlossaryLabel(
200
+ accountUid,
201
+ new CreateLabelParameters().setLabelText(`Integration label ${Date.now()}`)
202
+ );
203
+
204
+ logResponse("createGlossaryLabel", label);
205
+ ({ labelUid } = label);
206
+
207
+ const updatedLabelText = `Integration label ${Date.now()} (updated)`;
208
+ const updatedLabel = await api.updateGlossaryLabel(
209
+ accountUid,
210
+ labelUid,
211
+ new CreateLabelParameters().setLabelText(updatedLabelText)
212
+ );
213
+
214
+ logResponse("updateGlossaryLabel", updatedLabel);
215
+ assert.equal(updatedLabel.labelUid, labelUid);
216
+ assert.equal(updatedLabel.labelText, updatedLabelText);
217
+
218
+ const allLabels = await api.readAllGlossaryLabels(accountUid);
219
+
220
+ logResponse("readAllGlossaryLabels", allLabels);
221
+
222
+ const persistedLabel = allLabels.items.find((label2) => label2.labelUid === labelUid);
223
+
224
+ assert.ok(persistedLabel);
225
+ assert.equal(persistedLabel.labelText, updatedLabelText);
226
+ });
227
+
228
+ it("adds and removes a label on the glossary entry", async () => {
229
+ const addResult = await api.addLabelsToGlossaryEntries(
230
+ accountUid,
231
+ glossaryUid,
232
+ new EntriesBulkLabelsParameters()
233
+ .setFilterEntryUids([entryUid])
234
+ .setLabelUids([labelUid])
235
+ );
236
+
237
+ logResponse("addLabelsToGlossaryEntries", addResult);
238
+ assert.ok(addResult.operationUid);
239
+
240
+ const removeResult = await api.removeLabelsFromGlossaryEntries(
241
+ accountUid,
242
+ glossaryUid,
243
+ new EntriesBulkLabelsParameters()
244
+ .setFilterEntryUids([entryUid])
245
+ .setLabelUids([labelUid])
246
+ );
247
+
248
+ logResponse("removeLabelsFromGlossaryEntries", removeResult);
249
+ assert.ok(removeResult.operationUid);
250
+ });
251
+
252
+ it("deletes the label", async () => {
253
+ await api.deleteGlossaryLabel(accountUid, labelUid);
254
+ });
255
+
256
+ it("archives and restores the glossary entry", async () => {
257
+ const archiveResult = await api.archiveGlossaryEntries(
258
+ accountUid,
259
+ glossaryUid,
260
+ new EntriesBulkActionParameters().setFilterEntryUids([entryUid])
261
+ );
262
+
263
+ logResponse("archiveGlossaryEntries", archiveResult);
264
+ assert.ok(archiveResult.operationUid);
265
+
266
+ const restoreResult = await api.restoreGlossaryEntries(
267
+ accountUid,
268
+ glossaryUid,
269
+ new EntriesBulkActionParameters().setFilterEntryUids([entryUid])
270
+ );
271
+
272
+ logResponse("restoreGlossaryEntries", restoreResult);
273
+ assert.ok(restoreResult.operationUid);
274
+ });
275
+
276
+ it("exports glossary entries", async () => {
277
+ const exported = await api.exportGlossaryEntries(
278
+ accountUid,
279
+ glossaryUid,
280
+ new ExportEntriesParameters().setFormat(ExportFormat.CSV).setLocaleIds(["fr-FR"])
281
+ );
282
+
283
+ logResponse("exportGlossaryEntries (length)", exported.length);
284
+ assert.ok(exported.length > 0);
285
+ });
286
+
287
+ it("initializes, checks, and confirms a glossary import", async () => {
288
+ // The real glossary CSV import format requires the exact column-header shape
289
+ // the export endpoint produces, not a bare "definition,fr-FR" header: every
290
+ // column must be present (empty string where unused), and each translation
291
+ // column must be named "{Column} {Locale description} [{localeId}] {localeId}"
292
+ // (e.g. "Term French (France) [fr-FR] fr-FR") - confirmed against the real
293
+ // service's GlossaryImportHeaderParser/FormattingUtils.isColumnRecognized,
294
+ // and against a real exportGlossaryEntries response for this exact locale.
295
+ const localeColumnSuffix = "French (France) [fr-FR] fr-FR";
296
+ const importHeader = [
297
+ "ID", "Definition", "Part Of Speech", "Label Names", "Created By", "Last Modified By",
298
+ "Created At", "Last Modified At", "Archived", "MT-suitable", "Suggestion-status",
299
+ `Term ${localeColumnSuffix}`,
300
+ `Linguistic Variations ${localeColumnSuffix}`,
301
+ `Notes ${localeColumnSuffix}`,
302
+ `Case Sensitive ${localeColumnSuffix}`,
303
+ `Exact Match ${localeColumnSuffix}`,
304
+ `Do Not Translate ${localeColumnSuffix}`,
305
+ `Disabled ${localeColumnSuffix}`,
306
+ `Last Modified By ${localeColumnSuffix}`
307
+ ];
308
+ const importRow = new Array(importHeader.length).fill("");
309
+
310
+ importRow[1] = "Imported term";
311
+ importRow[11] = "Terme importe";
312
+
313
+ const importCsvContent = `${importHeader.map((column) => `"${column}"`).join(",")}\n`
314
+ + `${importRow.map((value) => `"${value}"`).join(",")}\n`;
315
+
316
+ const importResult = await api.initializeGlossaryImport(
317
+ accountUid,
318
+ glossaryUid,
319
+ new InitializeImportParameters()
320
+ .setImportFileContent(importCsvContent)
321
+ .setImportFileName("integration-import.csv")
322
+ .setImportFileMediaType(ImportFileMediaType.CSV)
323
+ );
324
+
325
+ logResponse("initializeGlossaryImport", importResult);
326
+ assert.ok(importResult.glossaryImport.importUid);
327
+ assert.ok(importResult.entryChanges);
328
+
329
+ const status = await api.importStatus(
330
+ accountUid,
331
+ glossaryUid,
332
+ importResult.glossaryImport.importUid
333
+ );
334
+
335
+ logResponse("importStatus", status);
336
+ assert.equal(status.importUid, importResult.glossaryImport.importUid);
337
+
338
+ const confirmed = await api.confirmGlossaryImport(
339
+ accountUid,
340
+ glossaryUid,
341
+ importResult.glossaryImport.importUid
342
+ );
343
+
344
+ logResponse("confirmGlossaryImport", confirmed);
345
+ assert.equal(confirmed.importUid, importResult.glossaryImport.importUid);
346
+ });
347
+
348
+ it("removes the glossary entry", async () => {
349
+ const result = await api.removeGlossaryEntries(
350
+ accountUid,
351
+ glossaryUid,
352
+ new EntriesBulkActionParameters().setFilterEntryUids([entryUid])
353
+ );
354
+
355
+ logResponse("removeGlossaryEntries", result);
356
+ assert.ok(result.operationUid);
357
+ });
358
+ });