Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/js/main/core/test/cache/memory-cache/
Upload File :
Current File : /var/www/homesaver/www/bitrix/js/main/core/test/cache/memory-cache/memory-cache.test.js

import MemoryCache from '../../../src/lib/cache/memory-cache';

describe('core/cache/memory-cache', () => {
	it('Should be exported as function', () => {
		assert.ok(typeof MemoryCache === 'function', 'MemoryCache is not a function');
	});

	describe('#get', () => {
		it('Should return undefined if cache storage not contains entry with specified key', () => {
			const cache = new MemoryCache();

			assert.ok(cache.get('test') === undefined);
		});

		it('Should return default value if cache storage not contains cache entry with specified key', () => {
			const cache = new MemoryCache();

			assert.ok(cache.get('test', 10) === 10);
			assert.ok(cache.get('test', 99) === 99);
			assert.ok(cache.get('test', 'value') === 'value');
			assert.ok(cache.get('test', false) === false);
			assert.ok(cache.get('test', true) === true);

			const testObject = {};
			assert.ok(cache.get('test', testObject) === testObject);

			const testArray = [];
			assert.ok(cache.get('test', testArray) === testArray);
		});

		it('Should return value from cache storage if entry with specified exists', () => {
			const cache = new MemoryCache();
			cache.set('test', 'testValue');

			assert.ok(cache.get('test') === 'testValue');
		});

		it('Should not return default value if storage contains entry with specified key', () => {
			const cache = new MemoryCache();
			cache.set('test', 'testValue');

			assert.ok(cache.get('test', 'default') === 'testValue');
		});

		it('Should return default value from specified callback', () => {
			const cache = new MemoryCache();

			assert.ok(cache.get('test', () => 'testValue') === 'testValue');
		});

		it('Should not save default value to storage', () => {
			const cache = new MemoryCache();

			void cache.get('test', 'testValue');
			assert.ok(cache.get('test') === undefined);
		});
	});

	describe('#set', () => {
		it('Should set entry with specified key and value', () => {
			const cache = new MemoryCache();

			cache.set('test', 'testValue');
			assert.ok(cache.get('test') === 'testValue');
		});

		it('Should set primitive value', () => {
			const cache = new MemoryCache();

			cache.set('test1', 'test1');
			assert.ok(cache.get('test1') === 'test1');

			cache.set('test2', 2);
			assert.ok(cache.get('test2') === 2);

			cache.set('test3', 3.2);
			assert.ok(cache.get('test3') === 3.2);

			cache.set('test4', null);
			assert.ok(cache.get('test4') === null);

			cache.set('test5', true);
			assert.ok(cache.get('test5') === true);

			cache.set('test6', false);
			assert.ok(cache.get('test6') === false);

			cache.set('test7', undefined);
			assert.ok(cache.get('test7') === undefined);
		});

		it('Should set object value', () => {
			const cache = new MemoryCache();

			const testObject = {};
			cache.set('test1', testObject);
			assert.ok(cache.get('test1') === testObject);

			const testArray = [];
			cache.set('test2', testArray);
			assert.ok(cache.get('test2') === testArray);

			const testFunction = () => {};
			cache.set('test3', testFunction);
			assert.ok(cache.get('test3') === testFunction);

			const testMap = new Map();
			cache.set('test4', testMap);
			assert.ok(cache.get('test4') === testMap);

			const testElement = document.createElement('div');
			cache.set('test4', testElement);
			assert.ok(cache.get('test4') === testElement);
		});
	});

	describe('#remember', () => {
		it('Should return and set default value if storage not contain entry with specified key', () => {
			const cache = new MemoryCache();

			assert.ok(cache.remember('test', 'testValue') === 'testValue');
			assert.ok(cache.get('test') === 'testValue');

			assert.ok(cache.remember('test2', () => 'test2Value') === 'test2Value');
			assert.ok(cache.get('test2') === 'test2Value');

			const testObject = {};
			assert.ok(cache.remember('test3', () => testObject) === testObject);
			assert.ok(cache.get('test3') === testObject);
		});
	});

	describe('#has', () => {
		it('Should return true if storage contain entry with specified key', () => {
			const cache = new MemoryCache();
			cache.set('test', 'testValue');
			assert.ok(cache.has('test') === true);
		});

		it('Should return false if storage not contain entry with specified key', () => {
			const cache = new MemoryCache();
			assert.ok(cache.has('test') === false);
		});
	});

	describe('#delete', () => {
		it('Should delete entry with specified key', () => {
			const cache = new MemoryCache();

			cache.set('test1', 'test1value');
			cache.set('test2', 'test2value');

			cache.delete('test1');
			assert.ok(cache.get('test1') === undefined);
			assert.ok(cache.get('test2') === 'test2value');

			cache.delete('test2');
			assert.ok(cache.get('test2') === undefined);
		});
	});

	describe('#size', () => {
		it('Should return correct size of cache storage', () => {
			const cache = new MemoryCache();

			cache.set('test1', 'test1value');
			cache.set('test2', 'test2value');
			cache.set('test3', 'test3value');
			assert.ok(cache.size() === 3);

			cache.delete('test1');
			assert.ok(cache.size() === 2);

			cache.delete('test2');
			cache.delete('test3');
			assert.ok(cache.size() === 0);
		});
	});

	describe('#keys', () => {
		it('Should return correct storage keys list', () => {
			const cache = new MemoryCache();

			cache.set('test1', 'test1value');
			cache.set('test2', 'test2value');
			cache.set('test3', 'test3value');
			assert.deepEqual(cache.keys(), ['test1', 'test2', 'test3']);

			cache.delete('test1');
			assert.deepEqual(cache.keys(), ['test2', 'test3']);
		});
	});

	describe('#values', () => {
		it('Should return correct storage values list', () => {
			const cache = new MemoryCache();

			cache.set('test1', 'test1value');
			cache.set('test2', 'test2value');
			cache.set('test3', 'test3value');
			assert.deepEqual(cache.values(), ['test1value', 'test2value', 'test3value']);

			cache.delete('test1');
			assert.deepEqual(cache.values(), ['test2value', 'test3value']);
		});
	});
});