1/* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17import {MockStorage} from 'test/unit/mock_storage'; 18import {PersistentStoreProxy} from './persistent_store_proxy'; 19 20describe('PersistentStoreObject', () => { 21 it('uses defaults when no store is available', () => { 22 const mockStorage = new MockStorage(); 23 24 const defaultValues = { 25 key1: 'value', 26 key2: true, 27 }; 28 const storeObject = PersistentStoreProxy.new('storeKey', defaultValues, mockStorage); 29 30 expect(storeObject['key1']).toBe('value'); 31 expect(storeObject['key2']).toBe(true); 32 }); 33 34 it('can update properties', () => { 35 const mockStorage = new MockStorage(); 36 37 const defaultValues = { 38 key1: 'value', 39 key2: true, 40 }; 41 const storeObject = PersistentStoreProxy.new('storeKey', defaultValues, mockStorage); 42 43 storeObject['key1'] = 'someOtherValue'; 44 storeObject['key2'] = false; 45 expect(storeObject['key1']).toBe('someOtherValue'); 46 expect(storeObject['key2']).toBe(false); 47 }); 48 49 it('uses explicitly set store data', () => { 50 const mockStorage = new MockStorage(); 51 52 const defaultValues = { 53 key1: 'value', 54 key2: true, 55 }; 56 const storeObject = PersistentStoreProxy.new('storeKey', defaultValues, mockStorage); 57 storeObject['key1'] = 'someOtherValue'; 58 storeObject['key2'] = false; 59 60 const newStoreObject = PersistentStoreProxy.new('storeKey', defaultValues, mockStorage); 61 expect(newStoreObject['key1']).toBe('someOtherValue'); 62 expect(newStoreObject['key2']).toBe(false); 63 }); 64 65 it('uses default values if not explicitly set', () => { 66 const mockStorage = new MockStorage(); 67 68 const defaultValues = { 69 key1: 'value', 70 key2: true, 71 }; 72 const storeObject = PersistentStoreProxy.new('storeKey', defaultValues, mockStorage); 73 expect(storeObject['key1']).toBe('value'); 74 expect(storeObject['key2']).toBe(true); 75 76 const newDefaultValues = { 77 key1: 'someOtherValue', 78 key2: false, 79 }; 80 const newStoreObject = PersistentStoreProxy.new('storeKey', newDefaultValues, mockStorage); 81 expect(newStoreObject['key1']).toBe('someOtherValue'); 82 expect(newStoreObject['key2']).toBe(false); 83 }); 84 85 it("can't update non leaf configs", () => { 86 const mockStorage = new MockStorage(); 87 88 const defaultValues = { 89 key1: 'value', 90 key2: { 91 key3: true, 92 }, 93 }; 94 const storeObject = PersistentStoreProxy.new('storeKey', defaultValues, mockStorage); 95 expect(() => (storeObject['key2'] = {key3: false})).toThrow(); 96 }); 97 98 it('can get nested configs', () => { 99 const mockStorage = new MockStorage(); 100 101 const defaultValues = { 102 key1: 'value', 103 key2: { 104 key3: true, 105 }, 106 }; 107 const storeObject = PersistentStoreProxy.new('storeKey', defaultValues, mockStorage); 108 expect(storeObject['key2']['key3']).toBe(true); 109 }); 110 111 it('can update schema', () => { 112 const mockStorage = new MockStorage(); 113 114 const schema1 = { 115 key1: 'value1', 116 key2: { 117 key3: true, 118 }, 119 }; 120 const storeObject1 = PersistentStoreProxy.new('storeKey', schema1, mockStorage); 121 expect(storeObject1['key1']).toBe('value1'); 122 expect(storeObject1['key2']['key3']).toBe(true); 123 124 // Change from default value to ensure we update the storage 125 storeObject1['key1'] = 'someOtherValue'; 126 storeObject1['key2']['key3'] = false; 127 128 const schema2 = { 129 key1: { 130 key3: 'value2', 131 }, 132 key2: true, 133 }; 134 const storeObject2 = PersistentStoreProxy.new('storeKey', schema2, mockStorage); 135 expect(storeObject2['key1']['key3']).toBe('value2'); 136 expect(storeObject2['key2']).toBe(true); 137 }); 138}); 139