github.com/blixtra/nomad@v0.7.2-0.20171221000451-da9a1d7bb050/ui/tests/unit/mixins/searchable-test.js (about) 1 import Ember from 'ember'; 2 import { moduleFor, test } from 'ember-qunit'; 3 import Searchable from 'nomad-ui/mixins/searchable'; 4 5 const { getOwner, computed } = Ember; 6 7 moduleFor('mixin:searchable', 'Unit | Mixin | Searchable', { 8 subject() { 9 const SearchableObject = Ember.Object.extend(Searchable, { 10 source: null, 11 searchProps: computed(() => ['id', 'name']), 12 listToSearch: computed.alias('source'), 13 }); 14 15 this.register('test-container:searchable-object', SearchableObject); 16 return getOwner(this).lookup('test-container:searchable-object'); 17 }, 18 }); 19 20 test('the searchable mixin does nothing when there is no search term', function(assert) { 21 const subject = this.subject(); 22 subject.set('source', [{ id: '1', name: 'hello' }, { id: '2', name: 'world' }]); 23 24 assert.deepEqual(subject.get('listSearched'), subject.get('source')); 25 }); 26 27 test('the searchable mixin allows for regex search', function(assert) { 28 const subject = this.subject(); 29 subject.set('source', [ 30 { id: '1', name: 'hello' }, 31 { id: '2', name: 'world' }, 32 { id: '3', name: 'oranges' }, 33 ]); 34 35 subject.set('searchTerm', '.+l+[A-Z]$'); 36 assert.deepEqual( 37 subject.get('listSearched'), 38 [{ id: '1', name: 'hello' }, { id: '2', name: 'world' }], 39 'hello and world matched for regex' 40 ); 41 }); 42 43 test('the searchable mixin only searches the declared search props', function(assert) { 44 const subject = this.subject(); 45 subject.set('source', [ 46 { id: '1', name: 'United States of America', continent: 'North America' }, 47 { id: '2', name: 'Canada', continent: 'North America' }, 48 { id: '3', name: 'Mexico', continent: 'North America' }, 49 ]); 50 51 subject.set('searchTerm', 'America'); 52 assert.deepEqual( 53 subject.get('listSearched'), 54 [{ id: '1', name: 'United States of America', continent: 'North America' }], 55 'Only USA matched, since continent is not a search prop' 56 ); 57 });