-
Notifications
You must be signed in to change notification settings - Fork 210
Expand file tree
/
Copy pathinject-live-query.test-d.ts
More file actions
138 lines (117 loc) · 3.94 KB
/
inject-live-query.test-d.ts
File metadata and controls
138 lines (117 loc) · 3.94 KB
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import { describe, expectTypeOf, it } from 'vitest'
import { createCollection } from '../../db/src/collection/index'
import { mockSyncCollectionOptions } from '../../db/tests/utils'
import {
createLiveQueryCollection,
eq,
liveQueryCollectionOptions,
} from '../../db/src/query/index'
import { injectLiveQuery } from '../src/index'
import type { SingleResult } from '../../db/src/types'
type Person = {
id: string
name: string
age: number
email: string
isActive: boolean
team: string
}
describe(`injectLiveQuery type assertions`, () => {
it(`should type findOne query builder to return a single row`, () => {
const collection = createCollection(
mockSyncCollectionOptions<Person>({
id: `test-persons-findone-angular`,
getKey: (person: Person) => person.id,
initialData: [],
}),
)
const { data } = injectLiveQuery((q) =>
q
.from({ collection })
.where(({ collection: c }) => eq(c.id, `3`))
.findOne(),
)
// findOne returns a single result or undefined
expectTypeOf(data()).toEqualTypeOf<Person | undefined>()
})
it(`should type findOne config object to return a single row`, () => {
const collection = createCollection(
mockSyncCollectionOptions<Person>({
id: `test-persons-findone-config-angular`,
getKey: (person: Person) => person.id,
initialData: [],
}),
)
const { data } = injectLiveQuery({
params: () => ({ id: `3` }),
query: ({ params, q }) =>
q
.from({ collection })
.where(({ collection: c }) => eq(c.id, params.id))
.findOne(),
})
// findOne returns a single result or undefined
expectTypeOf(data()).toEqualTypeOf<Person | undefined>()
})
it(`should type findOne collection using liveQueryCollectionOptions to return a single row`, () => {
const collection = createCollection(
mockSyncCollectionOptions<Person>({
id: `test-persons-findone-options-angular`,
getKey: (person: Person) => person.id,
initialData: [],
}),
)
const options = liveQueryCollectionOptions({
query: (q) =>
q
.from({ collection })
.where(({ collection: c }) => eq(c.id, `3`))
.findOne(),
})
const liveQueryCollection = createCollection(options)
expectTypeOf(liveQueryCollection).toExtend<SingleResult>()
const { data } = injectLiveQuery(liveQueryCollection)
// findOne returns a single result or undefined
expectTypeOf(data()).toEqualTypeOf<Person | undefined>()
})
it(`should type findOne collection using createLiveQueryCollection to return a single row`, () => {
const collection = createCollection(
mockSyncCollectionOptions<Person>({
id: `test-persons-findone-create-angular`,
getKey: (person: Person) => person.id,
initialData: [],
}),
)
const liveQueryCollection = createLiveQueryCollection({
query: (q) =>
q
.from({ collection })
.where(({ collection: c }) => eq(c.id, `3`))
.findOne(),
})
expectTypeOf(liveQueryCollection).toExtend<SingleResult>()
const { data } = injectLiveQuery(liveQueryCollection)
// findOne returns a single result or undefined
expectTypeOf(data()).toEqualTypeOf<Person | undefined>()
})
it(`should type regular query to return an array`, () => {
const collection = createCollection(
mockSyncCollectionOptions<Person>({
id: `test-persons-array-angular`,
getKey: (person: Person) => person.id,
initialData: [],
}),
)
const { data } = injectLiveQuery((q) =>
q
.from({ collection })
.where(({ collection: c }) => eq(c.isActive, true))
.select(({ collection: c }) => ({
id: c.id,
name: c.name,
})),
)
// Regular queries should return an array
expectTypeOf(data()).toEqualTypeOf<Array<{ id: string; name: string }>>()
})
})