1
1
import { mount } from '@vue/test-utils'
2
- import { describe , expect , it } from 'vitest'
2
+ import { beforeEach , describe , expect , it } from 'vitest'
3
3
import {
4
4
addDoc ,
5
5
doc as originalDoc ,
6
6
DocumentData ,
7
7
DocumentReference ,
8
8
FirestoreError ,
9
9
} from 'firebase/firestore'
10
- import { expectType , setupFirestoreRefs , tds , firestore } from '../utils'
10
+ import {
11
+ expectType ,
12
+ setupFirestoreRefs ,
13
+ tds ,
14
+ firestore ,
15
+ firebaseApp ,
16
+ } from '../utils'
11
17
import { nextTick , ref , shallowRef , unref , type Ref } from 'vue'
12
18
import { isPOJO , _MaybeRef , _Nullable } from '../../src/shared'
13
19
import {
@@ -17,6 +23,10 @@ import {
17
23
_RefFirestore ,
18
24
} from '../../src'
19
25
import { mockWarn } from '../vitest-mock-warn'
26
+ import {
27
+ useSSRInitialState ,
28
+ _initialStatesMap ,
29
+ } from '../../src/ssr/initialState'
20
30
21
31
describe (
22
32
'Firestore documents' ,
@@ -57,6 +67,11 @@ describe(
57
67
}
58
68
}
59
69
70
+ beforeEach ( ( ) => {
71
+ // delete any ssr state
72
+ _initialStatesMap . delete ( firebaseApp )
73
+ } )
74
+
60
75
it ( 'binds a document' , async ( ) => {
61
76
const { wrapper, itemRef, data } = factory ( )
62
77
@@ -118,6 +133,45 @@ describe(
118
133
expect ( data . value ! . id ) . toBe ( itemRef . id )
119
134
} )
120
135
136
+ it ( 'sets pending while loading' , async ( ) => {
137
+ const itemRef = shallowRef ( doc ( 'a' ) )
138
+ const { pending, promise } = factory ( { ref : itemRef } )
139
+
140
+ expect ( pending . value ) . toBe ( true )
141
+ await promise . value
142
+ expect ( pending . value ) . toBe ( false )
143
+
144
+ // set the target to a new ref so it can be loaded again
145
+ itemRef . value = doc ( 'b' )
146
+
147
+ await nextTick ( ) // for the watcher to trigger
148
+ expect ( pending . value ) . toBe ( true )
149
+ await promise . value
150
+ expect ( pending . value ) . toBe ( false )
151
+ } )
152
+
153
+ it ( 'sets pending to false if there is an initial value (ssr)' , async ( ) => {
154
+ const itemRef = shallowRef ( doc ( ) )
155
+ useSSRInitialState ( { f : { a : 1 } , r : { } , s : { } , u : { } } , firebaseApp )
156
+ const { pending, promise } = factory ( {
157
+ ref : itemRef ,
158
+ options : { ssrKey : 'a' } ,
159
+ } )
160
+
161
+ expect ( pending . value ) . toBe ( false )
162
+ await promise . value
163
+ expect ( pending . value ) . toBe ( false )
164
+ } )
165
+
166
+ it ( 'skips setting pending if the object is an empty ref' , async ( ) => {
167
+ const itemRef = shallowRef ( )
168
+ const { pending, promise } = factory ( { ref : itemRef } )
169
+
170
+ expect ( pending . value ) . toBe ( false )
171
+ await promise . value
172
+ expect ( pending . value ) . toBe ( false )
173
+ } )
174
+
121
175
it ( 'manually unbinds a document' , async ( ) => {
122
176
const { itemRef, data, stop : unbind } = factory ( )
123
177
0 commit comments