@itexpert-dev/key-value-storage
Version:
key-value storage like C# dictionary
123 lines (99 loc) • 4.31 kB
text/typescript
import {KeyValueStorage} from './KeyValueStorage'
describe("tests for key-value storage", ()=>{
describe('try get data from empty store', ()=>{
it('get data from empty store',()=>{
let testStorage = new KeyValueStorage<any>();
let testKey = 'test';
expect(()=>{
testStorage.get(testKey)
}).toThrowError(`data with key: ${testKey} is missing!`)
})
});
describe("test for put and get data",()=>{
it('put number by key and get number by key',()=>{
let numberStorage = new KeyValueStorage<number>();
let testNumber:number = 123;
let testKey:string = 'string ';
numberStorage.add({key: testKey, value: testNumber});
expect(numberStorage.get(testKey)).toBe(testNumber);
});
it('put string by key and get string by key', ()=>{
let stringStorage = new KeyValueStorage<string>();
let testString:string = 'testString';
let testKey:string = 'test';
stringStorage.add({key: testKey, value: testString});
expect(stringStorage.get(testKey)).toBe(testString);
});
it('put object link and get object link', ()=>{
let objectLinksStorage = new KeyValueStorage<Object>();
let testObject = {test:'lol'};
let testKey:string = 'test';
objectLinksStorage.add({key: testKey, value: testObject});
expect(objectLinksStorage.get(testKey)).toBe(testObject);
})
});
describe('exception when try override data without override property flag', ()=>{
it('put data with non origin keys', ()=>{
let testStore = new KeyValueStorage<any>();
let testKey:string = 'test';
let testValue1:string = 'testValue1';
let testValue2:string = 'testValue2';
testStore.add({key: testKey, value: testValue1});
expect(()=>{
testStore.add({key: testKey, value: testValue2})
}).toThrowError(`data with key ${testKey} already exist use force=true flag for override`)
})
});
describe('override data in store', ()=>{
it('put data to store and override it', ()=>{
let testStore = new KeyValueStorage<any>();
let testKey:string = 'test';
let testVal1:string = 'testVal1';
let testVal2:string = 'testVal2';
testStore.add({key: testKey, value: testVal1});
testStore.add({key: testKey, value: testVal2, force: true});
expect(testStore.get(testKey)).not.toEqual(testVal1);
expect(testStore.get(testKey)).toEqual(testVal2);
})
});
describe('test put data with invalid key', ()=>{
let testStore:KeyValueStorage<any>;
let testKey:string;
let testVal:string;
beforeEach(()=>{
testStore = new KeyValueStorage<any>();
testVal = 'testVal';
});
it('put data with null key', ()=>{
testKey = null;
expect(()=>{
testStore.add({key: testKey, value: testVal})
}).toThrowError(`can not put data with null key`)
});
it('put data with undefined key', ()=>{
testKey = undefined;
expect(()=>{
testStore.add({key: testKey, value: testVal})
}).toThrowError(`can not put data with undefined key`)
})
});
describe('check method', ()=>{
let testStore:KeyValueStorage<any>;
let testKey:string;
let testVal:string;
beforeEach(()=>{
testStore = new KeyValueStorage<any>();
testVal = 'testVal';
testKey = 'validTestKey';
testStore.add({key: testKey, value: testVal});
});
it('returns true if has key', ()=>{
let result = testStore.check(testKey);
expect(result).toBe(true);
});
it('returns false if has not key', ()=>{
let result = testStore.check('invalidKey');
expect(result).toBe(false);
});
})
});