import { TestBed } from '@angular/core/testing'; import { MockStore, provideMockStore, } from '@ngrx/store/testing'; import { getTestScheduler } from 'jasmine-marbles'; import { buildPaginatedList } from '../../core/data/paginated-list.model'; import { PageInfo } from '../../core/shared/page-info.model'; import { KeyValuePair } from '../key-value-pair.model'; import { CSSVariableService } from './css-variable.service'; describe('CSSVariableService', () => { let store: MockStore; let service: CSSVariableService; let initialState; const varKey1 = '--test-1'; const varValue1 = 'test-value-1'; const varKey2 = '--test-2'; const varValue2 = 'test-value-2'; const varKey3 = '--test-3'; const varValue3 = 'test-value-3'; const queryInAll = 'test'; const queryFor3 = '3'; function init() { initialState = { ['cssVariables']: { [varKey1]: varValue1, [varKey2]: varValue2, [varKey3]: varValue3, }, }; } beforeEach(() => { init(); TestBed.configureTestingModule({ providers: [ CSSVariableService, provideMockStore({ initialState }), ], }); service = TestBed.inject(CSSVariableService as any); store = TestBed.inject(MockStore as any); }); it('should create', () => { expect(service).toBeTruthy(); }); describe('searchVariable', () => { it('should return the right keys and variables in a paginated list for query that returns all 3 results', () => { const currentPage = 1; const pageSize = 5; const pageInfo = new PageInfo({ currentPage, elementsPerPage: pageSize, totalPages: 1, totalElements: 3 }); const page: KeyValuePair<string, string>[] = [{ key: varKey1, value: varValue1 }, { key: varKey2, value: varValue2 }, { key: varKey3, value: varValue3 }]; const result = buildPaginatedList(pageInfo, page); getTestScheduler().expectObservable(service.searchVariable(queryInAll, { currentPage, pageSize } as any)).toBe('a', { a: result }); }); it('should return the right keys and variables in a paginated list for query that returns only the 3rd results', () => { const currentPage = 1; const pageSize = 5; const pageInfo = new PageInfo({ currentPage, elementsPerPage: pageSize, totalPages: 1, totalElements: 1 }); const page: KeyValuePair<string, string>[] = [{ key: varKey3, value: varValue3 }]; const result = buildPaginatedList(pageInfo, page); getTestScheduler().expectObservable(service.searchVariable(queryFor3, { currentPage, pageSize } as any)).toBe('a', { a: result }); }); it('should return the right keys and variables in a paginated list that\'s not longer than the page size', () => { const currentPage = 1; const pageSize = 2; const pageInfo = new PageInfo({ currentPage, elementsPerPage: pageSize, totalPages: 2, totalElements: 3 }); const page: KeyValuePair<string, string>[] = [{ key: varKey1, value: varValue1 }, { key: varKey2, value: varValue2 }]; const result = buildPaginatedList(pageInfo, page); getTestScheduler().expectObservable(service.searchVariable(queryInAll, { currentPage, pageSize } as any)).toBe('a', { a: result }); }); }); });