18
18
import '../setup' ;
19
19
import { expect } from 'chai' ;
20
20
import {
21
- Storage ,
22
21
ThrottleMetadata ,
23
22
openDatabase ,
24
- APP_NAMESPACE_STORE
23
+ APP_NAMESPACE_STORE ,
24
+ IndexedDbStorage ,
25
+ InMemoryStorage
25
26
} from '../../src/storage/storage' ;
26
27
import { FetchResponse } from '../../src/client/remote_config_fetch_client' ;
27
28
@@ -33,142 +34,153 @@ async function clearDatabase(): Promise<void> {
33
34
. clear ( ) ;
34
35
}
35
36
36
- describe ( 'Storage' , ( ) => {
37
- const storage = new Storage ( 'appId' , 'appName' , 'namespace' ) ;
37
+ describe ( 'IndexedDbStorage' , ( ) => {
38
+
39
+ const indexedDbTestCase = {
40
+ storage : new IndexedDbStorage ( 'appId' , 'appName' , 'namespace' ) ,
41
+ name : 'IndexedDbStorage' ,
42
+ } ;
43
+
44
+ const inMemoryStorage = {
45
+ storage : new InMemoryStorage ( ) ,
46
+ name : 'InMemoryStorage' ,
47
+ } ;
38
48
39
49
beforeEach ( async ( ) => {
40
50
await clearDatabase ( ) ;
41
51
} ) ;
42
52
43
- it ( ' constructs a composite key' , async ( ) => {
53
+ it ( ` ${ indexedDbTestCase . name } constructs a composite key` , async ( ) => {
44
54
// This is defensive, but the cost of accidentally changing the key composition is high.
45
- expect ( storage . createCompositeKey ( 'throttle_metadata' ) ) . to . eq (
55
+ expect ( indexedDbTestCase . storage . createCompositeKey ( 'throttle_metadata' ) ) . to . eq (
46
56
'appId,appName,namespace,throttle_metadata'
47
57
) ;
48
58
} ) ;
49
59
50
- it ( 'sets and gets last fetch attempt status' , async ( ) => {
51
- const expectedStatus = 'success' ;
60
+ for ( const { name, storage } of [ indexedDbTestCase , inMemoryStorage ] ) {
61
+ it ( `${ name } sets and gets last fetch attempt status` , async ( ) => {
62
+ const expectedStatus = 'success' ;
52
63
53
- await storage . setLastFetchStatus ( expectedStatus ) ;
64
+ await storage . setLastFetchStatus ( expectedStatus ) ;
54
65
55
- const actualStatus = await storage . getLastFetchStatus ( ) ;
66
+ const actualStatus = await storage . getLastFetchStatus ( ) ;
56
67
57
- expect ( actualStatus ) . to . deep . eq ( expectedStatus ) ;
58
- } ) ;
68
+ expect ( actualStatus ) . to . deep . eq ( expectedStatus ) ;
69
+ } ) ;
59
70
60
- it ( ' sets and gets last fetch success timestamp' , async ( ) => {
61
- const lastSuccessfulFetchTimestampMillis = 123 ;
71
+ it ( ` ${ name } sets and gets last fetch success timestamp` , async ( ) => {
72
+ const lastSuccessfulFetchTimestampMillis = 123 ;
62
73
63
- await storage . setLastSuccessfulFetchTimestampMillis (
64
- lastSuccessfulFetchTimestampMillis
65
- ) ;
74
+ await storage . setLastSuccessfulFetchTimestampMillis (
75
+ lastSuccessfulFetchTimestampMillis
76
+ ) ;
66
77
67
- const actualMetadata =
68
- await storage . getLastSuccessfulFetchTimestampMillis ( ) ;
78
+ const actualMetadata =
79
+ await storage . getLastSuccessfulFetchTimestampMillis ( ) ;
69
80
70
- expect ( actualMetadata ) . to . deep . eq ( lastSuccessfulFetchTimestampMillis ) ;
71
- } ) ;
81
+ expect ( actualMetadata ) . to . deep . eq ( lastSuccessfulFetchTimestampMillis ) ;
82
+ } ) ;
72
83
73
- it ( ' sets and gets last successful fetch response' , async ( ) => {
74
- const lastSuccessfulFetchResponse = { status : 200 } as FetchResponse ;
84
+ it ( ` ${ name } sets and gets last successful fetch response` , async ( ) => {
85
+ const lastSuccessfulFetchResponse = { status : 200 } as FetchResponse ;
75
86
76
- await storage . setLastSuccessfulFetchResponse ( lastSuccessfulFetchResponse ) ;
87
+ await storage . setLastSuccessfulFetchResponse ( lastSuccessfulFetchResponse ) ;
77
88
78
- const actualConfig = await storage . getLastSuccessfulFetchResponse ( ) ;
89
+ const actualConfig = await storage . getLastSuccessfulFetchResponse ( ) ;
79
90
80
- expect ( actualConfig ) . to . deep . eq ( lastSuccessfulFetchResponse ) ;
81
- } ) ;
91
+ expect ( actualConfig ) . to . deep . eq ( lastSuccessfulFetchResponse ) ;
92
+ } ) ;
82
93
83
- it ( ' sets and gets active config' , async ( ) => {
84
- const expectedConfig = { key : 'value' } ;
94
+ it ( ` ${ name } sets and gets active config` , async ( ) => {
95
+ const expectedConfig = { key : 'value' } ;
85
96
86
- await storage . setActiveConfig ( expectedConfig ) ;
97
+ await storage . setActiveConfig ( expectedConfig ) ;
87
98
88
- const storedConfig = await storage . getActiveConfig ( ) ;
99
+ const storedConfig = await storage . getActiveConfig ( ) ;
89
100
90
- expect ( storedConfig ) . to . deep . eq ( expectedConfig ) ;
91
- } ) ;
101
+ expect ( storedConfig ) . to . deep . eq ( expectedConfig ) ;
102
+ } ) ;
92
103
93
- it ( ' sets and gets active config etag' , async ( ) => {
94
- const expectedEtag = 'etag' ;
104
+ it ( ` ${ name } sets and gets active config etag` , async ( ) => {
105
+ const expectedEtag = 'etag' ;
95
106
96
- await storage . setActiveConfigEtag ( expectedEtag ) ;
107
+ await storage . setActiveConfigEtag ( expectedEtag ) ;
97
108
98
- const storedConfigEtag = await storage . getActiveConfigEtag ( ) ;
109
+ const storedConfigEtag = await storage . getActiveConfigEtag ( ) ;
99
110
100
- expect ( storedConfigEtag ) . to . deep . eq ( expectedEtag ) ;
101
- } ) ;
111
+ expect ( storedConfigEtag ) . to . deep . eq ( expectedEtag ) ;
112
+ } ) ;
102
113
103
- it ( ' sets, gets and deletes throttle metadata' , async ( ) => {
104
- const expectedMetadata = {
105
- throttleEndTimeMillis : 1
106
- } as ThrottleMetadata ;
114
+ it ( ` ${ name } sets, gets and deletes throttle metadata` , async ( ) => {
115
+ const expectedMetadata = {
116
+ throttleEndTimeMillis : 1
117
+ } as ThrottleMetadata ;
107
118
108
- await storage . setThrottleMetadata ( expectedMetadata ) ;
119
+ await storage . setThrottleMetadata ( expectedMetadata ) ;
109
120
110
- let actualMetadata = await storage . getThrottleMetadata ( ) ;
121
+ let actualMetadata = await storage . getThrottleMetadata ( ) ;
111
122
112
- expect ( actualMetadata ) . to . deep . eq ( expectedMetadata ) ;
123
+ expect ( actualMetadata ) . to . deep . eq ( expectedMetadata ) ;
113
124
114
- await storage . deleteThrottleMetadata ( ) ;
125
+ await storage . deleteThrottleMetadata ( ) ;
115
126
116
- actualMetadata = await storage . getThrottleMetadata ( ) ;
127
+ actualMetadata = await storage . getThrottleMetadata ( ) ;
117
128
118
- expect ( actualMetadata ) . to . be . undefined ;
119
- } ) ;
129
+ expect ( actualMetadata ) . to . be . undefined ;
130
+ } ) ;
120
131
121
- it ( 'sets and gets custom signals' , async ( ) => {
122
- const customSignals = { key : 'value' , key1 : 'value1' , key2 : 1 } ;
123
- const customSignalsInStorage = {
124
- key : 'value' ,
125
- key1 : 'value1' ,
126
- key2 : '1'
127
- } ;
132
+ it ( 'sets and gets custom signals' , async ( ) => {
133
+ const customSignals = { key : 'value' , key1 : 'value1' , key2 : 1 } ;
134
+ const customSignalsInStorage = {
135
+ key : 'value' ,
136
+ key1 : 'value1' ,
137
+ key2 : '1'
138
+ } ;
128
139
129
- await storage . setCustomSignals ( customSignals ) ;
140
+ await storage . setCustomSignals ( customSignals ) ;
130
141
131
- const storedCustomSignals = await storage . getCustomSignals ( ) ;
142
+ const storedCustomSignals = await storage . getCustomSignals ( ) ;
132
143
133
- expect ( storedCustomSignals ) . to . deep . eq ( customSignalsInStorage ) ;
134
- } ) ;
144
+ expect ( storedCustomSignals ) . to . deep . eq ( customSignalsInStorage ) ;
145
+ } ) ;
135
146
136
- it ( 'upserts custom signals when key is present in storage' , async ( ) => {
137
- const customSignals = { key : 'value' , key1 : 'value1' } ;
138
- const updatedSignals = { key : 'value' , key1 : 'value2' } ;
147
+ it ( 'upserts custom signals when key is present in storage' , async ( ) => {
148
+ const customSignals = { key : 'value' , key1 : 'value1' } ;
149
+ const updatedSignals = { key : 'value' , key1 : 'value2' } ;
139
150
140
- await storage . setCustomSignals ( customSignals ) ;
151
+ await storage . setCustomSignals ( customSignals ) ;
141
152
142
- await storage . setCustomSignals ( { key1 : 'value2' } ) ;
153
+ await storage . setCustomSignals ( { key1 : 'value2' } ) ;
143
154
144
- const storedCustomSignals = await storage . getCustomSignals ( ) ;
155
+ const storedCustomSignals = await storage . getCustomSignals ( ) ;
145
156
146
- expect ( storedCustomSignals ) . to . deep . eq ( updatedSignals ) ;
147
- } ) ;
157
+ expect ( storedCustomSignals ) . to . deep . eq ( updatedSignals ) ;
158
+ } ) ;
148
159
149
- it ( 'deletes custom signal when value supplied is null' , async ( ) => {
150
- const customSignals = { key : 'value' , key1 : 'value1' } ;
151
- const updatedSignals = { key : 'value' } ;
160
+ it ( 'deletes custom signal when value supplied is null' , async ( ) => {
161
+ const customSignals = { key : 'value' , key1 : 'value1' } ;
162
+ const updatedSignals = { key : 'value' } ;
152
163
153
- await storage . setCustomSignals ( customSignals ) ;
164
+ await storage . setCustomSignals ( customSignals ) ;
154
165
155
- await storage . setCustomSignals ( { key1 : null } ) ;
166
+ await storage . setCustomSignals ( { key1 : null } ) ;
156
167
157
- const storedCustomSignals = await storage . getCustomSignals ( ) ;
168
+ const storedCustomSignals = await storage . getCustomSignals ( ) ;
158
169
159
- expect ( storedCustomSignals ) . to . deep . eq ( updatedSignals ) ;
160
- } ) ;
170
+ expect ( storedCustomSignals ) . to . deep . eq ( updatedSignals ) ;
171
+ } ) ;
161
172
162
- it ( 'throws an error when supplied with excess custom signals' , async ( ) => {
163
- const customSignals : { [ key : string ] : string } = { } ;
164
- for ( let i = 0 ; i < 101 ; i ++ ) {
165
- customSignals [ `key${ i } ` ] = `value${ i } ` ;
166
- }
173
+ it ( 'throws an error when supplied with excess custom signals' , async ( ) => {
174
+ const customSignals : { [ key : string ] : string } = { } ;
175
+ for ( let i = 0 ; i < 101 ; i ++ ) {
176
+ customSignals [ `key${ i } ` ] = `value${ i } ` ;
177
+ }
167
178
168
- await expect (
169
- storage . setCustomSignals ( customSignals )
170
- ) . to . eventually . be . rejectedWith (
171
- 'Remote Config: Setting more than 100 custom signals is not supported.'
172
- ) ;
173
- } ) ;
179
+ await expect (
180
+ storage . setCustomSignals ( customSignals )
181
+ ) . to . eventually . be . rejectedWith (
182
+ 'Remote Config: Setting more than 100 custom signals is not supported.'
183
+ ) ;
184
+ } ) ;
185
+ }
174
186
} ) ;
0 commit comments