-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
mergeAndCompare.test.ts
116 lines (110 loc) · 2.93 KB
/
mergeAndCompare.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import { test, expect } from 'vitest'
import { isDate, isString, isArray } from 'is-what'
import { mergeAndCompare } from '../src/index'
test('conversion based on original val', () => {
function convertTimestamps(originVal: any, targetVal: any) {
if (originVal === '%convertTimestamp%' && isString(targetVal) && isDate(new Date(targetVal))) {
return new Date(targetVal)
}
return targetVal
}
const origin = {
date: '%convertTimestamp%',
}
const target = {
date: '1990-06-22',
}
const res = mergeAndCompare(convertTimestamps, origin, target)
expect(res as any).toEqual({ date: new Date('1990-06-22') })
// doesn't work on base lvl anymore
// const res2 = mergeAndCompare(convertTimestamps, '%convertTimestamp%', '1990-06-22')
// expect(res2).toEqual( new Date('1990-06-22'))
})
test('conversion based on prop key', () => {
function convertTimestamps(originVal: any, targetVal: any, key: any) {
if (isString(targetVal) && key === 'date') {
return new Date(targetVal)
}
return targetVal
}
const origin = {
date: '%convertTimestamp%',
a: {},
}
const target = {
date: '1990-06-22',
a: { date: '1990-01-01' },
}
const res = mergeAndCompare(convertTimestamps, origin, target)
expect(res as any).toEqual({ date: new Date('1990-06-22'), a: { date: new Date('1990-01-01') } })
})
test('Extend with custom concat arrays', () => {
function concatArr(originVal: any, targetVal: any) {
if (isArray(originVal) && isArray(targetVal)) {
return originVal.concat(targetVal)
}
return targetVal
}
const origin = {
someArray: ['a'],
a: { b: { c: ['x'] } },
}
const target = {
someArray: ['b'],
a: { b: { c: ['y'] } },
}
const res = mergeAndCompare(concatArr, origin, target)
expect(res).toEqual({ someArray: ['a', 'b'], a: { b: { c: ['x', 'y'] } } })
// doesn't work on base lvl anymore
// const res2 = mergeAndCompare(concatArr, ['a'], ['b'])
// expect(res2).toEqual( ['a', 'b'])
})
test('undefined object', () => {
const origin = {
pages: {
'aa': 'ttt',
},
}
const newData = {
pages: {
'aa': '1111',
'bb': '2222',
}
}
function convertTimestamps(originVal: any, targetVal: any, key: any) {
if (originVal !== undefined)
return targetVal
}
const res = mergeAndCompare(convertTimestamps, origin, newData)
expect(res as any).toEqual({ pages: { aa: "1111", bb: undefined } })
})
test('undefined array', () => {
function convertTimestamps(originVal: any, targetVal: any, key: any) {
if (originVal !== undefined)
return targetVal
}
const origin = {
date: [
{
'new': 'aaa',
}
]
}
const target = {
date: [
{
'new': 'aaa',
'old': 'bbb',
}
]
}
const res = mergeAndCompare(convertTimestamps, origin, target)
expect(res as any).toEqual({
date: [
{
'new': 'aaa',
'old': undefined,
}
]
})
})