1
1
import {
2
+ average ,
3
+ count ,
2
4
DocumentReference ,
3
5
getDoc ,
4
6
getDocFromCache ,
@@ -10,18 +12,23 @@ import {
10
12
} from "firebase/firestore" ;
11
13
import { beforeEach , describe , expect , it , vi } from "vitest" ;
12
14
import { newSymbol } from "../__testfixtures__" ;
13
- import { getDocFromSource , getDocsFromSource , isDocRefEqual , isQueryEqual } from "./internal" ;
14
-
15
- vi . mock ( "firebase/firestore" , ( ) => ( {
16
- getDoc : vi . fn ( ) ,
17
- getDocFromServer : vi . fn ( ) ,
18
- getDocFromCache : vi . fn ( ) ,
19
- getDocs : vi . fn ( ) ,
20
- getDocsFromServer : vi . fn ( ) ,
21
- getDocsFromCache : vi . fn ( ) ,
22
- queryEqual : Object . is ,
23
- refEqual : Object . is ,
24
- } ) ) ;
15
+ import { getDocFromSource , getDocsFromSource , isAggregateSpecEqual , isDocRefEqual , isQueryEqual } from "./internal" ;
16
+
17
+ vi . mock ( "firebase/firestore" , async ( ) => {
18
+ const mod = await vi . importActual < typeof import ( "firebase/firestore" ) > ( "firebase/firestore" ) ;
19
+
20
+ return {
21
+ ...mod ,
22
+ getDoc : vi . fn ( ) ,
23
+ getDocFromServer : vi . fn ( ) ,
24
+ getDocFromCache : vi . fn ( ) ,
25
+ getDocs : vi . fn ( ) ,
26
+ getDocsFromServer : vi . fn ( ) ,
27
+ getDocsFromCache : vi . fn ( ) ,
28
+ queryEqual : Object . is ,
29
+ refEqual : Object . is ,
30
+ } ;
31
+ } ) ;
25
32
26
33
beforeEach ( ( ) => {
27
34
vi . resetAllMocks ( ) ;
@@ -110,3 +117,29 @@ describe("isQueryEqual", () => {
110
117
expect ( isQueryEqual ( queryA , queryB ) ) . toBe ( false ) ;
111
118
} ) ;
112
119
} ) ;
120
+
121
+ describe ( "isAggregateSpecEqual" , ( ) => {
122
+ it ( "different key count" , ( ) => {
123
+ const spec1 = { count : count ( ) } ;
124
+ const spec2 = { } ;
125
+ expect ( isAggregateSpecEqual ( spec1 , spec2 ) ) . toBe ( false ) ;
126
+ } ) ;
127
+
128
+ it ( "different aggregations" , ( ) => {
129
+ const spec1 = { value : count ( ) } ;
130
+ const spec2 = { value : average ( "abc" ) } ;
131
+ expect ( isAggregateSpecEqual ( spec1 , spec2 ) ) . toBe ( false ) ;
132
+ } ) ;
133
+
134
+ it ( "identical, single aggregate" , ( ) => {
135
+ const spec1 = { count : count ( ) } ;
136
+ const spec2 = { count : count ( ) } ;
137
+ expect ( isAggregateSpecEqual ( spec1 , spec2 ) ) . toBe ( true ) ;
138
+ } ) ;
139
+
140
+ it ( "identical, multiple aggregates" , ( ) => {
141
+ const spec1 = { count : count ( ) , avg : average ( "123" ) } ;
142
+ const spec2 = { count : count ( ) , avg : average ( "123" ) } ;
143
+ expect ( isAggregateSpecEqual ( spec1 , spec2 ) ) . toBe ( true ) ;
144
+ } ) ;
145
+ } ) ;
0 commit comments