@mojaloop/sdk-scheme-adapter 18.0.0 → 18.0.2

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 (119) hide show
  1. package/.dockerignore +18 -0
  2. package/.eslintignore +2 -0
  3. package/.ncurc.yaml +7 -0
  4. package/CHANGELOG.md +20 -0
  5. package/CODEOWNERS +31 -1
  6. package/README.md +1 -0
  7. package/audit-resolve.json +35 -0
  8. package/package.json +13 -13
  9. package/test/__mocks__/@mojaloop/sdk-standard-components.js +0 -151
  10. package/test/__mocks__/javascript-state-machine.js +0 -21
  11. package/test/__mocks__/redis.js +0 -78
  12. package/test/__mocks__/uuidv4.js +0 -16
  13. package/test/config/integration.env +0 -146
  14. package/test/integration/lib/Outbound/data/quotesPostRequest.json +0 -52
  15. package/test/integration/lib/Outbound/data/transfersPostRequest.json +0 -24
  16. package/test/integration/lib/Outbound/parties.test.js +0 -31
  17. package/test/integration/lib/Outbound/quotes.test.js +0 -62
  18. package/test/integration/lib/Outbound/simpleTransfers.test.js +0 -70
  19. package/test/integration/lib/cache.test.js +0 -79
  20. package/test/integration/testEnv.js +0 -4
  21. package/test/unit/ControlClient.test.js +0 -69
  22. package/test/unit/ControlServer/events.js +0 -41
  23. package/test/unit/ControlServer/index.js +0 -227
  24. package/test/unit/ControlServer.test.js +0 -66
  25. package/test/unit/InboundServer.test.js +0 -443
  26. package/test/unit/TestServer.test.js +0 -392
  27. package/test/unit/api/accounts/accounts.test.js +0 -128
  28. package/test/unit/api/accounts/data/postAccountsBody.json +0 -7
  29. package/test/unit/api/accounts/data/postAccountsErrorMojaloopResponse.json +0 -33
  30. package/test/unit/api/accounts/data/postAccountsErrorTimeoutResponse.json +0 -19
  31. package/test/unit/api/accounts/data/postAccountsSuccessResponse.json +0 -31
  32. package/test/unit/api/accounts/data/postAccountsSuccessResponseWithError1.json +0 -34
  33. package/test/unit/api/accounts/data/postAccountsSuccessResponseWithError2.json +0 -39
  34. package/test/unit/api/accounts/utils.js +0 -79
  35. package/test/unit/api/proxy/data/proxyConfig.yaml +0 -82
  36. package/test/unit/api/proxy/data/requestBody.json +0 -22
  37. package/test/unit/api/proxy/data/requestHeaders.json +0 -5
  38. package/test/unit/api/proxy/data/requestQuery.json +0 -6
  39. package/test/unit/api/proxy/data/responseBody.json +0 -21
  40. package/test/unit/api/proxy/data/responseHeaders.json +0 -5
  41. package/test/unit/api/proxy/proxy.test.js +0 -220
  42. package/test/unit/api/proxy/utils.js +0 -79
  43. package/test/unit/api/transfers/data/getTransfersCommittedResponse.json +0 -24
  44. package/test/unit/api/transfers/data/getTransfersErrorNotFound.json +0 -18
  45. package/test/unit/api/transfers/data/postQuotesBody.json +0 -52
  46. package/test/unit/api/transfers/data/postTransfersBadBody.json +0 -17
  47. package/test/unit/api/transfers/data/postTransfersBody.json +0 -24
  48. package/test/unit/api/transfers/data/postTransfersErrorMojaloopResponse.json +0 -62
  49. package/test/unit/api/transfers/data/postTransfersErrorTimeoutResponse.json +0 -48
  50. package/test/unit/api/transfers/data/postTransfersSimpleBody.json +0 -26
  51. package/test/unit/api/transfers/data/postTransfersSuccessResponse.json +0 -128
  52. package/test/unit/api/transfers/data/putPartiesBody.json +0 -20
  53. package/test/unit/api/transfers/data/putQuotesBody.json +0 -37
  54. package/test/unit/api/transfers/data/putTransfersBody.json +0 -17
  55. package/test/unit/api/transfers/transfers.test.js +0 -191
  56. package/test/unit/api/transfers/utils.js +0 -264
  57. package/test/unit/api/utils.js +0 -86
  58. package/test/unit/config.test.js +0 -119
  59. package/test/unit/data/commonHttpHeaders.json +0 -7
  60. package/test/unit/data/defaultConfig.json +0 -70
  61. package/test/unit/data/postQuotesBody.json +0 -52
  62. package/test/unit/data/putParticipantsBody.json +0 -12
  63. package/test/unit/data/putPartiesBody.json +0 -20
  64. package/test/unit/data/testFile.json +0 -29
  65. package/test/unit/data/testFile.yaml +0 -14
  66. package/test/unit/inboundApi/data/mockArguments.json +0 -117
  67. package/test/unit/inboundApi/data/mockTransactionRequest.json +0 -42
  68. package/test/unit/inboundApi/handlers.test.js +0 -786
  69. package/test/unit/index.test.js +0 -88
  70. package/test/unit/lib/cache.test.js +0 -145
  71. package/test/unit/lib/model/AccountsModel.test.js +0 -124
  72. package/test/unit/lib/model/InboundTransfersModel.test.js +0 -889
  73. package/test/unit/lib/model/OutboundBulkQuotesModel.test.js +0 -253
  74. package/test/unit/lib/model/OutboundBulkTransfersModel.test.js +0 -247
  75. package/test/unit/lib/model/OutboundRequestToPayModel.test.js +0 -166
  76. package/test/unit/lib/model/OutboundRequestToPayTransferModel.test.js +0 -245
  77. package/test/unit/lib/model/OutboundTransfersModel.test.js +0 -1579
  78. package/test/unit/lib/model/PartiesModel.test.js +0 -478
  79. package/test/unit/lib/model/QuotesModel.test.js +0 -477
  80. package/test/unit/lib/model/TransfersModel.test.js +0 -481
  81. package/test/unit/lib/model/common/PersistentStateMachine.test.js +0 -178
  82. package/test/unit/lib/model/data/authorizationsResponse.json +0 -13
  83. package/test/unit/lib/model/data/bulkQuoteRequest.json +0 -27
  84. package/test/unit/lib/model/data/bulkQuoteResponse.json +0 -35
  85. package/test/unit/lib/model/data/bulkTransferFulfil.json +0 -13
  86. package/test/unit/lib/model/data/bulkTransferRequest.json +0 -29
  87. package/test/unit/lib/model/data/defaultConfig.json +0 -59
  88. package/test/unit/lib/model/data/getBulkTransfersBackendResponse.json +0 -42
  89. package/test/unit/lib/model/data/getBulkTransfersMojaloopResponse.json +0 -22
  90. package/test/unit/lib/model/data/getTransfersBackendResponse.json +0 -34
  91. package/test/unit/lib/model/data/getTransfersMojaloopResponse.json +0 -17
  92. package/test/unit/lib/model/data/mockArguments.json +0 -188
  93. package/test/unit/lib/model/data/mockTxnRequestsArguments.json +0 -63
  94. package/test/unit/lib/model/data/notificationAbortedToPayee.json +0 -10
  95. package/test/unit/lib/model/data/notificationReservedToPayee.json +0 -10
  96. package/test/unit/lib/model/data/notificationToPayee.json +0 -10
  97. package/test/unit/lib/model/data/payeeParty.json +0 -18
  98. package/test/unit/lib/model/data/putQuotesResponse.json +0 -33
  99. package/test/unit/lib/model/data/putTransfersResponse.json +0 -5
  100. package/test/unit/lib/model/data/quoteResponse.json +0 -42
  101. package/test/unit/lib/model/data/requestToPayRequest.json +0 -20
  102. package/test/unit/lib/model/data/requestToPayTransferRequest.json +0 -27
  103. package/test/unit/lib/model/data/transactionRequestResponse.json +0 -18
  104. package/test/unit/lib/model/data/transferFulfil.json +0 -10
  105. package/test/unit/lib/model/data/transferRequest.json +0 -26
  106. package/test/unit/lib/model/mockedLibRequests.js +0 -74
  107. package/test/unit/mockLogger.js +0 -39
  108. package/test/unit/outboundApi/data/bulkQuoteRequest.json +0 -28
  109. package/test/unit/outboundApi/data/bulkTransferRequest.json +0 -28
  110. package/test/unit/outboundApi/data/mockBulkQuoteError.json +0 -45
  111. package/test/unit/outboundApi/data/mockBulkTransferError.json +0 -48
  112. package/test/unit/outboundApi/data/mockError.json +0 -41
  113. package/test/unit/outboundApi/data/mockGetPartiesError.json +0 -4
  114. package/test/unit/outboundApi/data/mockRequestToPayError.json +0 -32
  115. package/test/unit/outboundApi/data/mockRequestToPayTransferError.json +0 -39
  116. package/test/unit/outboundApi/data/requestToPay.json +0 -21
  117. package/test/unit/outboundApi/data/requestToPayTransferRequest.json +0 -20
  118. package/test/unit/outboundApi/data/transferRequest.json +0 -21
  119. package/test/unit/outboundApi/handlers.test.js +0 -887
