mirror of https://github.com/Squidex/squidex.git
5 changed files with 196 additions and 16 deletions
@ -0,0 +1,150 @@ |
|||||
|
/* |
||||
|
* Squidex Headless CMS |
||||
|
* |
||||
|
* @license |
||||
|
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. |
||||
|
*/ |
||||
|
|
||||
|
import { |
||||
|
FilterState, |
||||
|
LanguageDto, |
||||
|
Sorting |
||||
|
} from './../'; |
||||
|
|
||||
|
describe('FilterState', () => { |
||||
|
let filterState: FilterState; |
||||
|
let query: string | undefined; |
||||
|
let filter: string | undefined; |
||||
|
let fullText: string | undefined; |
||||
|
let order: string | undefined; |
||||
|
|
||||
|
beforeEach(() => { |
||||
|
filterState = new FilterState(); |
||||
|
filterState.setLanguage(new LanguageDto('de', 'German')); |
||||
|
|
||||
|
filterState.query.subscribe(value => { |
||||
|
query = value; |
||||
|
}); |
||||
|
|
||||
|
filterState.filter.subscribe(value => { |
||||
|
filter = value; |
||||
|
}); |
||||
|
|
||||
|
filterState.fullText.subscribe(value => { |
||||
|
fullText = value; |
||||
|
}); |
||||
|
|
||||
|
filterState.order.subscribe(value => { |
||||
|
order = value; |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
it('should parse elements from query', () => { |
||||
|
const newQuery = '$filter=MY_FILTER&$orderby=MY_FIELD desc&$search=MY_TEXT'; |
||||
|
|
||||
|
filterState.setQuery(newQuery); |
||||
|
|
||||
|
expect(order).toBe('MY_FIELD desc'); |
||||
|
expect(query).toBe(newQuery); |
||||
|
expect(filter).toBe('MY_FILTER'); |
||||
|
expect(fullText).toBe('MY_TEXT'); |
||||
|
}); |
||||
|
|
||||
|
it('should set full text and order and calculate query', () => { |
||||
|
filterState.setFullText('Hello World'); |
||||
|
filterState.setOrder('data/name/iv asc'); |
||||
|
|
||||
|
expect(query).toBe('$search=Hello World&$orderby=data/name/iv asc'); |
||||
|
expect(fullText).toBe('Hello World'); |
||||
|
}); |
||||
|
|
||||
|
it('should set full text only and calculate query', () => { |
||||
|
filterState.setFullText('Hello World'); |
||||
|
|
||||
|
expect(query).toBe('Hello World'); |
||||
|
expect(fullText).toBe('Hello World'); |
||||
|
}); |
||||
|
|
||||
|
it('should set filter and calculate query', () => { |
||||
|
filterState.setFilter('data/name/iv eq "Squidex"'); |
||||
|
|
||||
|
expect(query).toBe('$filter=data/name/iv eq "Squidex"'); |
||||
|
expect(filter).toBe('data/name/iv eq "Squidex"'); |
||||
|
}); |
||||
|
|
||||
|
it('should set order and calculate query', () => { |
||||
|
filterState.setOrder('data/name/iv asc'); |
||||
|
|
||||
|
expect(query).toBe('$orderby=data/name/iv asc'); |
||||
|
expect(order).toBe('data/name/iv asc'); |
||||
|
}); |
||||
|
|
||||
|
it('should set field name and calculate query', () => { |
||||
|
filterState.setOrderField('field', 'Descending'); |
||||
|
|
||||
|
expect(query).toBe('$orderby=field desc'); |
||||
|
expect(order).toBe('field desc'); |
||||
|
}); |
||||
|
|
||||
|
it('should set field and calculate query', () => { |
||||
|
filterState.setOrderField(<any>{ name: 'first-name', isLocalizable: false }, 'Ascending'); |
||||
|
|
||||
|
expect(query).toBe('$orderby=data/first_name/iv asc'); |
||||
|
expect(order).toBe('data/first_name/iv asc'); |
||||
|
}); |
||||
|
|
||||
|
it('should set localizable field and calculate query', () => { |
||||
|
filterState.setOrderField(<any>{ name: 'first-name', isLocalizable: true }, 'Ascending'); |
||||
|
|
||||
|
expect(query).toBe('$orderby=data/first_name/de asc'); |
||||
|
expect(order).toBe('data/first_name/de asc'); |
||||
|
}); |
||||
|
|
||||
|
it('should update field ordering for path', () => { |
||||
|
let sorting: Sorting; |
||||
|
|
||||
|
filterState.sortMode('field').subscribe(value => { |
||||
|
sorting = value; |
||||
|
}); |
||||
|
|
||||
|
filterState.setQuery('$orderby=field desc'); |
||||
|
|
||||
|
expect(sorting!).toBe('Descending'); |
||||
|
}); |
||||
|
|
||||
|
it('should update field ordering for field', () => { |
||||
|
let sorting: Sorting; |
||||
|
|
||||
|
filterState.sortMode(<any>{ name: 'first-name', fieldId: 1, isLocalizable: false }).subscribe(value => { |
||||
|
sorting = value; |
||||
|
}); |
||||
|
|
||||
|
filterState.setQuery('$orderby=data/first_name/iv asc'); |
||||
|
|
||||
|
expect(sorting!).toBe('Ascending'); |
||||
|
}); |
||||
|
|
||||
|
it('should update field ordering for localizable field', () => { |
||||
|
let sorting: Sorting; |
||||
|
|
||||
|
filterState.sortMode(<any>{ name: 'first-name', fieldId: 1, isLocalizable: true }).subscribe(value => { |
||||
|
sorting = value; |
||||
|
}); |
||||
|
|
||||
|
filterState.setQuery('$orderby=data/first_name/de asc'); |
||||
|
|
||||
|
expect(sorting!).toBe('Ascending'); |
||||
|
}); |
||||
|
|
||||
|
it('should update field ordering for localizable field and other language', () => { |
||||
|
let sorting: Sorting; |
||||
|
|
||||
|
filterState.sortMode(<any>{ name: 'first-name', fieldId: 1, isLocalizable: true }).subscribe(value => { |
||||
|
sorting = value; |
||||
|
}); |
||||
|
|
||||
|
filterState.setQuery('$orderby=data/first_name/en asc'); |
||||
|
|
||||
|
expect(sorting!).toBe('None'); |
||||
|
}); |
||||
|
}); |
||||
Loading…
Reference in new issue