smartling-api-sdk-nodejs 2.28.0 → 2.30.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 (111) hide show
  1. package/.github/workflows/publish.yml +29 -0
  2. package/api/base/base-api.ts +1 -1
  3. package/api/files/index.ts +19 -0
  4. package/api/files/params/download-file-base-parameters.ts +22 -0
  5. package/api/files/params/download-file-parameters.ts +2 -21
  6. package/api/files/params/download-multiple-files-translations-parameters.ts +50 -0
  7. package/api/files/params/file-filter.ts +4 -0
  8. package/api/files/params/file-locale-mode.ts +19 -0
  9. package/api/files/params/file-locales.ts +6 -0
  10. package/api/files/params/translation-file-name-mode.ts +18 -0
  11. package/built/api/base/base-api.js +1 -1
  12. package/built/api/base/base-api.js.map +1 -1
  13. package/built/api/files/index.d.ts +2 -0
  14. package/built/api/files/index.js +5 -0
  15. package/built/api/files/index.js.map +1 -1
  16. package/built/api/files/params/download-file-base-parameters.d.ts +7 -0
  17. package/built/api/files/params/download-file-base-parameters.js +20 -0
  18. package/built/api/files/params/download-file-base-parameters.js.map +1 -0
  19. package/built/api/files/params/download-file-parameters.d.ts +2 -6
  20. package/built/api/files/params/download-file-parameters.js +2 -14
  21. package/built/api/files/params/download-file-parameters.js.map +1 -1
  22. package/built/api/files/params/download-multiple-files-translations-parameters.d.ts +12 -0
  23. package/built/api/files/params/download-multiple-files-translations-parameters.js +37 -0
  24. package/built/api/files/params/download-multiple-files-translations-parameters.js.map +1 -0
  25. package/built/api/files/params/file-filter.d.ts +4 -0
  26. package/built/api/files/params/file-filter.js +9 -0
  27. package/built/api/files/params/file-filter.js.map +1 -0
  28. package/built/api/files/params/file-locale-mode.d.ts +5 -0
  29. package/built/api/files/params/file-locale-mode.js +10 -0
  30. package/built/api/files/params/file-locale-mode.js.map +1 -0
  31. package/built/api/files/params/file-locales.d.ts +5 -0
  32. package/built/api/files/params/file-locales.js +3 -0
  33. package/built/api/files/params/file-locales.js.map +1 -0
  34. package/built/api/files/params/translation-file-name-mode.d.ts +5 -0
  35. package/built/api/files/params/translation-file-name-mode.js +10 -0
  36. package/built/api/files/params/translation-file-name-mode.js.map +1 -0
  37. package/built/index.d.ts +5 -0
  38. package/built/index.js +5 -0
  39. package/built/index.js.map +1 -1
  40. package/built/package.json +1 -1
  41. package/built/test/access-token-provider.spec.d.ts +1 -0
  42. package/built/test/access-token-provider.spec.js +25 -0
  43. package/built/test/access-token-provider.spec.js.map +1 -0
  44. package/built/test/auth.spec.d.ts +1 -0
  45. package/built/test/auth.spec.js +332 -0
  46. package/built/test/auth.spec.js.map +1 -0
  47. package/built/test/base-file.spec.d.ts +1 -0
  48. package/built/test/base-file.spec.js +53 -0
  49. package/built/test/base-file.spec.js.map +1 -0
  50. package/built/test/base.spec.d.ts +1 -0
  51. package/built/test/base.spec.js +558 -0
  52. package/built/test/base.spec.js.map +1 -0
  53. package/built/test/builder.spec.d.ts +1 -0
  54. package/built/test/builder.spec.js +142 -0
  55. package/built/test/builder.spec.js.map +1 -0
  56. package/built/test/context.spec.d.ts +1 -0
  57. package/built/test/context.spec.js +154 -0
  58. package/built/test/context.spec.js.map +1 -0
  59. package/built/test/exception.spec.d.ts +1 -0
  60. package/built/test/exception.spec.js +20 -0
  61. package/built/test/exception.spec.js.map +1 -0
  62. package/built/test/file-translations.spec.d.ts +1 -0
  63. package/built/test/file-translations.spec.js +449 -0
  64. package/built/test/file-translations.spec.js.map +1 -0
  65. package/built/test/files.spec.d.ts +1 -0
  66. package/built/test/files.spec.js +489 -0
  67. package/built/test/files.spec.js.map +1 -0
  68. package/built/test/glossaries.spec.d.ts +1 -0
  69. package/built/test/glossaries.spec.js +182 -0
  70. package/built/test/glossaries.spec.js.map +1 -0
  71. package/built/test/job-batches.spec.d.ts +1 -0
  72. package/built/test/job-batches.spec.js +221 -0
  73. package/built/test/job-batches.spec.js.map +1 -0
  74. package/built/test/jobs.spec.d.ts +1 -0
  75. package/built/test/jobs.spec.js +357 -0
  76. package/built/test/jobs.spec.js.map +1 -0
  77. package/built/test/locales.spec.d.ts +1 -0
  78. package/built/test/locales.spec.js +66 -0
  79. package/built/test/locales.spec.js.map +1 -0
  80. package/built/test/mock.d.ts +18 -0
  81. package/built/test/mock.js +31 -0
  82. package/built/test/mock.js.map +1 -0
  83. package/built/test/mt.spec.d.ts +1 -0
  84. package/built/test/mt.spec.js +135 -0
  85. package/built/test/mt.spec.js.map +1 -0
  86. package/built/test/projects.spec.d.ts +1 -0
  87. package/built/test/projects.spec.js +87 -0
  88. package/built/test/projects.spec.js.map +1 -0
  89. package/built/test/published-files.spec.d.ts +1 -0
  90. package/built/test/published-files.spec.js +76 -0
  91. package/built/test/published-files.spec.js.map +1 -0
  92. package/built/test/report-api.spec.d.ts +1 -0
  93. package/built/test/report-api.spec.js +187 -0
  94. package/built/test/report-api.spec.js.map +1 -0
  95. package/built/test/stream-to-string.d.ts +4 -0
  96. package/built/test/stream-to-string.js +14 -0
  97. package/built/test/stream-to-string.js.map +1 -0
  98. package/built/test/strings.spec.d.ts +1 -0
  99. package/built/test/strings.spec.js +204 -0
  100. package/built/test/strings.spec.js.map +1 -0
  101. package/built/test/tags.spec.d.ts +1 -0
  102. package/built/test/tags.spec.js +423 -0
  103. package/built/test/tags.spec.js.map +1 -0
  104. package/built/test/webhooks.spec.d.ts +1 -0
  105. package/built/test/webhooks.spec.js +447 -0
  106. package/built/test/webhooks.spec.js.map +1 -0
  107. package/index.ts +5 -0
  108. package/package.json +1 -1
  109. package/test/files.spec.ts +107 -0
  110. package/.scannerwork/.sonar_lock +0 -0
  111. package/.scannerwork/report-task.txt +0 -6