@@ -1,786 +0,0 @@
1
- /**************************************************************************
2
- * (C) Copyright ModusBox Inc. 2019 - All rights reserved. *
3
- * *
4
- * This file is made available under the terms of the license agreement *
5
- * specified in the corresponding source code repository. *
6
- * *
7
- * ORIGINAL AUTHOR: *
8
- * Vassilis Barzokas - vassilis.barzokas@modusbox.com *
9
- **************************************************************************/
10
-
11
- 'use strict';
12
-
13
- jest.mock('~/lib/model');
14
-
15
- const handlers = require('~/InboundServer/handlers');
16
- const Model = require('~/lib/model').InboundTransfersModel;
17
- const QuotesModel = require('~/lib/model').QuotesModel;
18
- const PartiesModel = require('~/lib/model').PartiesModel;
19
- const TransfersModel = require('~/lib/model').TransfersModel;
20
-
21
- const mockArguments = require('./data/mockArguments');
22
- const mockTransactionRequestData = require('./data/mockTransactionRequest');
23
- const { Logger } = require('@mojaloop/sdk-standard-components');
24
-
25
- const FSPIOPTransferStateEnum = require('@mojaloop/central-services-shared').Enum.Transfers.TransferState;
26
-
27
- describe('Inbound API handlers:', () => {
28
- let mockArgs;
29
- let mockTransactionRequest;
30
-
31
- beforeEach(() => {
32
- mockArgs = JSON.parse(JSON.stringify(mockArguments));
33
- mockTransactionRequest = JSON.parse(JSON.stringify(mockTransactionRequestData));
34
- });
35
-
36
- describe('POST /quotes', () => {
37
-
38
- let mockContext;
39
-
40
- beforeEach(() => {
41
- mockContext = {
42
- request: {
43
- body: mockArgs.quoteRequest,
44
- headers: {
45
- 'fspiop-source': 'foo'
46
- }
47
- },
48
- response: {},
49
- state: {
50
- conf: {},
51
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
52
- }
53
- };
54
-
55
- });
56
-
57
- test('calls `model.quoteRequest` with the expected arguments.', async () => {
58
- const quoteRequestSpy = jest.spyOn(Model.prototype, 'quoteRequest');
59
-
60
- await expect(handlers['/quotes'].post(mockContext)).resolves.toBe(undefined);
61
-
62
- expect(quoteRequestSpy).toHaveBeenCalledTimes(1);
63
- expect(quoteRequestSpy.mock.calls[0][0]).toStrictEqual(mockContext.request);
64
- expect(quoteRequestSpy.mock.calls[0][1]).toBe(mockContext.request.headers['fspiop-source']);
65
- });
66
-
67
-
68
- });
69
-
70
- describe('GET /quotes', () => {
71
-
72
- let mockContext;
73
-
74
- beforeEach(() => {
75
- mockContext = {
76
- request: {
77
- headers: {
78
- 'fspiop-source': 'foo'
79
- }
80
- },
81
- response: {},
82
- state: {
83
- conf: {},
84
- path: {
85
- params: {
86
- 'ID': '1234567890'
87
- }
88
- },
89
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
90
- }
91
- };
92
-
93
- });
94
-
95
- test('calls `model.getQuoteRequest` with the expected arguments.', async () => {
96
- const getQuoteRequestSpy = jest.spyOn(Model.prototype, 'getQuoteRequest');
97
-
98
- await expect(handlers['/quotes/{ID}'].get(mockContext)).resolves.toBe(undefined);
99
-
100
- expect(getQuoteRequestSpy).toHaveBeenCalledTimes(1);
101
- expect(getQuoteRequestSpy.mock.calls[0][1]).toBe(mockContext.request.headers['fspiop-source']);
102
-
103
- });
104
- });
105
-
106
- describe('PUT /quotes', () => {
107
-
108
- let mockContext;
109
-
110
- beforeEach(() => {
111
- mockContext = {
112
- request: {
113
- body: { the: 'mocked-body' },
114
- headers: {
115
- 'fspiop-source': 'foo'
116
- }
117
- },
118
- response: {},
119
- state: {
120
- conf: {},
121
- path: {
122
- params: {
123
- 'ID': '1234567890'
124
- }
125
- },
126
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
127
- cache: {
128
- publish: jest.fn(() => Promise.resolve(true))
129
- }
130
- }
131
- };
132
-
133
- });
134
-
135
- test('calls `QuotesModel.triggerDeferredJobSpy` with the expected arguments.', async () => {
136
- const triggerDeferredJobSpy = jest.spyOn(QuotesModel, 'triggerDeferredJob');
137
-
138
- await expect(handlers['/quotes/{ID}'].put(mockContext)).resolves.toBe(undefined);
139
-
140
- expect(triggerDeferredJobSpy).toHaveBeenCalledTimes(1);
141
- expect(triggerDeferredJobSpy).toBeCalledWith({
142
- cache: mockContext.state.cache,
143
- message: {
144
- body: mockContext.request.body,
145
- headers: mockContext.request.headers,
146
- },
147
- args: {
148
- quoteId: mockContext.state.path.params.ID
149
- }
150
- });
151
- });
152
- });
153
-
154
- describe('POST /bulkQuotes', () => {
155
-
156
- let mockContext;
157
-
158
- beforeEach(() => {
159
- mockContext = {
160
- request: {
161
- body: mockArgs.bulkQuoteRequest,
162
- headers: {
163
- 'fspiop-source': 'foo'
164
- }
165
- },
166
- response: {},
167
- state: {
168
- conf: {},
169
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
170
- }
171
- };
172
-
173
- });
174
-
175
- test('calls `model.bulkQuoteRequest` with the expected arguments.', async () => {
176
- const bulkQuoteRequestSpy = jest.spyOn(Model.prototype, 'bulkQuoteRequest');
177
-
178
- await expect(handlers['/bulkQuotes'].post(mockContext)).resolves.toBe(undefined);
179
-
180
- expect(bulkQuoteRequestSpy).toHaveBeenCalledTimes(1);
181
- expect(bulkQuoteRequestSpy.mock.calls[0][0]).toBe(mockContext.request.body);
182
- expect(bulkQuoteRequestSpy.mock.calls[0][1]).toBe(mockContext.request.headers['fspiop-source']);
183
- });
184
- });
185
-
186
- describe('PUT /bulkQuotes/{ID}', () => {
187
-
188
- let mockContext;
189
-
190
- beforeEach(() => {
191
-
192
- mockContext = {
193
- request: {
194
- body: mockArgs.bulkQuotePutRequest,
195
- headers: {
196
- 'fspiop-source': 'foo'
197
- }
198
- },
199
- response: {},
200
- state: {
201
- conf: {},
202
- path: {
203
- params: {
204
- 'ID': '1234567890'
205
- }
206
- },
207
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
208
- cache: {
209
- publish: async () => Promise.resolve(true)
210
- }
211
- }
212
- };
213
- });
214
-
215
- test('calls `ctx.state.cache.publish` with the expected arguments.', async () => {
216
- const bulkQuotesSpy = jest.spyOn(mockContext.state.cache, 'publish');
217
-
218
- await expect(handlers['/bulkQuotes/{ID}'].put(mockContext)).resolves.toBe(undefined);
219
- expect(mockContext.response.status).toBe(200);
220
- expect(bulkQuotesSpy).toHaveBeenCalledTimes(1);
221
- expect(bulkQuotesSpy.mock.calls[0][1]).toMatchObject({
222
- type: 'bulkQuoteResponse',
223
- data: {
224
- body: mockContext.request.body,
225
- headers: mockContext.request.headers,
226
- }
227
- });
228
- });
229
- });
230
-
231
- describe('PUT /bulkQuotes/{ID}/error', () => {
232
-
233
- let mockContext;
234
-
235
- beforeEach(() => {
236
-
237
- mockContext = {
238
- request: {
239
- body: {
240
- errorInformation: {
241
- errorCode: '5100',
242
- errorDescription: 'Fake error'
243
- }
244
- },
245
- headers: {
246
- 'fspiop-source': 'foo'
247
- }
248
- },
249
- response: {},
250
- state: {
251
- conf: {},
252
- path: {
253
- params: {
254
- 'ID': '1234567890'
255
- }
256
- },
257
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
258
- cache: {
259
- publish: async () => Promise.resolve(true)
260
- }
261
- }
262
- };
263
- });
264
-
265
- test('calls `ctx.state.cache.publish` with the expected arguments.', async () => {
266
- const bulkQuotesSpy = jest.spyOn(mockContext.state.cache, 'publish');
267
-
268
- await expect(handlers['/bulkQuotes/{ID}/error'].put(mockContext)).resolves.toBe(undefined);
269
- expect(mockContext.response.status).toBe(200);
270
- expect(bulkQuotesSpy).toHaveBeenCalledTimes(1);
271
- expect(bulkQuotesSpy.mock.calls[0][1]).toMatchObject({
272
- type: 'bulkQuoteResponseError',
273
- data: {
274
- body: mockContext.request.body,
275
- headers: mockContext.request.headers,
276
- }
277
- });
278
- });
279
- });
280
-
281
- describe('GET /bulkQuotes/{ID}', () => {
282
-
283
- let mockContext;
284
-
285
- beforeEach(() => {
286
-
287
- mockContext = {
288
- request: {
289
- headers: {
290
- 'fspiop-source': 'foo'
291
- }
292
- },
293
- response: {},
294
- state: {
295
- conf: {},
296
- path: {
297
- params: {
298
- 'ID': '1234567890'
299
- }
300
- },
301
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
302
- }
303
- };
304
- });
305
-
306
- test('calls `model.getBulkQuote` with the expected arguments.', async () => {
307
- const bulkQuotesSpy = jest.spyOn(Model.prototype, 'getBulkQuote');
308
-
309
- await expect(handlers['/bulkQuotes/{ID}'].get(mockContext)).resolves.toBe(undefined);
310
-
311
- expect(bulkQuotesSpy).toHaveBeenCalledTimes(1);
312
- expect(bulkQuotesSpy.mock.calls[0][1]).toBe(mockContext.request.headers['fspiop-source']);
313
- });
314
- });
315
-
316
- describe('POST /bulkTransfers', () => {
317
-
318
- let mockContext;
319
-
320
- beforeEach(() => {
321
- mockContext = {
322
- request: {
323
- body: mockArgs.bulkTransferRequest,
324
- headers: {
325
- 'fspiop-source': 'foo'
326
- }
327
- },
328
- response: {},
329
- state: {
330
- conf: {},
331
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
332
- }
333
- };
334
-
335
- });
336
-
337
- test('calls `model.prepareBulkTransfer` with the expected arguments.', async () => {
338
- const bulkTransferRequestSpy = jest.spyOn(Model.prototype, 'prepareBulkTransfer');
339
-
340
- await expect(handlers['/bulkTransfers'].post(mockContext)).resolves.toBe(undefined);
341
-
342
- expect(bulkTransferRequestSpy).toHaveBeenCalledTimes(1);
343
- expect(bulkTransferRequestSpy.mock.calls[0][0]).toBe(mockContext.request.body);
344
- expect(bulkTransferRequestSpy.mock.calls[0][1]).toBe(mockContext.request.headers['fspiop-source']);
345
- });
346
- });
347
-
348
- describe('PUT /bulkTransfers/{ID}', () => {
349
-
350
- let mockContext;
351
-
352
- beforeEach(() => {
353
-
354
- mockContext = {
355
- request: {
356
- body: mockArgs.bulkTransferPutRequest,
357
- headers: {
358
- 'fspiop-source': 'foo'
359
- }
360
- },
361
- response: {},
362
- state: {
363
- conf: {},
364
- path: {
365
- params: {
366
- 'ID': '1234567890'
367
- }
368
- },
369
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
370
- cache: {
371
- publish: async () => Promise.resolve(true)
372
- }
373
- }
374
- };
375
- });
376
-
377
- test('calls `ctx.state.cache.publish` with the expected arguments.', async () => {
378
- const bulkTransfersSpy = jest.spyOn(mockContext.state.cache, 'publish');
379
-
380
- await expect(handlers['/bulkTransfers/{ID}'].put(mockContext)).resolves.toBe(undefined);
381
- expect(mockContext.response.status).toBe(200);
382
- expect(bulkTransfersSpy).toHaveBeenCalledTimes(1);
383
- expect(bulkTransfersSpy.mock.calls[0][1]).toMatchObject({
384
- type: 'bulkTransferResponse',
385
- data: {
386
- body: mockContext.request.body,
387
- headers: mockContext.request.headers,
388
- }
389
- });
390
- });
391
- });
392
-
393
- describe('PUT /bulkTransfers/{ID}/error', () => {
394
-
395
- let mockContext;
396
-
397
- beforeEach(() => {
398
-
399
- mockContext = {
400
- request: {
401
- body: {
402
- errorInformation: {
403
- errorCode: '5100',
404
- errorDescription: 'Fake error'
405
- }
406
- },
407
- headers: {
408
- 'fspiop-source': 'foo'
409
- }
410
- },
411
- response: {},
412
- state: {
413
- conf: {},
414
- path: {
415
- params: {
416
- 'ID': '1234567890'
417
- }
418
- },
419
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
420
- cache: {
421
- publish: async () => Promise.resolve(true)
422
- }
423
- }
424
- };
425
- });
426
-
427
- test('calls `ctx.state.cache.publish` with the expected arguments.', async () => {
428
- const bulkTransfersSpy = jest.spyOn(mockContext.state.cache, 'publish');
429
-
430
- await expect(handlers['/bulkTransfers/{ID}/error'].put(mockContext)).resolves.toBe(undefined);
431
- expect(mockContext.response.status).toBe(200);
432
- expect(bulkTransfersSpy).toHaveBeenCalledTimes(1);
433
- expect(bulkTransfersSpy.mock.calls[0][1]).toMatchObject({
434
- type: 'bulkTransferResponseError',
435
- data: {
436
- body: mockContext.request.body,
437
- headers: mockContext.request.headers,
438
- }
439
- });
440
- });
441
- });
442
-
443
- describe('GET /bulkTransfers/{ID}', () => {
444
-
445
- let mockContext;
446
-
447
- beforeEach(() => {
448
-
449
- mockContext = {
450
- request: {
451
- headers: {
452
- 'fspiop-source': 'foo'
453
- }
454
- },
455
- response: {},
456
- state: {
457
- conf: {},
458
- path: {
459
- params: {
460
- 'ID': '1234567890'
461
- }
462
- },
463
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
464
- }
465
- };
466
- });
467
-
468
- test('calls `model.getBulkTransfer` with the expected arguments.', async () => {
469
- const bulkTransfersSpy = jest.spyOn(Model.prototype, 'getBulkTransfer');
470
-
471
- await expect(handlers['/bulkTransfers/{ID}'].get(mockContext)).resolves.toBe(undefined);
472
-
473
- expect(bulkTransfersSpy).toHaveBeenCalledTimes(1);
474
- expect(bulkTransfersSpy.mock.calls[0][1]).toBe(mockContext.request.headers['fspiop-source']);
475
- });
476
- });
477
-
478
- describe('POST /transactionRequests', () => {
479
-
480
- let mockTransactionReqContext;
481
-
482
- beforeEach(() => {
483
- mockTransactionReqContext = {
484
- request: {
485
- body: mockTransactionRequest.transactionRequest,
486
- headers: {
487
- 'fspiop-source': 'foo'
488
- }
489
- },
490
- response: {},
491
- state: {
492
- conf: {},
493
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
494
- }
495
- };
496
- });
497
-
498
- test('calls `model.transactionRequest` with the expected arguments.', async () => {
499
- const transactionRequestSpy = jest.spyOn(Model.prototype, 'transactionRequest');
500
-
501
- await expect(handlers['/transactionRequests'].post(mockTransactionReqContext)).resolves.toBe(undefined);
502
-
503
- expect(transactionRequestSpy).toHaveBeenCalledTimes(1);
504
- expect(transactionRequestSpy.mock.calls[0][0]).toBe(mockTransactionReqContext.request.body);
505
- expect(transactionRequestSpy.mock.calls[0][1]).toBe(mockTransactionReqContext.request.headers['fspiop-source']);
506
- });
507
- });
508
-
509
- describe('GET /authorizations', () => {
510
-
511
- let mockAuthorizationContext;
512
-
513
- beforeEach(() => {
514
-
515
- mockAuthorizationContext = {
516
- request: {
517
- headers: {
518
- 'fspiop-source': 'foo'
519
- }
520
- },
521
- response: {},
522
- state: {
523
- conf: {},
524
- path : {
525
- params : {
526
- 'ID': '1234'
527
- }
528
- },
529
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
530
- }
531
- };
532
- });
533
-
534
- test('calls `model.authorizations` with the expected arguments.', async () => {
535
- const authorizationsSpy = jest.spyOn(Model.prototype, 'getAuthorizations');
536
-
537
- await expect(handlers['/authorizations/{ID}'].get(mockAuthorizationContext)).resolves.toBe(undefined);
538
-
539
- expect(authorizationsSpy).toHaveBeenCalledTimes(1);
540
- expect(authorizationsSpy.mock.calls[0][1]).toBe(mockAuthorizationContext.request.headers['fspiop-source']);
541
- });
542
- });
543
-
544
- describe('PATCH /transfers/{ID}', () => {
545
- let mockNotificationMessage;
546
-
547
- beforeEach(() => {
548
- mockNotificationMessage = {
549
- request: {
550
- headers: {
551
-
552
- },
553
- body: {
554
- transferState: FSPIOPTransferStateEnum.COMMITTED,
555
- completedTimestamp: '2020-08-18T09:39:33.552Z'
556
- }
557
- },
558
- response: {},
559
- state: {
560
- conf: {},
561
- path: {
562
- params: {
563
- 'ID': '1234'
564
- }
565
- },
566
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
567
- }
568
- };
569
- });
570
-
571
- test('calls `model.sendNotificationToPayee with expected arguments', async () => {
572
- const notificationSpy = jest.spyOn(Model.prototype, 'sendNotificationToPayee');
573
-
574
- await expect(handlers['/transfers/{ID}'].patch(mockNotificationMessage)).resolves.toBe(undefined);
575
- expect(notificationSpy).toHaveBeenCalledTimes(1);
576
- expect(notificationSpy.mock.calls[0][1]).toBe(mockNotificationMessage.state.path.params.ID);
577
- });
578
-
579
- });
580
-
581
- describe('PUT /parties/{Type}/{ID}[/{SubId}]', () => {
582
-
583
- let mockContext;
584
-
585
- beforeEach(() => {
586
- mockContext = {
587
- request: {
588
- body: { the: 'mocked-body' },
589
- headers: {
590
- 'fspiop-source': 'foo'
591
- }
592
- },
593
- response: {},
594
- state: {
595
- conf: {},
596
- path: {
597
- params: {
598
- 'Type': 'MSISDN',
599
- 'ID': '1234567890'
600
- }
601
- },
602
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
603
- cache: {
604
- publish: jest.fn(() => Promise.resolve(true))
605
- }
606
- }
607
- };
608
-
609
- });
610
-
611
- test('calls `PartiesModel.triggerDeferredJobSpy` with the expected arguments.', async () => {
612
- const triggerDeferredJobSpy = jest.spyOn(PartiesModel, 'triggerDeferredJob');
613
-
614
- await expect(handlers['/parties/{Type}/{ID}'].put(mockContext)).resolves.toBe(undefined);
615
-
616
- expect(triggerDeferredJobSpy).toHaveBeenCalledTimes(1);
617
- expect(triggerDeferredJobSpy).toBeCalledWith({
618
- cache: mockContext.state.cache,
619
- message: {
620
- body: mockContext.request.body,
621
- headers: mockContext.request.headers,
622
- },
623
- args: {
624
- type: mockContext.state.path.params.Type,
625
- id: mockContext.state.path.params.ID
626
- }
627
- });
628
- });
629
-
630
- test('calls `PartiesModel.triggerDeferredJobSpy` with the expected arguments when SubId param specified.', async () => {
631
- const triggerDeferredJobSpy = jest.spyOn(PartiesModel, 'triggerDeferredJob');
632
-
633
- // add extra parameter
634
- mockContext.state.path.params.SubId = 'sub-id';
635
-
636
- await expect(handlers['/parties/{Type}/{ID}/{SubId}'].put(mockContext)).resolves.toBe(undefined);
637
-
638
- expect(triggerDeferredJobSpy).toHaveBeenCalledTimes(1);
639
- expect(triggerDeferredJobSpy).toBeCalledWith({
640
- cache: mockContext.state.cache,
641
- message: {
642
- body: mockContext.request.body,
643
- headers: mockContext.request.headers,
644
- },
645
- args: {
646
- type: mockContext.state.path.params.Type,
647
- id: mockContext.state.path.params.ID,
648
- subId: mockContext.state.path.params.SubId
649
- }
650
- });
651
- });
652
- });
653
-
654
- describe('PUT /transfers/{ID}', () => {
655
-
656
- let mockContext;
657
-
658
- beforeEach(() => {
659
- mockContext = {
660
- request: {
661
- body: { the: 'mocked-body' },
662
- headers: {
663
- 'fspiop-source': 'foo'
664
- }
665
- },
666
- response: {},
667
- state: {
668
- conf: {},
669
- path: {
670
- params: {
671
- 'ID': '1234567890'
672
- }
673
- },
674
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
675
- cache: {
676
- publish: jest.fn(() => Promise.resolve(true))
677
- }
678
- }
679
- };
680
-
681
- });
682
-
683
- test('calls `TransfersModel.triggerDeferredJobSpy` with the expected arguments.', async () => {
684
- const triggerDeferredJobSpy = jest.spyOn(TransfersModel, 'triggerDeferredJob');
685
-
686
- await expect(handlers['/transfers/{ID}'].put(mockContext)).resolves.toBe(undefined);
687
-
688
- expect(triggerDeferredJobSpy).toHaveBeenCalledTimes(1);
689
- expect(triggerDeferredJobSpy).toBeCalledWith({
690
- cache: mockContext.state.cache,
691
- message: {
692
- body: mockContext.request.body,
693
- headers: mockContext.request.headers,
694
- },
695
- args: {
696
- transferId: mockContext.state.path.params.ID
697
- }
698
- });
699
- });
700
-
701
- test('calls `TransfersModel.triggerDeferredJobSpy` with the expected arguments when SubId param specified.', async () => {
702
- const triggerDeferredJobSpy = jest.spyOn(TransfersModel, 'triggerDeferredJob');
703
-
704
- await expect(handlers['/transfers/{ID}'].put(mockContext)).resolves.toBe(undefined);
705
-
706
- expect(triggerDeferredJobSpy).toHaveBeenCalledTimes(1);
707
- expect(triggerDeferredJobSpy).toBeCalledWith({
708
- cache: mockContext.state.cache,
709
- message: {
710
- body: mockContext.request.body,
711
- headers: mockContext.request.headers,
712
- },
713
- args: {
714
- transferId: mockContext.state.path.params.ID,
715
- }
716
- });
717
- });
718
- });
719
-
720
- describe('PUT /transfers/{ID}/error', () => {
721
-
722
- let mockContext;
723
-
724
- beforeEach(() => {
725
- mockContext = {
726
- request: {
727
- body: { the: 'mocked-body' },
728
- headers: {
729
- 'fspiop-source': 'foo'
730
- }
731
- },
732
- response: {},
733
- state: {
734
- conf: {},
735
- path: {
736
- params: {
737
- 'Type': 'MSISDN',
738
- 'ID': '1234567890'
739
- }
740
- },
741
- logger: new Logger.Logger({ context: { app: 'inbound-handlers-unit-test' }, stringify: () => '' }),
742
- cache: {
743
- publish: jest.fn(() => Promise.resolve(true))
744
- }
745
- }
746
- };
747
-
748
- });
749
-
750
- test('calls `TransfersModel.triggerDeferredJobSpy` with the expected arguments.', async () => {
751
- const triggerDeferredJobSpy = jest.spyOn(TransfersModel, 'triggerDeferredJob');
752
-
753
- await expect(handlers['/transfers/{ID}'].put(mockContext)).resolves.toBe(undefined);
754
-
755
- expect(triggerDeferredJobSpy).toHaveBeenCalledTimes(1);
756
- expect(triggerDeferredJobSpy).toBeCalledWith({
757
- cache: mockContext.state.cache,
758
- message: {
759
- body: mockContext.request.body,
760
- headers: mockContext.request.headers,
761
- },
762
- args: {
763
- transferId: mockContext.state.path.params.ID
764
- }
765
- });
766
- });
767
-
768
- test('calls `TransfersModel.triggerDeferredJobSpy` with the expected arguments when SubId param specified.', async () => {
769
- const triggerDeferredJobSpy = jest.spyOn(TransfersModel, 'triggerDeferredJob');
770
-
771
- await expect(handlers['/transfers/{ID}/error'].put(mockContext)).resolves.toBe(undefined);
772
-
773
- expect(triggerDeferredJobSpy).toHaveBeenCalledTimes(1);
774
- expect(triggerDeferredJobSpy).toBeCalledWith({
775
- cache: mockContext.state.cache,
776
- message: {
777
- body: mockContext.request.body,
778
- headers: mockContext.request.headers,
779
- },
780
- args: {
781
- transferId: mockContext.state.path.params.ID,
782
- }
783
- });
784
- });
785
- });
786
- });