@@ -24,12 +24,14 @@ import type { Value } from '../../../src/protos/firestore_proto_api';
24
24
import { toTimestamp } from '../../../src/remote/serializer' ;
25
25
import { JSON_SERIALIZER } from '../local/persistence_test_helpers' ;
26
26
27
+ import { compare } from './ordered_code_writer.test' ;
28
+
27
29
describe ( 'Firestore Index Value Writer' , ( ) => {
28
- function compareIndexValues (
30
+ function compareIndexEncodedValues (
29
31
value1 : Value ,
30
32
value2 : Value ,
31
33
direction : IndexKind
32
- ) : void {
34
+ ) : number {
33
35
const encoder1 = new IndexByteEncoder ( ) ;
34
36
const encoder2 = new IndexByteEncoder ( ) ;
35
37
FirestoreIndexValueWriter . INSTANCE . writeIndexValue (
@@ -41,7 +43,8 @@ describe('Firestore Index Value Writer', () => {
41
43
value2 ,
42
44
encoder2 . forKind ( direction )
43
45
) ;
44
- expect ( encoder1 . encodedBytes ( ) ) . to . deep . equal ( encoder2 . encodedBytes ( ) ) ;
46
+
47
+ return compare ( encoder1 . encodedBytes ( ) , encoder2 . encodedBytes ( ) ) ;
45
48
}
46
49
47
50
describe ( 'can gracefully handle different format of timestamp' , ( ) => {
@@ -58,15 +61,31 @@ describe('Firestore Index Value Writer', () => {
58
61
new Timestamp ( 1451730050 , 850000000 )
59
62
)
60
63
} ;
61
- compareIndexValues ( value1 , value2 , IndexKind . ASCENDING ) ;
62
- compareIndexValues ( value1 , value3 , IndexKind . ASCENDING ) ;
63
- compareIndexValues ( value1 , value4 , IndexKind . ASCENDING ) ;
64
- compareIndexValues ( value1 , value5 , IndexKind . ASCENDING ) ;
64
+ expect (
65
+ compareIndexEncodedValues ( value1 , value2 , IndexKind . ASCENDING )
66
+ ) . to . equal ( 0 ) ;
67
+ expect (
68
+ compareIndexEncodedValues ( value1 , value3 , IndexKind . ASCENDING )
69
+ ) . to . equal ( 0 ) ;
70
+ expect (
71
+ compareIndexEncodedValues ( value1 , value4 , IndexKind . ASCENDING )
72
+ ) . to . equal ( 0 ) ;
73
+ expect (
74
+ compareIndexEncodedValues ( value1 , value5 , IndexKind . ASCENDING )
75
+ ) . to . equal ( 0 ) ;
65
76
66
- compareIndexValues ( value1 , value2 , IndexKind . DESCENDING ) ;
67
- compareIndexValues ( value1 , value3 , IndexKind . DESCENDING ) ;
68
- compareIndexValues ( value1 , value4 , IndexKind . DESCENDING ) ;
69
- compareIndexValues ( value1 , value5 , IndexKind . DESCENDING ) ;
77
+ expect (
78
+ compareIndexEncodedValues ( value1 , value2 , IndexKind . DESCENDING )
79
+ ) . to . equal ( 0 ) ;
80
+ expect (
81
+ compareIndexEncodedValues ( value1 , value3 , IndexKind . DESCENDING )
82
+ ) . to . equal ( 0 ) ;
83
+ expect (
84
+ compareIndexEncodedValues ( value1 , value4 , IndexKind . DESCENDING )
85
+ ) . to . equal ( 0 ) ;
86
+ expect (
87
+ compareIndexEncodedValues ( value1 , value5 , IndexKind . DESCENDING )
88
+ ) . to . equal ( 0 ) ;
70
89
} ) ;
71
90
72
91
it ( 'can handle timestamps with 0 nanoseconds' , ( ) => {
@@ -79,13 +98,76 @@ describe('Firestore Index Value Writer', () => {
79
98
new Timestamp ( 1451730050 , 0 )
80
99
)
81
100
} ;
82
- compareIndexValues ( value1 , value2 , IndexKind . ASCENDING ) ;
83
- compareIndexValues ( value1 , value3 , IndexKind . ASCENDING ) ;
84
- compareIndexValues ( value1 , value4 , IndexKind . ASCENDING ) ;
101
+ expect (
102
+ compareIndexEncodedValues ( value1 , value2 , IndexKind . ASCENDING )
103
+ ) . to . equal ( 0 ) ;
104
+ expect (
105
+ compareIndexEncodedValues ( value1 , value3 , IndexKind . ASCENDING )
106
+ ) . to . equal ( 0 ) ;
107
+ expect (
108
+ compareIndexEncodedValues ( value1 , value4 , IndexKind . ASCENDING )
109
+ ) . to . equal ( 0 ) ;
110
+
111
+ expect (
112
+ compareIndexEncodedValues ( value1 , value2 , IndexKind . DESCENDING )
113
+ ) . to . equal ( 0 ) ;
114
+ expect (
115
+ compareIndexEncodedValues ( value1 , value3 , IndexKind . DESCENDING )
116
+ ) . to . equal ( 0 ) ;
117
+ expect (
118
+ compareIndexEncodedValues ( value1 , value4 , IndexKind . DESCENDING )
119
+ ) . to . equal ( 0 ) ;
120
+ } ) ;
121
+
122
+ it ( 'can compare timestamps with different formats' , ( ) => {
123
+ const value1 = { timestampValue : '2016-01-02T10:20:50Z' } ;
124
+ const value2 = { timestampValue : '2016-01-02T10:20:50.000001Z' } ;
125
+ const value3 = {
126
+ timestampValue : { seconds : 1451730050 , nanos : 999999999 }
127
+ } ;
128
+ const value4 = {
129
+ timestampValue : toTimestamp (
130
+ JSON_SERIALIZER ,
131
+ new Timestamp ( 1451730050 , 1 )
132
+ )
133
+ } ;
134
+ expect (
135
+ compareIndexEncodedValues ( value1 , value2 , IndexKind . ASCENDING )
136
+ ) . to . equal ( - 1 ) ;
137
+ expect (
138
+ compareIndexEncodedValues ( value1 , value3 , IndexKind . ASCENDING )
139
+ ) . to . equal ( - 1 ) ;
140
+ expect (
141
+ compareIndexEncodedValues ( value1 , value4 , IndexKind . ASCENDING )
142
+ ) . to . equal ( - 1 ) ;
143
+ expect (
144
+ compareIndexEncodedValues ( value2 , value3 , IndexKind . ASCENDING )
145
+ ) . to . equal ( - 1 ) ;
146
+ expect (
147
+ compareIndexEncodedValues ( value2 , value4 , IndexKind . ASCENDING )
148
+ ) . to . equal ( 1 ) ;
149
+ expect (
150
+ compareIndexEncodedValues ( value3 , value4 , IndexKind . ASCENDING )
151
+ ) . to . equal ( 1 ) ;
85
152
86
- compareIndexValues ( value1 , value2 , IndexKind . DESCENDING ) ;
87
- compareIndexValues ( value1 , value3 , IndexKind . DESCENDING ) ;
88
- compareIndexValues ( value1 , value4 , IndexKind . DESCENDING ) ;
153
+ expect (
154
+ compareIndexEncodedValues ( value1 , value2 , IndexKind . DESCENDING )
155
+ ) . to . equal ( 1 ) ;
156
+ expect (
157
+ compareIndexEncodedValues ( value1 , value3 , IndexKind . DESCENDING )
158
+ ) . to . equal ( 1 ) ;
159
+ expect (
160
+ compareIndexEncodedValues ( value1 , value4 , IndexKind . DESCENDING )
161
+ ) . to . equal ( 1 ) ;
162
+ expect (
163
+ compareIndexEncodedValues ( value2 , value3 , IndexKind . DESCENDING )
164
+ ) . to . equal ( 1 ) ;
165
+ expect (
166
+ compareIndexEncodedValues ( value2 , value4 , IndexKind . DESCENDING )
167
+ ) . to . equal ( - 1 ) ;
168
+ expect (
169
+ compareIndexEncodedValues ( value3 , value4 , IndexKind . DESCENDING )
170
+ ) . to . equal ( - 1 ) ;
89
171
} ) ;
90
172
} ) ;
91
173
} ) ;
0 commit comments