@@ -0,0 +1,558 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const assert_1 = __importDefault(require("assert"));
16
+ const sinon_1 = __importDefault(require("sinon"));
17
+ const index_1 = require("../api/base/index");
18
+ const mock_1 = require("./mock");
19
+ const static_access_token_provider_1 = require("../api/auth/static-access-token-provider");
20
+ const packageJson = require("../../package.json");
21
+ describe("Base class tests.", () => {
22
+ describe("Method getDefaultHeaders", () => {
23
+ let base;
24
+ let baseUaStub;
25
+ beforeEach(() => {
26
+ base = new index_1.SmartlingBaseApi(mock_1.loggerMock);
27
+ baseUaStub = sinon_1.default.stub(base, "ua");
28
+ baseUaStub.returns("test_user_agent");
29
+ });
30
+ afterEach(() => {
31
+ baseUaStub.restore();
32
+ });
33
+ it("Auth api object is set.", () => __awaiter(void 0, void 0, void 0, function* () {
34
+ base.authApi = mock_1.authMock;
35
+ const defaultHeaders = yield base.getDefaultHeaders();
36
+ sinon_1.default.assert.calledOnce(baseUaStub);
37
+ sinon_1.default.assert.calledWithExactly(baseUaStub, packageJson.name, packageJson.version);
38
+ assert_1.default.deepEqual(defaultHeaders, {
39
+ Authorization: "test_token_type test_access_token",
40
+ "Content-Type": "application/json",
41
+ "User-Agent": "test_user_agent"
42
+ });
43
+ }));
44
+ it("Auth api object is not set.", () => __awaiter(void 0, void 0, void 0, function* () {
45
+ const defaultHeaders = yield base.getDefaultHeaders();
46
+ sinon_1.default.assert.calledOnce(baseUaStub);
47
+ sinon_1.default.assert.calledWithExactly(baseUaStub, packageJson.name, packageJson.version);
48
+ assert_1.default.deepEqual(defaultHeaders, {
49
+ "Content-Type": "application/json",
50
+ "User-Agent": "test_user_agent"
51
+ });
52
+ }));
53
+ it("Auth api object is set but undefined.", () => __awaiter(void 0, void 0, void 0, function* () {
54
+ base.authApi = undefined;
55
+ const defaultHeaders = yield base.getDefaultHeaders();
56
+ sinon_1.default.assert.calledOnce(baseUaStub);
57
+ sinon_1.default.assert.calledWithExactly(baseUaStub, packageJson.name, packageJson.version);
58
+ assert_1.default.deepEqual(defaultHeaders, {
59
+ "Content-Type": "application/json",
60
+ "User-Agent": "test_user_agent"
61
+ });
62
+ }));
63
+ });
64
+ describe("Method makeRequest", () => {
65
+ let base;
66
+ let baseFetchStub;
67
+ let baseGetDefaultHeaderSpy;
68
+ let baseUaStub;
69
+ let baseAlterRequestDataSpy;
70
+ let authResetTokenStub;
71
+ let responseMockTextStub;
72
+ let loggerDebug;
73
+ beforeEach(() => {
74
+ base = new index_1.SmartlingBaseApi(mock_1.loggerMock);
75
+ base.authApi = mock_1.authMock;
76
+ baseFetchStub = sinon_1.default.stub(base, "fetch");
77
+ baseGetDefaultHeaderSpy = sinon_1.default.spy(base, "getDefaultHeaders");
78
+ baseUaStub = sinon_1.default.stub(base, "ua");
79
+ baseAlterRequestDataSpy = sinon_1.default.spy(base, "alterRequestData");
80
+ authResetTokenStub = sinon_1.default.stub(base.authApi, "resetToken");
81
+ responseMockTextStub = sinon_1.default.stub(mock_1.responseMock, "text");
82
+ loggerDebug = sinon_1.default.stub(base.logger, "debug");
83
+ baseUaStub.returns("test_user_agent");
84
+ });
85
+ afterEach(() => {
86
+ baseFetchStub.restore();
87
+ baseGetDefaultHeaderSpy.restore();
88
+ authResetTokenStub.restore();
89
+ responseMockTextStub.restore();
90
+ baseUaStub.restore();
91
+ loggerDebug.restore();
92
+ });
93
+ it("Success (JSON response, bool result).", () => __awaiter(void 0, void 0, void 0, function* () {
94
+ const requestVerb = "POST";
95
+ const requestUri = "https://test.com";
96
+ const payload = {
97
+ foo: "bar"
98
+ };
99
+ baseFetchStub.returns(mock_1.responseMock);
100
+ responseMockTextStub.returns("{\"response\": {\"data\": {}}}");
101
+ yield base.makeRequest(requestVerb, requestUri, payload);
102
+ sinon_1.default.assert.calledOnce(baseGetDefaultHeaderSpy);
103
+ sinon_1.default.assert.calledOnce(baseAlterRequestDataSpy);
104
+ sinon_1.default.assert.calledWithExactly(baseAlterRequestDataSpy, requestUri, {
105
+ method: requestVerb,
106
+ headers: {
107
+ Authorization: "test_token_type test_access_token",
108
+ "Content-Type": "application/json",
109
+ "User-Agent": "test_user_agent"
110
+ },
111
+ body: payload
112
+ });
113
+ sinon_1.default.assert.calledOnce(baseFetchStub);
114
+ sinon_1.default.assert.calledWithExactly(baseFetchStub, requestUri, {
115
+ method: requestVerb,
116
+ headers: {
117
+ Authorization: "test_token_type test_access_token",
118
+ "Content-Type": "application/json",
119
+ "User-Agent": "test_user_agent"
120
+ },
121
+ body: payload
122
+ });
123
+ sinon_1.default.assert.calledOnce(responseMockTextStub);
124
+ sinon_1.default.assert.notCalled(authResetTokenStub);
125
+ }));
126
+ it("Success (JSON response, object result).", () => __awaiter(void 0, void 0, void 0, function* () {
127
+ const requestVerb = "POST";
128
+ const requestUri = "https://test.com";
129
+ const payload = {
130
+ foo: "bar"
131
+ };
132
+ baseFetchStub.returns(mock_1.responseMock);
133
+ responseMockTextStub.returns("{\"response\": {\"data\": {\"userIdentifier\":\"test_user_identifier\",\"foo\":{\"userSecret\":\"test_user_secret\",\"accessToken\":\"test_access_token\",\"refreshToken\":\"test_refresh_token\"},\"created\":\"2021-08-18T09:57:59.088Z\",\"modified\":\"2021-08-18T09:57:59.088Z\",\"updated\":\"2021-08-18T09:57:59.088Z\",\"createdDate\":\"2021-08-18T09:57:59.088Z\",\"modifiedDate\":\"2021-08-18T09:57:59.088Z\",\"updatedDate\":\"2021-08-18T09:57:59.088Z\",\"dueDate\":\"2021-08-18T09:57:59.088Z\",\"actionTime\":\"2021-08-18T09:57:59.088Z\",\"publishDate\":\"2021-08-18T09:57:59.088Z\",\"lastModified\":\"2021-08-18T09:57:59.088Z\",\"createdString\":\"2021-08-18T09:57:59.088Z\"}}}");
134
+ const result = yield base.makeRequest(requestVerb, requestUri, payload);
135
+ assert_1.default.equal(result.created instanceof Date, true);
136
+ assert_1.default.equal(result.modified instanceof Date, true);
137
+ assert_1.default.equal(result.updated instanceof Date, true);
138
+ assert_1.default.equal(result.createdDate instanceof Date, true);
139
+ assert_1.default.equal(result.modifiedDate instanceof Date, true);
140
+ assert_1.default.equal(result.updatedDate instanceof Date, true);
141
+ assert_1.default.equal(result.dueDate instanceof Date, true);
142
+ assert_1.default.equal(result.actionTime instanceof Date, true);
143
+ assert_1.default.equal(result.publishDate instanceof Date, true);
144
+ assert_1.default.equal(result.lastModified instanceof Date, true);
145
+ assert_1.default.equal(typeof result.createdString, "string");
146
+ sinon_1.default.assert.calledOnce(baseGetDefaultHeaderSpy);
147
+ sinon_1.default.assert.calledOnce(baseAlterRequestDataSpy);
148
+ sinon_1.default.assert.calledWithExactly(baseAlterRequestDataSpy, requestUri, {
149
+ method: requestVerb,
150
+ headers: {
151
+ Authorization: "test_token_type test_access_token",
152
+ "Content-Type": "application/json",
153
+ "User-Agent": "test_user_agent"
154
+ },
155
+ body: payload
156
+ });
157
+ sinon_1.default.assert.calledOnce(baseFetchStub);
158
+ sinon_1.default.assert.calledWithExactly(baseFetchStub, requestUri, {
159
+ method: requestVerb,
160
+ headers: {
161
+ Authorization: "test_token_type test_access_token",
162
+ "Content-Type": "application/json",
163
+ "User-Agent": "test_user_agent"
164
+ },
165
+ body: payload
166
+ });
167
+ sinon_1.default.assert.calledOnce(responseMockTextStub);
168
+ sinon_1.default.assert.notCalled(authResetTokenStub);
169
+ sinon_1.default.assert.calledOnce(loggerDebug);
170
+ sinon_1.default.assert.calledWithExactly(loggerDebug, "Received code 200; content: {\"response\":{\"data\":{\"userIdentifier\":\"test_user_xxxxx\",\"foo\":{\"userSecret\":\"test_user_xxxxx\",\"accessToken\":\"test_accesxxxxx\",\"refreshToken\":\"test_refrexxxxx\"},\"created\":\"2021-08-18T09:57:59.088Z\",\"modified\":\"2021-08-18T09:57:59.088Z\",\"updated\":\"2021-08-18T09:57:59.088Z\",\"createdDate\":\"2021-08-18T09:57:59.088Z\",\"modifiedDate\":\"2021-08-18T09:57:59.088Z\",\"updatedDate\":\"2021-08-18T09:57:59.088Z\",\"dueDate\":\"2021-08-18T09:57:59.088Z\",\"actionTime\":\"2021-08-18T09:57:59.088Z\",\"publishDate\":\"2021-08-18T09:57:59.088Z\",\"lastModified\":\"2021-08-18T09:57:59.088Z\",\"createdString\":\"2021-08-18T09:57:59.088Z\"}}}");
171
+ }));
172
+ it("Success (raw text response).", () => __awaiter(void 0, void 0, void 0, function* () {
173
+ const requestVerb = "POST";
174
+ const requestUri = "https://test.com";
175
+ const payload = {
176
+ foo: "bar"
177
+ };
178
+ baseFetchStub.returns(mock_1.responseMock);
179
+ responseMockTextStub.returns("invalid json: this test just returns raw text response but does not parse text as json");
180
+ yield base.makeRequest(requestVerb, requestUri, payload, true);
181
+ sinon_1.default.assert.calledOnce(baseGetDefaultHeaderSpy);
182
+ sinon_1.default.assert.calledOnce(baseAlterRequestDataSpy);
183
+ sinon_1.default.assert.calledWithExactly(baseAlterRequestDataSpy, requestUri, {
184
+ method: requestVerb,
185
+ headers: {
186
+ Authorization: "test_token_type test_access_token",
187
+ "Content-Type": "application/json",
188
+ "User-Agent": "test_user_agent"
189
+ },
190
+ body: payload
191
+ });
192
+ sinon_1.default.assert.calledOnce(baseFetchStub);
193
+ sinon_1.default.assert.calledWithExactly(baseFetchStub, requestUri, {
194
+ method: requestVerb,
195
+ headers: {
196
+ Authorization: "test_token_type test_access_token",
197
+ "Content-Type": "application/json",
198
+ "User-Agent": "test_user_agent"
199
+ },
200
+ body: payload
201
+ });
202
+ sinon_1.default.assert.notCalled(authResetTokenStub);
203
+ sinon_1.default.assert.calledOnce(responseMockTextStub);
204
+ }));
205
+ it("Success (raw text response): auth client is access token provider with static token", () => __awaiter(void 0, void 0, void 0, function* () {
206
+ base.authApi = new static_access_token_provider_1.StaticAccessTokenProvider("test.jwt.token", "Bearer");
207
+ const requestVerb = "POST";
208
+ const requestUri = "https://test.com";
209
+ const payload = {
210
+ foo: "bar"
211
+ };
212
+ baseFetchStub.returns(mock_1.responseMock);
213
+ responseMockTextStub.returns("invalid json: this test just returns raw text response but does not parse text as json");
214
+ yield base.makeRequest(requestVerb, requestUri, payload, true);
215
+ sinon_1.default.assert.calledOnce(baseGetDefaultHeaderSpy);
216
+ sinon_1.default.assert.calledOnce(baseAlterRequestDataSpy);
217
+ sinon_1.default.assert.calledWithExactly(baseAlterRequestDataSpy, requestUri, {
218
+ method: requestVerb,
219
+ headers: {
220
+ Authorization: "Bearer test.jwt.token",
221
+ "Content-Type": "application/json",
222
+ "User-Agent": "test_user_agent"
223
+ },
224
+ body: payload
225
+ });
226
+ sinon_1.default.assert.calledOnce(baseFetchStub);
227
+ sinon_1.default.assert.calledWithExactly(baseFetchStub, requestUri, {
228
+ method: requestVerb,
229
+ headers: {
230
+ Authorization: "Bearer test.jwt.token",
231
+ "Content-Type": "application/json",
232
+ "User-Agent": "test_user_agent"
233
+ },
234
+ body: payload
235
+ });
236
+ sinon_1.default.assert.notCalled(authResetTokenStub);
237
+ sinon_1.default.assert.calledOnce(responseMockTextStub);
238
+ }));
239
+ it("Success (re-authenticate): GET request.", () => __awaiter(void 0, void 0, void 0, function* () {
240
+ const response401Mock = {
241
+ status: 401
242
+ };
243
+ const requestVerb = "GET";
244
+ const requestUri = "https://test.com";
245
+ baseFetchStub.onCall(0).returns(response401Mock);
246
+ baseFetchStub.onCall(1).returns(mock_1.responseMock);
247
+ responseMockTextStub.returns("{\"response\": {\"data\": {}}}");
248
+ base.setOptions({
249
+ headers: {
250
+ "X-SL-ServiceOrigin": "foo-bar"
251
+ }
252
+ });
253
+ yield base.makeRequest(requestVerb, requestUri);
254
+ sinon_1.default.assert.calledTwice(baseGetDefaultHeaderSpy);
255
+ sinon_1.default.assert.calledTwice(baseAlterRequestDataSpy);
256
+ sinon_1.default.assert.calledWithExactly(baseAlterRequestDataSpy, requestUri, {
257
+ method: requestVerb,
258
+ headers: {
259
+ Authorization: "test_token_type test_access_token",
260
+ "Content-Type": "application/json",
261
+ "User-Agent": "test_user_agent",
262
+ "X-SL-ServiceOrigin": "foo-bar"
263
+ }
264
+ });
265
+ sinon_1.default.assert.calledTwice(baseFetchStub);
266
+ sinon_1.default.assert.calledWithExactly(baseFetchStub.getCall(0), requestUri, {
267
+ method: requestVerb,
268
+ headers: {
269
+ Authorization: "test_token_type test_access_token",
270
+ "Content-Type": "application/json",
271
+ "User-Agent": "test_user_agent",
272
+ "X-SL-ServiceOrigin": "foo-bar"
273
+ }
274
+ });
275
+ sinon_1.default.assert.calledOnce(authResetTokenStub);
276
+ sinon_1.default.assert.calledWithExactly(baseFetchStub.getCall(1), requestUri, {
277
+ method: requestVerb,
278
+ headers: {
279
+ Authorization: "test_token_type test_access_token",
280
+ "Content-Type": "application/json",
281
+ "User-Agent": "test_user_agent",
282
+ "X-SL-ServiceOrigin": "foo-bar"
283
+ }
284
+ });
285
+ sinon_1.default.assert.calledOnce(responseMockTextStub);
286
+ }));
287
+ it("Success (re-authenticate): non-GET request.", () => __awaiter(void 0, void 0, void 0, function* () {
288
+ const response401Mock = {
289
+ status: 401
290
+ };
291
+ const requestVerb = "POST";
292
+ const requestUri = "https://test.com";
293
+ baseFetchStub.onCall(0).returns(response401Mock);
294
+ baseFetchStub.onCall(1).returns(mock_1.responseMock);
295
+ responseMockTextStub.returns("{\"response\": {\"data\": {}}}");
296
+ yield base.makeRequest(requestVerb, requestUri, {
297
+ foo: "bar"
298
+ });
299
+ sinon_1.default.assert.calledTwice(baseGetDefaultHeaderSpy);
300
+ sinon_1.default.assert.calledTwice(baseAlterRequestDataSpy);
301
+ sinon_1.default.assert.calledWithExactly(baseAlterRequestDataSpy, requestUri, {
302
+ method: requestVerb,
303
+ headers: {
304
+ Authorization: "test_token_type test_access_token",
305
+ "Content-Type": "application/json",
306
+ "User-Agent": "test_user_agent"
307
+ },
308
+ body: {
309
+ foo: "bar"
310
+ }
311
+ });
312
+ sinon_1.default.assert.calledTwice(baseFetchStub);
313
+ sinon_1.default.assert.calledWithExactly(baseFetchStub.getCall(0), requestUri, {
314
+ method: requestVerb,
315
+ headers: {
316
+ Authorization: "test_token_type test_access_token",
317
+ "Content-Type": "application/json",
318
+ "User-Agent": "test_user_agent"
319
+ },
320
+ body: {
321
+ foo: "bar"
322
+ }
323
+ });
324
+ sinon_1.default.assert.calledOnce(authResetTokenStub);
325
+ sinon_1.default.assert.calledWithExactly(baseFetchStub.getCall(1), requestUri, {
326
+ method: requestVerb,
327
+ headers: {
328
+ Authorization: "test_token_type test_access_token",
329
+ "Content-Type": "application/json",
330
+ "User-Agent": "test_user_agent"
331
+ },
332
+ body: {
333
+ foo: "bar"
334
+ }
335
+ });
336
+ sinon_1.default.assert.calledOnce(responseMockTextStub);
337
+ }));
338
+ it("GET: success (payload is set).", () => __awaiter(void 0, void 0, void 0, function* () {
339
+ const requestVerb = "GET";
340
+ const requestUri = "https://test.com";
341
+ const payload = {
342
+ foo: "bar"
343
+ };
344
+ baseFetchStub.returns(mock_1.responseMock);
345
+ responseMockTextStub.returns("{\"response\": {\"data\": {}}}");
346
+ yield base.makeRequest(requestVerb, requestUri, payload);
347
+ sinon_1.default.assert.calledOnce(baseGetDefaultHeaderSpy);
348
+ sinon_1.default.assert.calledOnce(baseAlterRequestDataSpy);
349
+ sinon_1.default.assert.calledWithExactly(baseAlterRequestDataSpy, `${requestUri}?foo=bar`, {
350
+ method: requestVerb,
351
+ headers: {
352
+ Authorization: "test_token_type test_access_token",
353
+ "Content-Type": "application/json",
354
+ "User-Agent": "test_user_agent"
355
+ }
356
+ });
357
+ sinon_1.default.assert.calledOnce(baseFetchStub);
358
+ sinon_1.default.assert.calledWithExactly(baseFetchStub, `${requestUri}?foo=bar`, {
359
+ method: requestVerb,
360
+ headers: {
361
+ Authorization: "test_token_type test_access_token",
362
+ "Content-Type": "application/json",
363
+ "User-Agent": "test_user_agent"
364
+ }
365
+ });
366
+ sinon_1.default.assert.calledOnce(responseMockTextStub);
367
+ sinon_1.default.assert.notCalled(authResetTokenStub);
368
+ }));
369
+ it("GET: success (payload is not set).", () => __awaiter(void 0, void 0, void 0, function* () {
370
+ const requestVerb = "GET";
371
+ const requestUri = "https://test.com";
372
+ baseFetchStub.returns(mock_1.responseMock);
373
+ responseMockTextStub.returns("{\"response\": {\"data\": {}}}");
374
+ yield base.makeRequest(requestVerb, requestUri);
375
+ sinon_1.default.assert.calledOnce(baseGetDefaultHeaderSpy);
376
+ sinon_1.default.assert.calledOnce(baseAlterRequestDataSpy);
377
+ sinon_1.default.assert.calledWithExactly(baseAlterRequestDataSpy, requestUri, {
378
+ method: requestVerb,
379
+ headers: {
380
+ Authorization: "test_token_type test_access_token",
381
+ "Content-Type": "application/json",
382
+ "User-Agent": "test_user_agent"
383
+ }
384
+ });
385
+ sinon_1.default.assert.calledOnce(baseFetchStub);
386
+ sinon_1.default.assert.calledWithExactly(baseFetchStub, requestUri, {
387
+ method: requestVerb,
388
+ headers: {
389
+ Authorization: "test_token_type test_access_token",
390
+ "Content-Type": "application/json",
391
+ "User-Agent": "test_user_agent"
392
+ }
393
+ });
394
+ sinon_1.default.assert.calledOnce(responseMockTextStub);
395
+ sinon_1.default.assert.notCalled(authResetTokenStub);
396
+ }));
397
+ it("Custom options for api object (timeout)", () => __awaiter(void 0, void 0, void 0, function* () {
398
+ const requestVerb = "POST";
399
+ const requestUri = "https://test.com";
400
+ const payload = {
401
+ foo: "bar"
402
+ };
403
+ baseFetchStub.returns(mock_1.responseMock);
404
+ responseMockTextStub.returns("{\"response\": {\"data\": {}}}");
405
+ base.setOptions({
406
+ timeout: 10000,
407
+ headers: {
408
+ foo: "bar"
409
+ }
410
+ });
411
+ yield base.makeRequest(requestVerb, requestUri, payload);
412
+ sinon_1.default.assert.calledOnce(baseGetDefaultHeaderSpy);
413
+ sinon_1.default.assert.calledOnce(baseAlterRequestDataSpy);
414
+ sinon_1.default.assert.calledWithExactly(baseAlterRequestDataSpy, requestUri, {
415
+ method: requestVerb,
416
+ headers: {
417
+ Authorization: "test_token_type test_access_token",
418
+ "Content-Type": "application/json",
419
+ "User-Agent": "test_user_agent",
420
+ foo: "bar"
421
+ },
422
+ body: payload,
423
+ timeout: 10000
424
+ });
425
+ sinon_1.default.assert.calledOnce(baseFetchStub);
426
+ sinon_1.default.assert.calledWithExactly(baseFetchStub, requestUri, {
427
+ method: requestVerb,
428
+ headers: {
429
+ Authorization: "test_token_type test_access_token",
430
+ "Content-Type": "application/json",
431
+ "User-Agent": "test_user_agent",
432
+ foo: "bar"
433
+ },
434
+ body: payload,
435
+ timeout: 10000
436
+ });
437
+ sinon_1.default.assert.calledOnce(responseMockTextStub);
438
+ sinon_1.default.assert.notCalled(authResetTokenStub);
439
+ }));
440
+ it("Fail (non 200/401 response).", () => __awaiter(void 0, void 0, void 0, function* () {
441
+ const response400Mock = {
442
+ status: 400,
443
+ text: () => ({ response: { code: "VALIDATION_ERROR", errors: [] } }),
444
+ headers: {
445
+ get: () => "test-request-id"
446
+ }
447
+ };
448
+ const requestVerb = "POST";
449
+ const requestUri = "https://test.com";
450
+ const payload = {
451
+ foo: "bar"
452
+ };
453
+ baseFetchStub.returns(response400Mock);
454
+ try {
455
+ yield base.makeRequest(requestVerb, requestUri, payload);
456
+ throw new Error("Exception is not thrown.");
457
+ }
458
+ catch (e) {
459
+ assert_1.default.equal(e.constructor.name, "SmartlingException");
460
+ assert_1.default.equal(e.message, "Request for https://test.com failed");
461
+ assert_1.default.deepEqual(e.payload, {
462
+ statusCode: 400,
463
+ errorResponse: { response: { code: "VALIDATION_ERROR", errors: [] } },
464
+ requestId: "test-request-id"
465
+ });
466
+ assert_1.default.equal(e.nestedException, null);
467
+ }
468
+ finally {
469
+ sinon_1.default.assert.calledOnce(baseGetDefaultHeaderSpy);
470
+ sinon_1.default.assert.calledOnce(baseAlterRequestDataSpy);
471
+ sinon_1.default.assert.calledWithExactly(baseAlterRequestDataSpy, requestUri, {
472
+ method: requestVerb,
473
+ headers: {
474
+ Authorization: "test_token_type test_access_token",
475
+ "Content-Type": "application/json",
476
+ "User-Agent": "test_user_agent"
477
+ },
478
+ body: payload
479
+ });
480
+ sinon_1.default.assert.calledOnce(baseFetchStub);
481
+ sinon_1.default.assert.calledWithExactly(baseFetchStub, requestUri, {
482
+ method: requestVerb,
483
+ headers: {
484
+ Authorization: "test_token_type test_access_token",
485
+ "Content-Type": "application/json",
486
+ "User-Agent": "test_user_agent"
487
+ },
488
+ body: payload
489
+ });
490
+ sinon_1.default.assert.notCalled(authResetTokenStub);
491
+ sinon_1.default.assert.notCalled(responseMockTextStub);
492
+ }
493
+ }));
494
+ it("Fail (json parsing failed).", () => __awaiter(void 0, void 0, void 0, function* () {
495
+ const requestVerb = "POST";
496
+ const requestUri = "https://test.com";
497
+ const payload = {
498
+ foo: "bar"
499
+ };
500
+ mock_1.responseMock.headers = {
501
+ get: () => "test-request-id"
502
+ };
503
+ baseFetchStub.returns(mock_1.responseMock);
504
+ responseMockTextStub.onCall(0).resolves("invalid json {");
505
+ try {
506
+ yield base.makeRequest(requestVerb, requestUri, payload);
507
+ throw new Error("Exception is not thrown.");
508
+ }
509
+ catch (e) {
510
+ assert_1.default.equal(e.constructor.name, "SmartlingException");
511
+ assert_1.default.equal(e.message, "Couldn't parse response json");
512
+ assert_1.default.deepEqual(e.payload, { statusCode: 200, errorResponse: "invalid json {", requestId: "test-request-id" });
513
+ }
514
+ finally {
515
+ sinon_1.default.assert.calledOnce(baseGetDefaultHeaderSpy);
516
+ sinon_1.default.assert.calledOnce(baseAlterRequestDataSpy);
517
+ sinon_1.default.assert.calledWithExactly(baseAlterRequestDataSpy, requestUri, {
518
+ method: requestVerb,
519
+ headers: {
520
+ Authorization: "test_token_type test_access_token",
521
+ "Content-Type": "application/json",
522
+ "User-Agent": "test_user_agent"
523
+ },
524
+ body: payload
525
+ });
526
+ sinon_1.default.assert.calledOnce(baseFetchStub);
527
+ sinon_1.default.assert.calledWithExactly(baseFetchStub, requestUri, {
528
+ method: requestVerb,
529
+ headers: {
530
+ Authorization: "test_token_type test_access_token",
531
+ "Content-Type": "application/json",
532
+ "User-Agent": "test_user_agent"
533
+ },
534
+ body: payload
535
+ });
536
+ sinon_1.default.assert.notCalled(authResetTokenStub);
537
+ sinon_1.default.assert.calledOnce(responseMockTextStub);
538
+ }
539
+ }));
540
+ });
541
+ it("Check sensitive info replacer", () => __awaiter(void 0, void 0, void 0, function* () {
542
+ const json = {
543
+ foo: "bar_test",
544
+ userIdentifier: "userIdentifier_test",
545
+ userSecret: "userSecret_test",
546
+ accessToken: "accessToken_test",
547
+ refreshToken: "refreshToken_test"
548
+ };
549
+ assert_1.default.equal(JSON.stringify(json, index_1.SmartlingBaseApi.sensitiveReplacer), JSON.stringify({
550
+ foo: "bar_test",
551
+ userIdentifier: "userIdentixxxxx",
552
+ userSecret: "userSecretxxxxx",
553
+ accessToken: "accessTokexxxxx",
554
+ refreshToken: "refreshTokxxxxx"
555
+ }));
556
+ }));
557
+ });
558
+ //# sourceMappingURL=base.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.spec.js","sourceRoot":"","sources":["../../test/base.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};