@dxtmisha/functional-basic 0.1.1 → 0.1.4
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.
- package/dist/functions/copyObjectLite.d.ts +9 -0
- package/dist/library.d.ts +1 -0
- package/dist/library.js +405 -411
- package/package.json +1 -3
- package/src/classes/Api.ts +0 -407
- package/src/classes/ApiDefault.ts +0 -83
- package/src/classes/ApiHeaders.ts +0 -52
- package/src/classes/ApiPreparation.ts +0 -114
- package/src/classes/ApiResponse.ts +0 -293
- package/src/classes/ApiStatus.ts +0 -173
- package/src/classes/BroadcastMessage.ts +0 -73
- package/src/classes/Cache.ts +0 -60
- package/src/classes/CacheItem.ts +0 -95
- package/src/classes/CacheStatic.ts +0 -30
- package/src/classes/Cookie.ts +0 -135
- package/src/classes/CookieBlock.ts +0 -31
- package/src/classes/DataStorage.ts +0 -194
- package/src/classes/Datetime.ts +0 -891
- package/src/classes/EventItem.ts +0 -373
- package/src/classes/Geo.ts +0 -320
- package/src/classes/GeoFlag.ts +0 -386
- package/src/classes/GeoIntl.ts +0 -839
- package/src/classes/GeoPhone.ts +0 -272
- package/src/classes/Global.ts +0 -32
- package/src/classes/Hash.ts +0 -142
- package/src/classes/Icons.ts +0 -165
- package/src/classes/Loading.ts +0 -90
- package/src/classes/Meta.ts +0 -284
- package/src/classes/MetaManager.ts +0 -200
- package/src/classes/MetaOg.ts +0 -147
- package/src/classes/MetaTwitter.ts +0 -154
- package/src/classes/ScrollbarWidth.ts +0 -86
- package/src/classes/Translate.ts +0 -293
- package/src/classes/__tests__/Api.test.ts +0 -728
- package/src/classes/__tests__/ApiDefault.test.ts +0 -222
- package/src/classes/__tests__/ApiHeaders.test.ts +0 -447
- package/src/classes/__tests__/ApiPreparation.test.ts +0 -257
- package/src/classes/__tests__/ApiResponse.test.ts +0 -547
- package/src/classes/__tests__/ApiStatus.test.ts +0 -403
- package/src/classes/__tests__/Meta.test.ts +0 -629
- package/src/classes/__tests__/MetaManager.test.ts +0 -836
- package/src/classes/__tests__/MetaOg.test.ts +0 -677
- package/src/classes/__tests__/MetaTwitter.test.ts +0 -423
- package/src/functions/anyToString.ts +0 -36
- package/src/functions/applyTemplate.ts +0 -63
- package/src/functions/arrFill.ts +0 -10
- package/src/functions/copyObject.ts +0 -10
- package/src/functions/createElement.ts +0 -40
- package/src/functions/domQuerySelector.ts +0 -15
- package/src/functions/domQuerySelectorAll.ts +0 -15
- package/src/functions/encodeAttribute.ts +0 -15
- package/src/functions/eventStopPropagation.ts +0 -10
- package/src/functions/executeFunction.ts +0 -13
- package/src/functions/executePromise.ts +0 -19
- package/src/functions/forEach.ts +0 -39
- package/src/functions/frame.ts +0 -38
- package/src/functions/getAttributes.ts +0 -27
- package/src/functions/getClipboardData.ts +0 -13
- package/src/functions/getColumn.ts +0 -18
- package/src/functions/getElement.ts +0 -35
- package/src/functions/getElementId.ts +0 -39
- package/src/functions/getElementItem.ts +0 -27
- package/src/functions/getElementOrWindow.ts +0 -23
- package/src/functions/getExp.ts +0 -21
- package/src/functions/getItemByPath.ts +0 -24
- package/src/functions/getKey.ts +0 -9
- package/src/functions/getLengthOfAllArray.ts +0 -13
- package/src/functions/getMaxLengthAllArray.ts +0 -13
- package/src/functions/getMinLengthAllArray.ts +0 -13
- package/src/functions/getMouseClient.ts +0 -17
- package/src/functions/getMouseClientX.ts +0 -9
- package/src/functions/getMouseClientY.ts +0 -9
- package/src/functions/getObjectByKeys.ts +0 -24
- package/src/functions/getObjectNoUndefined.ts +0 -23
- package/src/functions/getObjectOrNone.ts +0 -11
- package/src/functions/getRandomText.ts +0 -29
- package/src/functions/getRequestString.ts +0 -21
- package/src/functions/getStepPercent.ts +0 -19
- package/src/functions/getStepValue.ts +0 -19
- package/src/functions/goScroll.ts +0 -40
- package/src/functions/inArray.ts +0 -10
- package/src/functions/initScrollbarOffset.ts +0 -14
- package/src/functions/intersectKey.ts +0 -34
- package/src/functions/isArray.ts +0 -9
- package/src/functions/isDifferent.ts +0 -27
- package/src/functions/isDomRuntime.ts +0 -12
- package/src/functions/isFilled.ts +0 -49
- package/src/functions/isFloat.ts +0 -16
- package/src/functions/isFunction.ts +0 -11
- package/src/functions/isInDom.ts +0 -15
- package/src/functions/isIntegerBetween.ts +0 -11
- package/src/functions/isNull.ts +0 -11
- package/src/functions/isNumber.ts +0 -16
- package/src/functions/isObject.ts +0 -9
- package/src/functions/isObjectNotArray.ts +0 -11
- package/src/functions/isSelected.ts +0 -32
- package/src/functions/isSelectedByList.ts +0 -19
- package/src/functions/isString.ts +0 -9
- package/src/functions/isWindow.ts +0 -11
- package/src/functions/random.ts +0 -10
- package/src/functions/replaceRecursive.ts +0 -60
- package/src/functions/replaceTemplate.ts +0 -22
- package/src/functions/secondToTime.ts +0 -20
- package/src/functions/setElementItem.ts +0 -56
- package/src/functions/setValues.ts +0 -59
- package/src/functions/splice.ts +0 -59
- package/src/functions/strFill.ts +0 -12
- package/src/functions/toArray.ts +0 -19
- package/src/functions/toCamelCase.ts +0 -16
- package/src/functions/toCamelCaseFirst.ts +0 -12
- package/src/functions/toDate.ts +0 -44
- package/src/functions/toKebabCase.ts +0 -25
- package/src/functions/toNumber.ts +0 -35
- package/src/functions/toNumberByMax.ts +0 -33
- package/src/functions/toPercent.ts +0 -10
- package/src/functions/toPercentBy100.ts +0 -12
- package/src/functions/transformation.ts +0 -59
- package/src/functions/uniqueArray.ts +0 -9
- package/src/functions/writeClipboardData.ts +0 -17
- package/src/library.ts +0 -116
- package/src/types/apiTypes.ts +0 -143
- package/src/types/basicTypes.ts +0 -155
- package/src/types/geoTypes.ts +0 -109
- package/src/types/metaTypes.ts +0 -764
- package/src/vite-env.d.ts +0 -1
|
@@ -1,547 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @vitest-environment jsdom
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { describe, it, expect, beforeEach } from 'vitest'
|
|
6
|
-
import { ApiResponse } from '../ApiResponse'
|
|
7
|
-
import { ApiDefault } from '../ApiDefault'
|
|
8
|
-
import { ApiMethodItem } from '../../types/apiTypes'
|
|
9
|
-
import type { ApiResponseItem } from '../../types/apiTypes'
|
|
10
|
-
|
|
11
|
-
describe('ApiResponse', () => {
|
|
12
|
-
let apiResponse: ApiResponse
|
|
13
|
-
let apiDefault: ApiDefault
|
|
14
|
-
|
|
15
|
-
beforeEach(() => {
|
|
16
|
-
apiDefault = new ApiDefault()
|
|
17
|
-
apiResponse = new ApiResponse(apiDefault)
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
describe('constructor', () => {
|
|
21
|
-
it('should create ApiResponse instance', () => {
|
|
22
|
-
expect(apiResponse).toBeInstanceOf(ApiResponse)
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
it('should initialize with empty response list', () => {
|
|
26
|
-
expect(apiResponse.getList()).toEqual([])
|
|
27
|
-
})
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
describe('add', () => {
|
|
31
|
-
it('should add single response item', () => {
|
|
32
|
-
const responseItem: ApiResponseItem = {
|
|
33
|
-
path: '/api/test',
|
|
34
|
-
method: ApiMethodItem.get,
|
|
35
|
-
response: { data: 'test' }
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
apiResponse.add(responseItem)
|
|
39
|
-
expect(apiResponse.getList()).toHaveLength(1)
|
|
40
|
-
expect(apiResponse.getList()?.[0]).toEqual(responseItem)
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
it('should add multiple response items', () => {
|
|
44
|
-
const items: ApiResponseItem[] = [
|
|
45
|
-
{
|
|
46
|
-
path: '/api/test1',
|
|
47
|
-
method: ApiMethodItem.get,
|
|
48
|
-
response: { data: 'test1' }
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
path: '/api/test2',
|
|
52
|
-
method: ApiMethodItem.post,
|
|
53
|
-
response: { data: 'test2' }
|
|
54
|
-
}
|
|
55
|
-
]
|
|
56
|
-
|
|
57
|
-
apiResponse.add(items)
|
|
58
|
-
expect(apiResponse.getList()).toHaveLength(2)
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
it('should return this for chaining', () => {
|
|
62
|
-
const responseItem: ApiResponseItem = {
|
|
63
|
-
path: '/api/test',
|
|
64
|
-
method: ApiMethodItem.get,
|
|
65
|
-
response: {}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const result = apiResponse.add(responseItem)
|
|
69
|
-
expect(result).toBe(apiResponse)
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
it('should chain multiple add calls', () => {
|
|
73
|
-
const item1: ApiResponseItem = {
|
|
74
|
-
path: '/api/test1',
|
|
75
|
-
method: ApiMethodItem.get,
|
|
76
|
-
response: {}
|
|
77
|
-
}
|
|
78
|
-
const item2: ApiResponseItem = {
|
|
79
|
-
path: '/api/test2',
|
|
80
|
-
method: ApiMethodItem.post,
|
|
81
|
-
response: {}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
apiResponse.add(item1).add(item2)
|
|
85
|
-
expect(apiResponse.getList()).toHaveLength(2)
|
|
86
|
-
})
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
describe('getList', () => {
|
|
90
|
-
it('should return empty array when no responses added', () => {
|
|
91
|
-
expect(apiResponse.getList()).toEqual([])
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
it('should return all non-global responses', () => {
|
|
95
|
-
const items: ApiResponseItem[] = [
|
|
96
|
-
{
|
|
97
|
-
path: '/api/test1',
|
|
98
|
-
method: ApiMethodItem.get,
|
|
99
|
-
response: {}
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
path: '/api/test2',
|
|
103
|
-
method: ApiMethodItem.get,
|
|
104
|
-
response: {},
|
|
105
|
-
isForGlobal: false
|
|
106
|
-
}
|
|
107
|
-
]
|
|
108
|
-
|
|
109
|
-
apiResponse.add(items)
|
|
110
|
-
expect(apiResponse.getList()).toHaveLength(2)
|
|
111
|
-
})
|
|
112
|
-
|
|
113
|
-
it('should filter out global responses', () => {
|
|
114
|
-
const items: ApiResponseItem[] = [
|
|
115
|
-
{
|
|
116
|
-
path: '/api/test1',
|
|
117
|
-
method: ApiMethodItem.get,
|
|
118
|
-
response: {}
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
path: '/api/global',
|
|
122
|
-
method: ApiMethodItem.get,
|
|
123
|
-
response: {},
|
|
124
|
-
isForGlobal: true
|
|
125
|
-
}
|
|
126
|
-
]
|
|
127
|
-
|
|
128
|
-
apiResponse.add(items)
|
|
129
|
-
expect(apiResponse.getList()).toHaveLength(1)
|
|
130
|
-
expect(apiResponse.getList()?.[0]?.path).toBe('/api/test1')
|
|
131
|
-
})
|
|
132
|
-
})
|
|
133
|
-
|
|
134
|
-
describe('setDevMode', () => {
|
|
135
|
-
it('should set developer mode', () => {
|
|
136
|
-
apiResponse.setDevMode(true)
|
|
137
|
-
// Проверка через эмулятор (косвенная проверка)
|
|
138
|
-
expect(apiResponse).toBeInstanceOf(ApiResponse)
|
|
139
|
-
})
|
|
140
|
-
|
|
141
|
-
it('should return this for chaining', () => {
|
|
142
|
-
const result = apiResponse.setDevMode(true)
|
|
143
|
-
expect(result).toBe(apiResponse)
|
|
144
|
-
})
|
|
145
|
-
})
|
|
146
|
-
|
|
147
|
-
describe('get', () => {
|
|
148
|
-
it('should return undefined when no matching response', () => {
|
|
149
|
-
const result = apiResponse.get('/api/test', ApiMethodItem.get)
|
|
150
|
-
expect(result).toBeUndefined()
|
|
151
|
-
})
|
|
152
|
-
|
|
153
|
-
it('should return matching response by path and method', () => {
|
|
154
|
-
const responseItem: ApiResponseItem = {
|
|
155
|
-
path: '/api/test',
|
|
156
|
-
method: ApiMethodItem.get,
|
|
157
|
-
request: undefined,
|
|
158
|
-
response: { data: 'test' }
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
apiResponse.add(responseItem)
|
|
162
|
-
const result = apiResponse.get('/api/test', ApiMethodItem.get, undefined)
|
|
163
|
-
expect(result).toEqual(responseItem)
|
|
164
|
-
})
|
|
165
|
-
|
|
166
|
-
it('should match path with RegExp', () => {
|
|
167
|
-
const responseItem: ApiResponseItem = {
|
|
168
|
-
path: /^\/api\/test\/\d+$/,
|
|
169
|
-
method: ApiMethodItem.get,
|
|
170
|
-
response: { data: 'test' }
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
apiResponse.add(responseItem)
|
|
174
|
-
const result = apiResponse.get('/api/test/123', ApiMethodItem.get)
|
|
175
|
-
expect(result).toEqual(responseItem)
|
|
176
|
-
})
|
|
177
|
-
|
|
178
|
-
it('should not return same response twice (first request tracking)', () => {
|
|
179
|
-
const responseItem: ApiResponseItem = {
|
|
180
|
-
path: '/api/test',
|
|
181
|
-
method: ApiMethodItem.get,
|
|
182
|
-
response: { data: 'test' }
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
apiResponse.add(responseItem)
|
|
186
|
-
const firstCall = apiResponse.get('/api/test', ApiMethodItem.get)
|
|
187
|
-
const secondCall = apiResponse.get('/api/test', ApiMethodItem.get)
|
|
188
|
-
|
|
189
|
-
expect(firstCall).toEqual(responseItem)
|
|
190
|
-
expect(secondCall).toBeUndefined()
|
|
191
|
-
})
|
|
192
|
-
|
|
193
|
-
it('should return response again in devMode', () => {
|
|
194
|
-
const responseItem: ApiResponseItem = {
|
|
195
|
-
path: '/api/test',
|
|
196
|
-
method: ApiMethodItem.get,
|
|
197
|
-
response: { data: 'test' }
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
apiResponse.add(responseItem)
|
|
201
|
-
apiResponse.get('/api/test', ApiMethodItem.get, undefined, false)
|
|
202
|
-
const result = apiResponse.get('/api/test', ApiMethodItem.get, undefined, true)
|
|
203
|
-
|
|
204
|
-
expect(result).toEqual(responseItem)
|
|
205
|
-
})
|
|
206
|
-
|
|
207
|
-
it('should not return disabled responses', () => {
|
|
208
|
-
const disabledItem: ApiResponseItem = {
|
|
209
|
-
path: '/api/disabled',
|
|
210
|
-
method: ApiMethodItem.get,
|
|
211
|
-
response: { data: 'disabled' },
|
|
212
|
-
disable: true
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
const enabledItem: ApiResponseItem = {
|
|
216
|
-
path: '/api/enabled',
|
|
217
|
-
method: ApiMethodItem.get,
|
|
218
|
-
response: { data: 'enabled' }
|
|
219
|
-
// disable не указан (undefined) - элемент активен
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
apiResponse.add([disabledItem, enabledItem])
|
|
223
|
-
|
|
224
|
-
// Отключенный не вернётся
|
|
225
|
-
expect(apiResponse.get('/api/disabled', ApiMethodItem.get)).toBeUndefined()
|
|
226
|
-
|
|
227
|
-
// Включенный вернётся
|
|
228
|
-
expect(apiResponse.get('/api/enabled', ApiMethodItem.get)).toEqual(enabledItem)
|
|
229
|
-
})
|
|
230
|
-
|
|
231
|
-
it('should match request with *any marker', () => {
|
|
232
|
-
const responseItem: ApiResponseItem = {
|
|
233
|
-
path: '/api/test',
|
|
234
|
-
method: ApiMethodItem.post,
|
|
235
|
-
request: '*any',
|
|
236
|
-
response: { data: 'test' }
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
apiResponse.add(responseItem)
|
|
240
|
-
const result = apiResponse.get('/api/test', ApiMethodItem.post, { foo: 'bar' })
|
|
241
|
-
expect(result).toEqual(responseItem)
|
|
242
|
-
})
|
|
243
|
-
|
|
244
|
-
it('should match request with exact object', () => {
|
|
245
|
-
const responseItem: ApiResponseItem = {
|
|
246
|
-
path: '/api/test',
|
|
247
|
-
method: ApiMethodItem.post,
|
|
248
|
-
request: { key: 'value' },
|
|
249
|
-
response: { data: 'test' }
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
apiResponse.add(responseItem)
|
|
253
|
-
const result = apiResponse.get('/api/test', ApiMethodItem.post, { key: 'value' })
|
|
254
|
-
expect(result).toEqual(responseItem)
|
|
255
|
-
})
|
|
256
|
-
|
|
257
|
-
it('should not match request with different object', () => {
|
|
258
|
-
const responseItem: ApiResponseItem = {
|
|
259
|
-
path: '/api/test',
|
|
260
|
-
method: ApiMethodItem.post,
|
|
261
|
-
request: { key: 'value1' },
|
|
262
|
-
response: { data: 'test' }
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
apiResponse.add(responseItem)
|
|
266
|
-
const result = apiResponse.get('/api/test', ApiMethodItem.post, { key: 'value2' })
|
|
267
|
-
expect(result).toBeUndefined()
|
|
268
|
-
})
|
|
269
|
-
|
|
270
|
-
it('should match with partial *any in request object', () => {
|
|
271
|
-
const responseItem: ApiResponseItem = {
|
|
272
|
-
path: '/api/test',
|
|
273
|
-
method: ApiMethodItem.post,
|
|
274
|
-
request: { key1: 'value1', key2: '*any' },
|
|
275
|
-
response: { data: 'test' }
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
apiResponse.add(responseItem)
|
|
279
|
-
const result = apiResponse.get('/api/test', ApiMethodItem.post, { key1: 'value1', key2: 'any-value' })
|
|
280
|
-
expect(result).toEqual(responseItem)
|
|
281
|
-
})
|
|
282
|
-
})
|
|
283
|
-
|
|
284
|
-
describe('emulator', () => {
|
|
285
|
-
it('should return undefined when no matching response', async () => {
|
|
286
|
-
const result = await apiResponse.emulator({
|
|
287
|
-
path: '/api/test',
|
|
288
|
-
method: ApiMethodItem.get
|
|
289
|
-
})
|
|
290
|
-
|
|
291
|
-
expect(result).toBeUndefined()
|
|
292
|
-
})
|
|
293
|
-
|
|
294
|
-
it('should return emulated response for GET request', async () => {
|
|
295
|
-
const responseItem: ApiResponseItem = {
|
|
296
|
-
path: '/api/test',
|
|
297
|
-
method: ApiMethodItem.get,
|
|
298
|
-
response: { data: 'test' }
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
apiResponse.add(responseItem)
|
|
302
|
-
const result = await apiResponse.emulator({
|
|
303
|
-
path: '/api/test',
|
|
304
|
-
method: ApiMethodItem.get
|
|
305
|
-
})
|
|
306
|
-
|
|
307
|
-
expect(result).toEqual({ data: 'test' })
|
|
308
|
-
})
|
|
309
|
-
|
|
310
|
-
it('should work with response as function', async () => {
|
|
311
|
-
const responseItem: ApiResponseItem = {
|
|
312
|
-
path: '/api/test',
|
|
313
|
-
method: ApiMethodItem.get,
|
|
314
|
-
request: '*any',
|
|
315
|
-
response: (request: any) => ({ echo: request })
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
apiResponse.add(responseItem)
|
|
319
|
-
const result = await apiResponse.emulator({
|
|
320
|
-
path: '/api/test',
|
|
321
|
-
method: ApiMethodItem.get,
|
|
322
|
-
request: { input: 'value' }
|
|
323
|
-
})
|
|
324
|
-
|
|
325
|
-
expect(result).toEqual({ echo: { input: 'value' } })
|
|
326
|
-
})
|
|
327
|
-
|
|
328
|
-
it('should work with async response function', async () => {
|
|
329
|
-
const responseItem: ApiResponseItem = {
|
|
330
|
-
path: '/api/test',
|
|
331
|
-
method: ApiMethodItem.get,
|
|
332
|
-
response: async () => {
|
|
333
|
-
return new Promise((resolve) => {
|
|
334
|
-
setTimeout(() => resolve({ delayed: true }), 10)
|
|
335
|
-
})
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
apiResponse.add(responseItem)
|
|
340
|
-
const result = await apiResponse.emulator({
|
|
341
|
-
path: '/api/test',
|
|
342
|
-
method: ApiMethodItem.get
|
|
343
|
-
})
|
|
344
|
-
|
|
345
|
-
expect(result).toEqual({ delayed: true })
|
|
346
|
-
})
|
|
347
|
-
|
|
348
|
-
it('should not use emulator for non-GET without global flag', async () => {
|
|
349
|
-
const responseItem: ApiResponseItem = {
|
|
350
|
-
path: '/api/test',
|
|
351
|
-
method: ApiMethodItem.post,
|
|
352
|
-
response: { data: 'test' }
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
apiResponse.add(responseItem)
|
|
356
|
-
const result = await apiResponse.emulator({
|
|
357
|
-
path: '/api/test',
|
|
358
|
-
method: ApiMethodItem.post,
|
|
359
|
-
global: false
|
|
360
|
-
})
|
|
361
|
-
|
|
362
|
-
expect(result).toBeUndefined()
|
|
363
|
-
})
|
|
364
|
-
|
|
365
|
-
it('should use emulator for non-GET with global flag', async () => {
|
|
366
|
-
const responseItem: ApiResponseItem = {
|
|
367
|
-
path: '/api/test',
|
|
368
|
-
method: ApiMethodItem.post,
|
|
369
|
-
response: { data: 'test' }
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
apiResponse.add(responseItem)
|
|
373
|
-
const result = await apiResponse.emulator({
|
|
374
|
-
path: '/api/test',
|
|
375
|
-
method: ApiMethodItem.post,
|
|
376
|
-
global: true
|
|
377
|
-
})
|
|
378
|
-
|
|
379
|
-
expect(result).toEqual({ data: 'test' })
|
|
380
|
-
})
|
|
381
|
-
|
|
382
|
-
it('should use emulator when devMode is enabled', async () => {
|
|
383
|
-
const responseItem: ApiResponseItem = {
|
|
384
|
-
path: '/api/test',
|
|
385
|
-
method: ApiMethodItem.post,
|
|
386
|
-
response: { data: 'test' }
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
apiResponse.add(responseItem)
|
|
390
|
-
const result = await apiResponse.emulator({
|
|
391
|
-
path: '/api/test',
|
|
392
|
-
method: ApiMethodItem.post,
|
|
393
|
-
devMode: true
|
|
394
|
-
})
|
|
395
|
-
|
|
396
|
-
expect(result).toEqual({ data: 'test' })
|
|
397
|
-
})
|
|
398
|
-
|
|
399
|
-
it('should merge default request data', async () => {
|
|
400
|
-
apiDefault.set({ token: 'abc123' })
|
|
401
|
-
|
|
402
|
-
const responseItem: ApiResponseItem = {
|
|
403
|
-
path: '/api/test',
|
|
404
|
-
method: ApiMethodItem.post,
|
|
405
|
-
request: { token: 'abc123', action: 'getData' },
|
|
406
|
-
response: { success: true }
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
apiResponse.add(responseItem)
|
|
410
|
-
const result = await apiResponse.emulator({
|
|
411
|
-
path: '/api/test',
|
|
412
|
-
method: ApiMethodItem.post,
|
|
413
|
-
request: { action: 'getData' },
|
|
414
|
-
global: true
|
|
415
|
-
})
|
|
416
|
-
|
|
417
|
-
expect(result).toEqual({ success: true })
|
|
418
|
-
})
|
|
419
|
-
|
|
420
|
-
it('should handle lag simulation', async () => {
|
|
421
|
-
const responseItem: ApiResponseItem = {
|
|
422
|
-
path: '/api/test',
|
|
423
|
-
method: ApiMethodItem.get,
|
|
424
|
-
response: { data: 'test' },
|
|
425
|
-
lag: true
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
apiResponse.add(responseItem)
|
|
429
|
-
|
|
430
|
-
const startTime = Date.now()
|
|
431
|
-
const result = await apiResponse.emulator({
|
|
432
|
-
path: '/api/test',
|
|
433
|
-
method: ApiMethodItem.get
|
|
434
|
-
})
|
|
435
|
-
const endTime = Date.now()
|
|
436
|
-
|
|
437
|
-
expect(result).toEqual({ data: 'test' })
|
|
438
|
-
// Проверка, что была задержка (минимум несколько миллисекунд)
|
|
439
|
-
expect(endTime - startTime).toBeGreaterThanOrEqual(0)
|
|
440
|
-
}, 10000)
|
|
441
|
-
})
|
|
442
|
-
|
|
443
|
-
describe('integration tests', () => {
|
|
444
|
-
it('should handle complete workflow with multiple responses', async () => {
|
|
445
|
-
const responses: ApiResponseItem[] = [
|
|
446
|
-
{
|
|
447
|
-
path: '/api/users',
|
|
448
|
-
method: ApiMethodItem.get,
|
|
449
|
-
response: [{ id: 1, name: 'User 1' }, { id: 2, name: 'User 2' }]
|
|
450
|
-
},
|
|
451
|
-
{
|
|
452
|
-
path: /^\/api\/users\/\d+$/,
|
|
453
|
-
method: ApiMethodItem.get,
|
|
454
|
-
response: (request: any) => ({ id: 1, name: 'User 1', request })
|
|
455
|
-
},
|
|
456
|
-
{
|
|
457
|
-
path: '/api/users',
|
|
458
|
-
method: ApiMethodItem.post,
|
|
459
|
-
request: { name: '*any' },
|
|
460
|
-
response: { id: 3, name: 'New User' }
|
|
461
|
-
}
|
|
462
|
-
]
|
|
463
|
-
|
|
464
|
-
apiResponse.add(responses)
|
|
465
|
-
|
|
466
|
-
// GET список
|
|
467
|
-
const list = await apiResponse.emulator({
|
|
468
|
-
path: '/api/users',
|
|
469
|
-
method: ApiMethodItem.get
|
|
470
|
-
})
|
|
471
|
-
expect(list).toEqual([{ id: 1, name: 'User 1' }, { id: 2, name: 'User 2' }])
|
|
472
|
-
|
|
473
|
-
// GET один элемент
|
|
474
|
-
const user = await apiResponse.emulator({
|
|
475
|
-
path: '/api/users/1',
|
|
476
|
-
method: ApiMethodItem.get
|
|
477
|
-
})
|
|
478
|
-
expect(user).toHaveProperty('id', 1)
|
|
479
|
-
|
|
480
|
-
// POST создание
|
|
481
|
-
const created = await apiResponse.emulator({
|
|
482
|
-
path: '/api/users',
|
|
483
|
-
method: ApiMethodItem.post,
|
|
484
|
-
request: { name: 'Test User' },
|
|
485
|
-
global: true
|
|
486
|
-
})
|
|
487
|
-
expect(created).toEqual({ id: 3, name: 'New User' })
|
|
488
|
-
})
|
|
489
|
-
|
|
490
|
-
it('should work with disabled responses via function', () => {
|
|
491
|
-
let isDisabled = false
|
|
492
|
-
|
|
493
|
-
const responseItem: ApiResponseItem = {
|
|
494
|
-
path: '/api/test',
|
|
495
|
-
method: ApiMethodItem.get,
|
|
496
|
-
response: { data: 'test' },
|
|
497
|
-
disable: () => isDisabled
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
apiResponse.add(responseItem)
|
|
501
|
-
|
|
502
|
-
// Включено
|
|
503
|
-
let result = apiResponse.get('/api/test', ApiMethodItem.get)
|
|
504
|
-
expect(result).toEqual(responseItem)
|
|
505
|
-
|
|
506
|
-
// Отключено
|
|
507
|
-
isDisabled = true
|
|
508
|
-
result = apiResponse.get('/api/test', ApiMethodItem.get, undefined, true) // devMode для повторного запроса
|
|
509
|
-
expect(result).toBeUndefined()
|
|
510
|
-
})
|
|
511
|
-
|
|
512
|
-
it('should work with chaining', () => {
|
|
513
|
-
const result = apiResponse
|
|
514
|
-
.setDevMode(true)
|
|
515
|
-
.add({
|
|
516
|
-
path: '/api/test1',
|
|
517
|
-
method: ApiMethodItem.get,
|
|
518
|
-
response: {}
|
|
519
|
-
})
|
|
520
|
-
.add({
|
|
521
|
-
path: '/api/test2',
|
|
522
|
-
method: ApiMethodItem.get,
|
|
523
|
-
response: {}
|
|
524
|
-
})
|
|
525
|
-
|
|
526
|
-
expect(result).toBe(apiResponse)
|
|
527
|
-
expect(apiResponse.getList()).toHaveLength(2)
|
|
528
|
-
})
|
|
529
|
-
|
|
530
|
-
it('should handle FormData request matching', () => {
|
|
531
|
-
const responseItem: ApiResponseItem = {
|
|
532
|
-
path: '/api/upload',
|
|
533
|
-
method: ApiMethodItem.post,
|
|
534
|
-
request: '*any',
|
|
535
|
-
response: { uploaded: true }
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
apiResponse.add(responseItem)
|
|
539
|
-
|
|
540
|
-
const formData = new FormData()
|
|
541
|
-
formData.set('file', 'test.jpg')
|
|
542
|
-
|
|
543
|
-
const result = apiResponse.get('/api/upload', ApiMethodItem.post, formData)
|
|
544
|
-
expect(result).toEqual(responseItem)
|
|
545
|
-
})
|
|
546
|
-
})
|
|
547
|
-
})
|