@dxtmisha/functional-basic 0.1.1 → 0.2.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.
- package/dist/functions/copyObjectLite.d.ts +9 -0
- package/dist/functions/isDomData.d.ts +6 -0
- package/dist/library.d.ts +2 -0
- package/dist/library.js +414 -413
- 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,222 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach } from 'vitest'
|
|
2
|
-
import { ApiDefault } from '../ApiDefault'
|
|
3
|
-
|
|
4
|
-
describe('ApiDefault', () => {
|
|
5
|
-
let apiDefault: ApiDefault
|
|
6
|
-
|
|
7
|
-
beforeEach(() => {
|
|
8
|
-
apiDefault = new ApiDefault()
|
|
9
|
-
})
|
|
10
|
-
|
|
11
|
-
describe('is', () => {
|
|
12
|
-
it('should return false when no default data is set', () => {
|
|
13
|
-
expect(apiDefault.is()).toBe(false)
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
it('should return true when default data is set', () => {
|
|
17
|
-
apiDefault.set({ key: 'value' })
|
|
18
|
-
expect(apiDefault.is()).toBe(true)
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
it('should return false after setting undefined', () => {
|
|
22
|
-
apiDefault.set({ key: 'value' })
|
|
23
|
-
apiDefault.set(undefined as any)
|
|
24
|
-
expect(apiDefault.is()).toBe(false)
|
|
25
|
-
})
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
describe('get', () => {
|
|
29
|
-
it('should return undefined when no default data is set', () => {
|
|
30
|
-
expect(apiDefault.get()).toBeUndefined()
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
it('should return the default data', () => {
|
|
34
|
-
const data = { foo: 'bar', num: 42 }
|
|
35
|
-
apiDefault.set(data)
|
|
36
|
-
expect(apiDefault.get()).toEqual(data)
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
it('should return the same reference', () => {
|
|
40
|
-
const data = { key: 'value' }
|
|
41
|
-
apiDefault.set(data)
|
|
42
|
-
expect(apiDefault.get()).toBe(data)
|
|
43
|
-
})
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
describe('set', () => {
|
|
47
|
-
it('should set default data', () => {
|
|
48
|
-
const data = { test: 'data' }
|
|
49
|
-
apiDefault.set(data)
|
|
50
|
-
expect(apiDefault.get()).toEqual(data)
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
it('should overwrite existing default data', () => {
|
|
54
|
-
apiDefault.set({ old: 'data' })
|
|
55
|
-
const newData = { new: 'data' }
|
|
56
|
-
apiDefault.set(newData)
|
|
57
|
-
expect(apiDefault.get()).toEqual(newData)
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
it('should accept complex objects', () => {
|
|
61
|
-
const complexData = {
|
|
62
|
-
string: 'text',
|
|
63
|
-
number: 123,
|
|
64
|
-
boolean: true,
|
|
65
|
-
nested: { deep: { value: 'nested' } },
|
|
66
|
-
array: [1, 2, 3]
|
|
67
|
-
}
|
|
68
|
-
apiDefault.set(complexData)
|
|
69
|
-
expect(apiDefault.get()).toEqual(complexData)
|
|
70
|
-
})
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
describe('request', () => {
|
|
74
|
-
it('should return original request when no defaults are set', () => {
|
|
75
|
-
const request = { key: 'value' }
|
|
76
|
-
expect(apiDefault.request(request)).toEqual(request)
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
it('should merge defaults with object request', () => {
|
|
80
|
-
apiDefault.set({ default1: 'value1', default2: 'value2' })
|
|
81
|
-
const request = { custom: 'data' }
|
|
82
|
-
const result = apiDefault.request(request)
|
|
83
|
-
|
|
84
|
-
expect(result).toEqual({
|
|
85
|
-
default1: 'value1',
|
|
86
|
-
default2: 'value2',
|
|
87
|
-
custom: 'data'
|
|
88
|
-
})
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
it('should prioritize request data over defaults', () => {
|
|
92
|
-
apiDefault.set({ key: 'default' })
|
|
93
|
-
const request = { key: 'custom' }
|
|
94
|
-
const result = apiDefault.request(request)
|
|
95
|
-
|
|
96
|
-
expect(result).toEqual({ key: 'custom' })
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
it('should handle FormData requests', () => {
|
|
100
|
-
apiDefault.set({ defaultKey: 'defaultValue' })
|
|
101
|
-
const formData = new FormData()
|
|
102
|
-
formData.set('existingKey', 'existingValue')
|
|
103
|
-
|
|
104
|
-
const result = apiDefault.request(formData) as FormData
|
|
105
|
-
|
|
106
|
-
expect(result).toBeInstanceOf(FormData)
|
|
107
|
-
expect(result.get('existingKey')).toBe('existingValue')
|
|
108
|
-
expect(result.get('defaultKey')).toBe('defaultValue')
|
|
109
|
-
})
|
|
110
|
-
|
|
111
|
-
it('should not overwrite existing FormData entries', () => {
|
|
112
|
-
apiDefault.set({ key: 'default' })
|
|
113
|
-
const formData = new FormData()
|
|
114
|
-
formData.set('key', 'existing')
|
|
115
|
-
|
|
116
|
-
const result = apiDefault.request(formData) as FormData
|
|
117
|
-
|
|
118
|
-
expect(result.get('key')).toBe('existing')
|
|
119
|
-
})
|
|
120
|
-
|
|
121
|
-
it('should return FormData as-is when no defaults set', () => {
|
|
122
|
-
const formData = new FormData()
|
|
123
|
-
formData.set('key', 'value')
|
|
124
|
-
|
|
125
|
-
const result = apiDefault.request(formData)
|
|
126
|
-
|
|
127
|
-
expect(result).toBe(formData)
|
|
128
|
-
expect((result as FormData).get('key')).toBe('value')
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
it('should handle string request without modification', () => {
|
|
132
|
-
apiDefault.set({ key: 'value' })
|
|
133
|
-
const stringRequest = 'some-string-data'
|
|
134
|
-
|
|
135
|
-
expect(apiDefault.request(stringRequest)).toBe(stringRequest)
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
it('should handle undefined request', () => {
|
|
139
|
-
apiDefault.set({ key: 'value' })
|
|
140
|
-
expect(apiDefault.request(undefined)).toBeUndefined()
|
|
141
|
-
})
|
|
142
|
-
|
|
143
|
-
it('should handle array request without modification', () => {
|
|
144
|
-
apiDefault.set({ key: 'value' })
|
|
145
|
-
const arrayRequest = [1, 2, 3]
|
|
146
|
-
|
|
147
|
-
expect(apiDefault.request(arrayRequest)).toBe(arrayRequest)
|
|
148
|
-
})
|
|
149
|
-
})
|
|
150
|
-
|
|
151
|
-
describe('FormData integration', () => {
|
|
152
|
-
it('should add default values to FormData via request', () => {
|
|
153
|
-
apiDefault.set({ key1: 'value1', key2: 'value2' })
|
|
154
|
-
const formData = new FormData()
|
|
155
|
-
|
|
156
|
-
const result = apiDefault.request(formData) as FormData
|
|
157
|
-
|
|
158
|
-
expect(result.get('key1')).toBe('value1')
|
|
159
|
-
expect(result.get('key2')).toBe('value2')
|
|
160
|
-
})
|
|
161
|
-
|
|
162
|
-
it('should not overwrite existing FormData values via request', () => {
|
|
163
|
-
apiDefault.set({ existing: 'default', new: 'value' })
|
|
164
|
-
const formData = new FormData()
|
|
165
|
-
formData.set('existing', 'original')
|
|
166
|
-
|
|
167
|
-
const result = apiDefault.request(formData) as FormData
|
|
168
|
-
|
|
169
|
-
expect(result.get('existing')).toBe('original')
|
|
170
|
-
expect(result.get('new')).toBe('value')
|
|
171
|
-
})
|
|
172
|
-
|
|
173
|
-
it('should handle FormData with no defaults', () => {
|
|
174
|
-
const formData = new FormData()
|
|
175
|
-
formData.set('key', 'value')
|
|
176
|
-
|
|
177
|
-
const result = apiDefault.request(formData) as FormData
|
|
178
|
-
|
|
179
|
-
expect(result.get('key')).toBe('value')
|
|
180
|
-
})
|
|
181
|
-
|
|
182
|
-
it('should handle FormData with mixed existing and new values', () => {
|
|
183
|
-
apiDefault.set({ b: 'overwrite', c: '3' })
|
|
184
|
-
const formData = new FormData()
|
|
185
|
-
formData.set('a', '1')
|
|
186
|
-
formData.set('b', '2')
|
|
187
|
-
|
|
188
|
-
const result = apiDefault.request(formData) as FormData
|
|
189
|
-
|
|
190
|
-
expect(result.get('a')).toBe('1')
|
|
191
|
-
expect(result.get('b')).toBe('2') // не перезаписывается
|
|
192
|
-
expect(result.get('c')).toBe('3')
|
|
193
|
-
})
|
|
194
|
-
})
|
|
195
|
-
|
|
196
|
-
describe('integration tests', () => {
|
|
197
|
-
it('should handle complete workflow', () => {
|
|
198
|
-
// Установка дефолтных данных
|
|
199
|
-
apiDefault.set({ token: 'abc123', userId: '42' })
|
|
200
|
-
|
|
201
|
-
// Проверка наличия
|
|
202
|
-
expect(apiDefault.is()).toBe(true)
|
|
203
|
-
|
|
204
|
-
// Добавление к обычному объекту запроса
|
|
205
|
-
const objectRequest = { action: 'getData' }
|
|
206
|
-
const mergedObject = apiDefault.request(objectRequest)
|
|
207
|
-
expect(mergedObject).toEqual({
|
|
208
|
-
token: 'abc123',
|
|
209
|
-
userId: '42',
|
|
210
|
-
action: 'getData'
|
|
211
|
-
})
|
|
212
|
-
|
|
213
|
-
// Добавление к FormData
|
|
214
|
-
const formData = new FormData()
|
|
215
|
-
formData.set('file', 'test.jpg')
|
|
216
|
-
const mergedFormData = apiDefault.request(formData) as FormData
|
|
217
|
-
expect(mergedFormData.get('file')).toBe('test.jpg')
|
|
218
|
-
expect(mergedFormData.get('token')).toBe('abc123')
|
|
219
|
-
expect(mergedFormData.get('userId')).toBe('42')
|
|
220
|
-
})
|
|
221
|
-
})
|
|
222
|
-
})
|
|
@@ -1,447 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach } from 'vitest'
|
|
2
|
-
import { ApiHeaders } from '../ApiHeaders'
|
|
3
|
-
|
|
4
|
-
describe('ApiHeaders', () => {
|
|
5
|
-
let apiHeaders: ApiHeaders
|
|
6
|
-
|
|
7
|
-
beforeEach(() => {
|
|
8
|
-
apiHeaders = new ApiHeaders()
|
|
9
|
-
})
|
|
10
|
-
|
|
11
|
-
describe('get', () => {
|
|
12
|
-
it('should return undefined when value is null', () => {
|
|
13
|
-
const result = apiHeaders.get(null)
|
|
14
|
-
|
|
15
|
-
expect(result).toBeUndefined()
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
it('should return object with Content-Type when value is undefined', () => {
|
|
19
|
-
const result = apiHeaders.get()
|
|
20
|
-
|
|
21
|
-
expect(result).toEqual({
|
|
22
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
23
|
-
})
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
it('should return object with custom Content-Type when value is undefined', () => {
|
|
27
|
-
const result = apiHeaders.get(undefined, 'text/plain')
|
|
28
|
-
|
|
29
|
-
expect(result).toEqual({
|
|
30
|
-
'Content-Type': 'text/plain'
|
|
31
|
-
})
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
it('should merge custom headers with default Content-Type', () => {
|
|
35
|
-
const customHeaders = {
|
|
36
|
-
'Authorization': 'Bearer token123',
|
|
37
|
-
'X-Custom-Header': 'custom-value'
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const result = apiHeaders.get(customHeaders)
|
|
41
|
-
|
|
42
|
-
expect(result).toEqual({
|
|
43
|
-
'Authorization': 'Bearer token123',
|
|
44
|
-
'X-Custom-Header': 'custom-value',
|
|
45
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
46
|
-
})
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
it('should merge custom headers with custom Content-Type', () => {
|
|
50
|
-
const customHeaders = {
|
|
51
|
-
Authorization: 'Bearer token123'
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const result = apiHeaders.get(customHeaders, 'application/xml')
|
|
55
|
-
|
|
56
|
-
expect(result).toEqual({
|
|
57
|
-
'Authorization': 'Bearer token123',
|
|
58
|
-
'Content-Type': 'application/xml'
|
|
59
|
-
})
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
it('should merge default headers with custom headers, custom headers override', () => {
|
|
63
|
-
apiHeaders.set({
|
|
64
|
-
'X-Default-Header': 'default-value',
|
|
65
|
-
'Authorization': 'Bearer default-token'
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
const customHeaders = {
|
|
69
|
-
Authorization: 'Bearer custom-token'
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const result = apiHeaders.get(customHeaders)
|
|
73
|
-
|
|
74
|
-
expect(result).toEqual({
|
|
75
|
-
'X-Default-Header': 'default-value',
|
|
76
|
-
'Authorization': 'Bearer custom-token',
|
|
77
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
78
|
-
})
|
|
79
|
-
})
|
|
80
|
-
|
|
81
|
-
it('should not add Content-Type when type is empty string (isFilled check)', () => {
|
|
82
|
-
const result = apiHeaders.get({}, '')
|
|
83
|
-
|
|
84
|
-
expect(result).toEqual({})
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
it('should not add Content-Type when type is null', () => {
|
|
88
|
-
const result = apiHeaders.get({}, null as any)
|
|
89
|
-
|
|
90
|
-
expect(result).toEqual({})
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
it('should not add Content-Type when type is "0" (isFilled returns false)', () => {
|
|
94
|
-
const result = apiHeaders.get({}, '0')
|
|
95
|
-
|
|
96
|
-
expect(result).toEqual({})
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
it('should not add Content-Type when type is "undefined" string (isFilled returns false)', () => {
|
|
100
|
-
const result = apiHeaders.get({}, 'undefined')
|
|
101
|
-
|
|
102
|
-
expect(result).toEqual({})
|
|
103
|
-
})
|
|
104
|
-
|
|
105
|
-
it('should not add Content-Type when type is "null" string (isFilled returns false)', () => {
|
|
106
|
-
const result = apiHeaders.get({}, 'null')
|
|
107
|
-
|
|
108
|
-
expect(result).toEqual({})
|
|
109
|
-
})
|
|
110
|
-
|
|
111
|
-
it('should not add Content-Type when type is "false" string (isFilled returns false)', () => {
|
|
112
|
-
const result = apiHeaders.get({}, 'false')
|
|
113
|
-
|
|
114
|
-
expect(result).toEqual({})
|
|
115
|
-
})
|
|
116
|
-
|
|
117
|
-
it('should not add Content-Type when type is "[]" string (isFilled returns false)', () => {
|
|
118
|
-
const result = apiHeaders.get({}, '[]')
|
|
119
|
-
|
|
120
|
-
expect(result).toEqual({})
|
|
121
|
-
})
|
|
122
|
-
|
|
123
|
-
it('should merge default headers set via set() method', () => {
|
|
124
|
-
apiHeaders.set({
|
|
125
|
-
'X-Api-Key': 'api-key-123',
|
|
126
|
-
'X-App-Version': '1.0.0'
|
|
127
|
-
})
|
|
128
|
-
|
|
129
|
-
const result = apiHeaders.get()
|
|
130
|
-
|
|
131
|
-
expect(result).toEqual({
|
|
132
|
-
'X-Api-Key': 'api-key-123',
|
|
133
|
-
'X-App-Version': '1.0.0',
|
|
134
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
135
|
-
})
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
it('should return empty object when value is empty object and type is empty string', () => {
|
|
139
|
-
const result = apiHeaders.get({}, '')
|
|
140
|
-
|
|
141
|
-
expect(result).toEqual({})
|
|
142
|
-
})
|
|
143
|
-
|
|
144
|
-
it('should merge multiple custom headers with Content-Type', () => {
|
|
145
|
-
const customHeaders = {
|
|
146
|
-
'Accept': 'application/json',
|
|
147
|
-
'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
|
|
148
|
-
'Cache-Control': 'no-cache',
|
|
149
|
-
'Pragma': 'no-cache'
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const result = apiHeaders.get(customHeaders)
|
|
153
|
-
|
|
154
|
-
expect(result).toEqual({
|
|
155
|
-
...customHeaders,
|
|
156
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
157
|
-
})
|
|
158
|
-
})
|
|
159
|
-
|
|
160
|
-
it('should return object with custom headers when default headers are empty', () => {
|
|
161
|
-
const customHeaders = {
|
|
162
|
-
'X-Custom': 'value'
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
const result = apiHeaders.get(customHeaders)
|
|
166
|
-
|
|
167
|
-
expect(result).toEqual({
|
|
168
|
-
'X-Custom': 'value',
|
|
169
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
170
|
-
})
|
|
171
|
-
})
|
|
172
|
-
|
|
173
|
-
it('should override Content-Type from custom headers with type parameter', () => {
|
|
174
|
-
const customHeaders = {
|
|
175
|
-
'Content-Type': 'text/html'
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
const result = apiHeaders.get(customHeaders, 'application/xml')
|
|
179
|
-
|
|
180
|
-
expect(result).toEqual({
|
|
181
|
-
'Content-Type': 'application/xml'
|
|
182
|
-
})
|
|
183
|
-
})
|
|
184
|
-
})
|
|
185
|
-
|
|
186
|
-
describe('set', () => {
|
|
187
|
-
it('should set default headers when passed valid object', () => {
|
|
188
|
-
const headers = {
|
|
189
|
-
'Authorization': 'Bearer token123',
|
|
190
|
-
'X-Custom-Header': 'custom-value'
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
const returnedInstance = apiHeaders.set(headers)
|
|
194
|
-
|
|
195
|
-
expect(returnedInstance).toBe(apiHeaders)
|
|
196
|
-
const result = apiHeaders.get()
|
|
197
|
-
expect(result).toEqual({
|
|
198
|
-
'Authorization': 'Bearer token123',
|
|
199
|
-
'X-Custom-Header': 'custom-value',
|
|
200
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
201
|
-
})
|
|
202
|
-
})
|
|
203
|
-
|
|
204
|
-
it('should return this for method chaining', () => {
|
|
205
|
-
const headers = { 'X-Test': 'test' }
|
|
206
|
-
|
|
207
|
-
const result = apiHeaders.set(headers)
|
|
208
|
-
|
|
209
|
-
expect(result).toBe(apiHeaders)
|
|
210
|
-
})
|
|
211
|
-
|
|
212
|
-
it('should replace existing default headers completely', () => {
|
|
213
|
-
apiHeaders.set({
|
|
214
|
-
'X-First-Header': 'first'
|
|
215
|
-
})
|
|
216
|
-
|
|
217
|
-
apiHeaders.set({
|
|
218
|
-
'X-Second-Header': 'second'
|
|
219
|
-
})
|
|
220
|
-
|
|
221
|
-
const result = apiHeaders.get()
|
|
222
|
-
|
|
223
|
-
expect(result).toEqual({
|
|
224
|
-
'X-Second-Header': 'second',
|
|
225
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
226
|
-
})
|
|
227
|
-
expect(result).not.toHaveProperty('X-First-Header')
|
|
228
|
-
})
|
|
229
|
-
|
|
230
|
-
it('should not modify headers when passed null (isObjectNotArray check)', () => {
|
|
231
|
-
apiHeaders.set({
|
|
232
|
-
'X-Original': 'original'
|
|
233
|
-
})
|
|
234
|
-
|
|
235
|
-
apiHeaders.set(null as any)
|
|
236
|
-
|
|
237
|
-
const result = apiHeaders.get()
|
|
238
|
-
|
|
239
|
-
expect(result).toEqual({
|
|
240
|
-
'X-Original': 'original',
|
|
241
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
242
|
-
})
|
|
243
|
-
})
|
|
244
|
-
|
|
245
|
-
it('should not modify headers when passed undefined (isObjectNotArray check)', () => {
|
|
246
|
-
apiHeaders.set({
|
|
247
|
-
'X-Original': 'original'
|
|
248
|
-
})
|
|
249
|
-
|
|
250
|
-
apiHeaders.set(undefined as any)
|
|
251
|
-
|
|
252
|
-
const result = apiHeaders.get()
|
|
253
|
-
|
|
254
|
-
expect(result).toEqual({
|
|
255
|
-
'X-Original': 'original',
|
|
256
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
257
|
-
})
|
|
258
|
-
})
|
|
259
|
-
|
|
260
|
-
it('should not modify headers when passed string (isObjectNotArray check)', () => {
|
|
261
|
-
apiHeaders.set({
|
|
262
|
-
'X-Original': 'original'
|
|
263
|
-
})
|
|
264
|
-
|
|
265
|
-
apiHeaders.set('string' as any)
|
|
266
|
-
|
|
267
|
-
const result = apiHeaders.get()
|
|
268
|
-
|
|
269
|
-
expect(result).toEqual({
|
|
270
|
-
'X-Original': 'original',
|
|
271
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
272
|
-
})
|
|
273
|
-
})
|
|
274
|
-
|
|
275
|
-
it('should not modify headers when passed number (isObjectNotArray check)', () => {
|
|
276
|
-
apiHeaders.set({
|
|
277
|
-
'X-Original': 'original'
|
|
278
|
-
})
|
|
279
|
-
|
|
280
|
-
apiHeaders.set(123 as any)
|
|
281
|
-
|
|
282
|
-
const result = apiHeaders.get()
|
|
283
|
-
|
|
284
|
-
expect(result).toEqual({
|
|
285
|
-
'X-Original': 'original',
|
|
286
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
287
|
-
})
|
|
288
|
-
})
|
|
289
|
-
|
|
290
|
-
it('should not modify headers when passed array (isObjectNotArray check)', () => {
|
|
291
|
-
apiHeaders.set({
|
|
292
|
-
'X-Original': 'original'
|
|
293
|
-
})
|
|
294
|
-
|
|
295
|
-
apiHeaders.set(['array'] as any)
|
|
296
|
-
|
|
297
|
-
const result = apiHeaders.get()
|
|
298
|
-
|
|
299
|
-
expect(result).toEqual({
|
|
300
|
-
'X-Original': 'original',
|
|
301
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
302
|
-
})
|
|
303
|
-
})
|
|
304
|
-
|
|
305
|
-
it('should set empty object as default headers', () => {
|
|
306
|
-
apiHeaders.set({
|
|
307
|
-
'X-Original': 'original'
|
|
308
|
-
})
|
|
309
|
-
|
|
310
|
-
apiHeaders.set({})
|
|
311
|
-
|
|
312
|
-
const result = apiHeaders.get()
|
|
313
|
-
|
|
314
|
-
expect(result).toEqual({
|
|
315
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
316
|
-
})
|
|
317
|
-
})
|
|
318
|
-
|
|
319
|
-
it('should allow method chaining with multiple sets', () => {
|
|
320
|
-
const result = apiHeaders
|
|
321
|
-
.set({ 'X-First': 'first' })
|
|
322
|
-
.set({ 'X-Second': 'second' })
|
|
323
|
-
.get()
|
|
324
|
-
|
|
325
|
-
expect(result).toEqual({
|
|
326
|
-
'X-Second': 'second',
|
|
327
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
328
|
-
})
|
|
329
|
-
})
|
|
330
|
-
})
|
|
331
|
-
|
|
332
|
-
describe('integration scenarios', () => {
|
|
333
|
-
it('should properly merge default and custom headers with custom type', () => {
|
|
334
|
-
apiHeaders.set({
|
|
335
|
-
'X-Api-Key': 'api-key-123',
|
|
336
|
-
'X-App-Version': '1.0.0'
|
|
337
|
-
})
|
|
338
|
-
|
|
339
|
-
const result = apiHeaders.get({
|
|
340
|
-
'Authorization': 'Bearer token123',
|
|
341
|
-
'X-Request-Id': 'req-456'
|
|
342
|
-
}, 'application/xml')
|
|
343
|
-
|
|
344
|
-
expect(result).toEqual({
|
|
345
|
-
'X-Api-Key': 'api-key-123',
|
|
346
|
-
'X-App-Version': '1.0.0',
|
|
347
|
-
'Authorization': 'Bearer token123',
|
|
348
|
-
'X-Request-Id': 'req-456',
|
|
349
|
-
'Content-Type': 'application/xml'
|
|
350
|
-
})
|
|
351
|
-
})
|
|
352
|
-
|
|
353
|
-
it('should allow updating default headers multiple times', () => {
|
|
354
|
-
apiHeaders.set({
|
|
355
|
-
'X-Api-Key': 'old-key'
|
|
356
|
-
})
|
|
357
|
-
|
|
358
|
-
apiHeaders.set({
|
|
359
|
-
'X-Api-Key': 'new-key',
|
|
360
|
-
'X-New-Header': 'new-value'
|
|
361
|
-
})
|
|
362
|
-
|
|
363
|
-
const result = apiHeaders.get({
|
|
364
|
-
Authorization: 'Bearer token'
|
|
365
|
-
})
|
|
366
|
-
|
|
367
|
-
expect(result).toEqual({
|
|
368
|
-
'X-Api-Key': 'new-key',
|
|
369
|
-
'X-New-Header': 'new-value',
|
|
370
|
-
'Authorization': 'Bearer token',
|
|
371
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
372
|
-
})
|
|
373
|
-
})
|
|
374
|
-
|
|
375
|
-
it('should handle real-world authentication scenario', () => {
|
|
376
|
-
apiHeaders.set({
|
|
377
|
-
'X-Api-Key': 'production-key-123',
|
|
378
|
-
'X-App-Version': '2.1.0',
|
|
379
|
-
'X-Platform': 'web'
|
|
380
|
-
})
|
|
381
|
-
|
|
382
|
-
const result = apiHeaders.get({
|
|
383
|
-
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9',
|
|
384
|
-
'X-Request-Id': 'uuid-1234-5678'
|
|
385
|
-
})
|
|
386
|
-
|
|
387
|
-
expect(result).toEqual({
|
|
388
|
-
'X-Api-Key': 'production-key-123',
|
|
389
|
-
'X-App-Version': '2.1.0',
|
|
390
|
-
'X-Platform': 'web',
|
|
391
|
-
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9',
|
|
392
|
-
'X-Request-Id': 'uuid-1234-5678',
|
|
393
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
394
|
-
})
|
|
395
|
-
})
|
|
396
|
-
|
|
397
|
-
it('should handle form data content type scenario', () => {
|
|
398
|
-
const result = apiHeaders.get(
|
|
399
|
-
{ Authorization: 'Bearer token' },
|
|
400
|
-
'multipart/form-data'
|
|
401
|
-
)
|
|
402
|
-
|
|
403
|
-
expect(result).toEqual({
|
|
404
|
-
'Authorization': 'Bearer token',
|
|
405
|
-
'Content-Type': 'multipart/form-data'
|
|
406
|
-
})
|
|
407
|
-
})
|
|
408
|
-
|
|
409
|
-
it('should handle scenario with no default headers and no custom headers', () => {
|
|
410
|
-
const result = apiHeaders.get()
|
|
411
|
-
|
|
412
|
-
expect(result).toEqual({
|
|
413
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
414
|
-
})
|
|
415
|
-
})
|
|
416
|
-
|
|
417
|
-
it('should handle scenario with default headers only', () => {
|
|
418
|
-
apiHeaders.set({
|
|
419
|
-
'X-Api-Key': 'key-123'
|
|
420
|
-
})
|
|
421
|
-
|
|
422
|
-
const result = apiHeaders.get()
|
|
423
|
-
|
|
424
|
-
expect(result).toEqual({
|
|
425
|
-
'X-Api-Key': 'key-123',
|
|
426
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
427
|
-
})
|
|
428
|
-
})
|
|
429
|
-
|
|
430
|
-
it('should handle scenario with custom headers overriding default headers', () => {
|
|
431
|
-
apiHeaders.set({
|
|
432
|
-
'X-Api-Key': 'default-key',
|
|
433
|
-
'X-Version': '1.0'
|
|
434
|
-
})
|
|
435
|
-
|
|
436
|
-
const result = apiHeaders.get({
|
|
437
|
-
'X-Api-Key': 'custom-key'
|
|
438
|
-
})
|
|
439
|
-
|
|
440
|
-
expect(result).toEqual({
|
|
441
|
-
'X-Api-Key': 'custom-key',
|
|
442
|
-
'X-Version': '1.0',
|
|
443
|
-
'Content-Type': 'application/json;charset=UTF-8'
|
|
444
|
-
})
|
|
445
|
-
})
|
|
446
|
-
})
|
|
447
|
-
})
|