/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
SuggestTest = TestCase('SuggestTest');
SuggestTest.prototype.setUp = function() {
/*:DOC += */
this.suggestElement = jQuery('#suggest');
};
SuggestTest.prototype.tearDown = function() {
this.suggestDestroy();
};
SuggestTest.prototype.suggestDestroy = function() {
if(this.suggestElement.data('suggest')) {
this.suggestElement.suggest('destroy');
}
};
SuggestTest.prototype.suggestCreate = function(options, element) {
return (element || this.suggestElement).suggest(options || {} ).data('suggest');
};
SuggestTest.prototype.uiHash = {
item: {
id: 1,
label: 'Test Label'
}
};
SuggestTest.prototype.testInit = function() {
this.suggestElement.suggest();
assertTrue(this.suggestElement.is(':mage-suggest'));
};
SuggestTest.prototype.testCreate = function() {
var suggestOptions = {
controls: {
selector: '.test',
eventsMap: {
focus: ['testfocus'],
blur: ['testblur'],
select: ['testselect']
}
},
showRecent: true,
storageKey: 'jsTestDriver-test-suggest-recent',
multiselect: true
},
recentItems = [{
id: "1",
"label": "TestLabel1"
},
{
id: "2",
label: "TestLabel2"
}],
setTemplateExecuted,
prepareValueFieldExecuted,
renderExecuted,
bindExecuted;
if(window.localStorage) {
localStorage.setItem(suggestOptions.storageKey, JSON.stringify(recentItems));
}
var suggestInstance = this.suggestCreate(suggestOptions),
nonSelectedItem = {id: '', label: ''};
assertEquals(null, suggestInstance._term);
assertEquals(suggestInstance._nonSelectedItem, nonSelectedItem);
assertNull(suggestInstance._renderedContext);
assertEquals(suggestInstance._selectedItem, nonSelectedItem);
var control = suggestInstance.options.controls;
assertEquals(suggestInstance._control, control);
assertEquals(suggestInstance._recentItems, window.localStorage ? recentItems : []);
assertTrue(suggestInstance.valueField.is(':hidden'));
if(window.localStorage) {
localStorage.removeItem(suggestOptions.storageKey);
}
};
SuggestTest.prototype.testRender = function() {
var suggestOptions = {
dropdownWrapper: '
',
className: 'test-suggest',
inputWrapper: ''
};
var suggestInstance = this.suggestCreate(suggestOptions);
suggestInstance._render();
assertTrue(suggestInstance.dropdown.hasClass('wrapper-test'));
assertTrue(suggestInstance.dropdown.is(':hidden'));
assertTrue(suggestInstance.element.closest('.test-input-wrapper').size() > 0);
assertTrue(suggestInstance.element.closest('.' + suggestOptions.className).size() > 0);
assertEquals(suggestInstance.element.attr('autocomplete'), 'off');
suggestOptions.appendMethod = 'before';
this.suggestDestroy();
suggestInstance = this.suggestCreate(suggestOptions);
suggestInstance._render();
assertTrue(suggestInstance.element.prev().is(suggestInstance.dropdown));
suggestOptions.appendMethod = 'after';
this.suggestDestroy();
suggestInstance = this.suggestCreate(suggestOptions);
suggestInstance._render();
assertTrue(suggestInstance.element.next().is(suggestInstance.dropdown));
};
SuggestTest.prototype.testCreateValueField = function() {
var suggestInstance = this.suggestCreate(),
valueField = suggestInstance._createValueField();
assertTrue(valueField.is('input'));
assertTrue(valueField.is(':hidden'));
this.suggestDestroy();
suggestInstance = this.suggestCreate({multiselect: true});
valueField = suggestInstance._createValueField();
assertTrue(valueField.is('select'));
assertTrue(valueField.is(':hidden'));
assertEquals(valueField.attr('multiple'), 'multiple');
};
SuggestTest.prototype.testPrepareValueField = function() {
var suggestInstance = this.suggestCreate(),
suggestName = this.suggestElement.attr('name');
suggestInstance._prepareValueField();
assertNotUndefined(suggestInstance.valueField);
assertTrue(suggestInstance.element.prev().is(suggestInstance.valueField));
assertUndefined(suggestInstance.element.attr('name'));
assertEquals(suggestInstance.valueField.attr('name'), suggestName);
this.suggestDestroy();
var valueField = jQuery('');
jQuery('body').append(valueField);
suggestInstance = this.suggestCreate({valueField: '#suggest-single-select-value'});
assertTrue(suggestInstance.valueField.is(valueField));
};
SuggestTest.prototype.testDestroy = function() {
var suggestOptions = {
inputWrapper: '',
valueField: null
},
suggestInstance = this.suggestCreate(suggestOptions),
suggestName = suggestInstance.valueField.attr('name');
assertNotUndefined(suggestInstance.dropdown);
assertNotUndefined(suggestInstance.valueField);
assertUndefined(this.suggestElement.attr('name'));
this.suggestElement.suggest('destroy');
assertEquals(this.suggestElement.closest('.test-input-wrapper').length, 0);
assertUndefined(this.suggestElement.attr('autocomplete'));
assertEquals(this.suggestElement.attr('name'), suggestName);
assertFalse(suggestInstance.valueField.parents('html').length > 0);
assertFalse(suggestInstance.dropdown.parents('html').length > 0);
};
SuggestTest.prototype.testValue = function() {
var value = 'test-value';
this.suggestElement.val(value);
jQuery('body').append('' + value + '
');
var suggestInputInsatnce = this.suggestCreate(),
suggestDivInsatnce = this.suggestCreate(null, jQuery('#suggest-div'));
assertEquals(suggestInputInsatnce._value(), value);
assertEquals(suggestDivInsatnce._value(), value);
};
SuggestTest.prototype.testProxyEvents = function() {
var fakeEvent = $.extend({}, $.Event('keydown'), {
ctrlKey: false,
keyCode: $.ui.keyCode.ENTER,
which: $.ui.keyCode.ENTER
}),
suggestInstance = this.suggestCreate({controls: {selector: null}}),
ctrlKey,
keyCode,
which;
suggestInstance.dropdown.on('keydown', function(e) {
ctrlKey = e.ctrlKey;
keyCode = e.keyCode;
which = e.which;
});
suggestInstance._proxyEvents(fakeEvent);
assertEquals(ctrlKey, fakeEvent.ctrlKey);
assertEquals(keyCode, fakeEvent.keyCode);
assertEquals(which, fakeEvent.which);
};
SuggestTest.prototype.testBind = function() {
var eventIsBinded = false,
suggestOptions = {
events: {
click: function() {
eventIsBinded = true;
}
}
};
this.suggestCreate(suggestOptions);
this.suggestElement.trigger('click');
assertTrue(eventIsBinded);
};
SuggestTest.prototype.testChange = function() {
var changeIsTriggered,
suggestInstance = this.suggestCreate();
suggestInstance._term = 'changed';
this.suggestElement.on('suggestchange', function(e) {
changeIsTriggered = true;
});
suggestInstance._change($.Event('click'));
assertTrue(changeIsTriggered);
};
SuggestTest.prototype.testBindDropdown = function() {
var suggestOptions = {
controls: {
eventsMap: {
focus: ['testFocus'],
blur: ['testBlur'],
select: ['testSelect']
}
}
},
suggestInstance = this.suggestCreate(suggestOptions),
focusTriggered,
blurTriggered,
selectTriggered;
suggestInstance._onSelectItem = function() {
selectTriggered = true;
};
suggestInstance._focusItem = function() {
focusTriggered = true;
};
suggestInstance._blurItem = function() {
blurTriggered = true;
};
suggestInstance._bindDropdown();
suggestInstance.dropdown.trigger('testFocus');
suggestInstance.dropdown.trigger('testBlur');
suggestInstance.dropdown.trigger('testSelect');
assertTrue(focusTriggered);
assertTrue(blurTriggered);
assertTrue(selectTriggered);
};
SuggestTest.prototype.testTrigger = function() {
var propogationStopped = true,
suggestInstance = this.suggestCreate();
this.suggestElement
.on('suggesttestevent', function() {
return false;
});
this.suggestElement.parent().on('suggesttestevent', function() {
propogationStopped = false;
});
suggestInstance._trigger('testevent');
assertTrue(propogationStopped);
};
SuggestTest.prototype.testFocusItem = function() {
var focusUiParam = false,
suggestInstance = this.suggestCreate();
this.suggestElement.on('suggestfocus', function(e, ui) {
focusUiParam = ui;
});
assertUndefined(suggestInstance._focused);
assertEquals(suggestInstance.element.val(), '');
suggestInstance._focusItem($.Event('focus'), this.uiHash);
assertEquals(suggestInstance._focused, this.uiHash.item);
assertEquals(focusUiParam, this.uiHash);
assertEquals(suggestInstance.element.val(), this.uiHash.item.label);
};
SuggestTest.prototype.testBlurItem = function() {
var suggestInstance = this.suggestCreate();
suggestInstance._focusItem($.Event('focus'), this.uiHash);
assertEquals(suggestInstance._focused, this.uiHash.item);
assertEquals(suggestInstance.element.val(), this.uiHash.item.label);
suggestInstance._blurItem();
assertNull(suggestInstance._focused);
//assertEquals(suggestInstance.element.val(), suggestInstance._term.toString());
};
SuggestTest.prototype.testOnSelectItem = function() {
var item = this.uiHash.item,
beforeSelect,
beforeSelectUI,
beforeSelectPropagationStopped = true,
select,
selectUI,
selectPropagationStopped = true,
suggestInstance = this.suggestCreate();
suggestInstance._focused = item;
this.suggestElement
.on('suggestbeforeselect', function(e, ui) {
beforeSelect = true;
beforeSelectUI = ui;
})
.on('suggestselect', function(e, ui) {
select = true;
selectUI = ui;
})
.parent()
.on('suggestbeforeselect', function() {
beforeSelectPropagationStopped = false;
})
.on('suggestselect', function() {
selectPropagationStopped = false;
});
suggestInstance._onSelectItem($.Event('select'));
assertTrue(beforeSelect);
assertTrue(select);
assertFalse(beforeSelectPropagationStopped);
assertFalse(selectPropagationStopped);
assertEquals(beforeSelectUI.item, item);
assertEquals(selectUI.item, item);
beforeSelect = select = beforeSelectUI = selectUI = null;
beforeSelectPropagationStopped = selectPropagationStopped = true;
this.suggestElement
.on('suggestbeforeselect.returnfalse', function(e, ui) {
return false;
});
suggestInstance._focused = item;
suggestInstance._onSelectItem($.Event('select'));
assertTrue(beforeSelect);
assertNull(select);
assertTrue(beforeSelectPropagationStopped);
assertTrue(selectPropagationStopped);
assertEquals(beforeSelectUI.item, item);
assertNull(selectUI);
beforeSelect = select = beforeSelectUI = selectUI = null;
beforeSelectPropagationStopped = selectPropagationStopped = true;
this.suggestElement
.off('suggestbeforeselect.returnfalse')
.on('suggestselect.returnfalse', function() {
return false;
});
suggestInstance._focused = item;
suggestInstance._onSelectItem($.Event('select'));
assertTrue(beforeSelect);
assertTrue(select);
assertFalse(beforeSelectPropagationStopped);
assertTrue(selectPropagationStopped);
assertEquals(beforeSelectUI.item, item);
assertEquals(selectUI.item, item);
beforeSelect = select = beforeSelectUI = selectUI = null;
beforeSelectPropagationStopped = selectPropagationStopped = true;
this.suggestElement.off('suggestselect.returnfalse');
var event = $.Event('select');
event.target = this.suggestElement[0];
suggestInstance._onSelectItem(event, item);
assertEquals(suggestInstance._selectedItem, item);
};
SuggestTest.prototype.testSelectItem = function() {
var suggestInstance = this.suggestCreate();
suggestInstance._focused = suggestInstance._term = suggestInstance._selectedItem = null;
suggestInstance.valueField.val('');
suggestInstance._selectItem($.Event('select'));
assertNull(suggestInstance._selectedItem);
assertNull(suggestInstance._term);
assertEquals(suggestInstance.valueField.val(), '');
suggestInstance._focused = this.uiHash.item;
suggestInstance._selectItem($.Event('select'));
assertEquals(suggestInstance._selectedItem, suggestInstance._focused);
assertEquals(suggestInstance._term, suggestInstance._focused.label);
assertEquals(suggestInstance.valueField.val(), suggestInstance._focused.id);
assertTrue(suggestInstance.dropdown.is(':hidden'));
this.suggestDestroy();
var suggestOptions;
if(window.localStorage) {
suggestOptions = {
showRecent: true,
storageKey: 'jsTestDriver-test-suggest-recent'
};
suggestInstance = this.suggestCreate(suggestOptions);
suggestInstance._focused = this.uiHash.item;
suggestInstance._selectItem($.Event('select'));
var storedItem = localStorage.getItem(suggestOptions.storageKey);
assertEquals(storedItem, JSON.stringify([this.uiHash.item]));
localStorage.removeItem(suggestOptions.storageKey);
}
};
SuggestTest.prototype.testSelectItemMultiselect = function() {
var suggestInstance = this.suggestCreate({multiselect: true});
suggestInstance._focused = suggestInstance._term = suggestInstance._selectedItem = null;
suggestInstance.valueField.val('');
suggestInstance._selectItem($.Event('select'));
assertNull(suggestInstance._selectedItem);
assertNull(suggestInstance._term);
assertFalse(suggestInstance.valueField.find('option').length > 0);
assertTrue(suggestInstance.dropdown.is(':hidden'));
suggestInstance._focused = this.uiHash.item;
var selectedElement = jQuery('');
var event = $.Event('select');
event.target = selectedElement[0];
suggestInstance._selectItem(event);
assertEquals(suggestInstance._selectedItem, suggestInstance._focused);
assertEquals(suggestInstance._term, '');
assertTrue(suggestInstance._getOption(suggestInstance._focused).length > 0);
assertTrue(selectedElement.hasClass(suggestInstance.options.selectedClass));
assertTrue(suggestInstance.dropdown.is(':hidden'));
suggestInstance._selectItem(event);
assertEquals(suggestInstance._selectedItem, suggestInstance._nonSelectedItem);
assertFalse(suggestInstance._getOption(suggestInstance._focused).length > 0);
assertFalse(selectedElement.hasClass(suggestInstance.options.selectedClass));
assertTrue(suggestInstance.dropdown.is(':hidden'));
};
SuggestTest.prototype.testResetSuggestValue = function() {
var suggestInstance = this.suggestCreate();
suggestInstance.valueField.val('test');
suggestInstance._resetSuggestValue();
assertEquals(suggestInstance.valueField.val(), suggestInstance._nonSelectedItem.id);
};
SuggestTest.prototype.testResetSuggestValueMultiselect = function() {
var suggestInstance = this.suggestCreate({multiselect: true});
suggestInstance._focused = this.uiHash.item;
var selectedElement = jQuery('');
var event = $.Event('select');
event.target = selectedElement[0];
suggestInstance._selectItem(event);
suggestInstance._resetSuggestValue();
var suggestValue = suggestInstance.valueField.val();
assertArray(suggestValue);
assertNotUndefined(suggestValue[0]);
assertEquals(suggestValue[0], this.uiHash.item.id);
};
SuggestTest.prototype.testReadItemData = function() {
var testElement = jQuery(''),
suggestInstance = this.suggestCreate();
assertEquals(suggestInstance._readItemData(testElement), suggestInstance._nonSelectedItem);
testElement.data('suggestOption', 'test');
assertEquals(suggestInstance._readItemData(testElement), 'test');
};
SuggestTest.prototype.testIsDropdownShown = function() {
var suggestInstance = this.suggestCreate();
suggestInstance.dropdown.hide();
assertFalse(suggestInstance.isDropdownShown());
suggestInstance.dropdown.show();
assertTrue(suggestInstance.isDropdownShown());
};
SuggestTest.prototype.testOpen = function() {
var openTriggered = false,
suggestInstance = this.suggestCreate();
this.suggestElement.on('suggestopen', function() {
openTriggered = true;
});
suggestInstance.dropdown.show();
suggestInstance.open($.Event('open'));
assertFalse(openTriggered);
suggestInstance.dropdown.hide();
suggestInstance.open($.Event('open'));
assertTrue(openTriggered);
assertTrue(suggestInstance.dropdown.is(':visible'));
};
SuggestTest.prototype.testClose = function() {
var closeTriggered = false,
suggestInstance = this.suggestCreate();
suggestInstance.element.val('test');
suggestInstance._renderedContext = 'test';
suggestInstance.dropdown.show().append('');
this.suggestElement.on('suggestclose', function() {
closeTriggered = true;
});
suggestInstance.close($.Event('close'));
assertNull(suggestInstance._renderedContext);
assertTrue(suggestInstance.dropdown.is(':hidden'));
assertFalse(suggestInstance.dropdown.children().length > 0);
assertTrue(closeTriggered);
};
SuggestTest.prototype.testSetTemplate = function() {
/*:DOC += */
var suggestInstance = this.suggestCreate({template: '<%= data.test %>
'}),
tmpl,
html;
tmpl = suggestInstance.templates[suggestInstance.templateName]
html = jQuery('').append(tmpl({
data: {
test: 'test'
}
})).html();
assertEquals(html, 'test
');
suggestInstance = this.suggestCreate({
template: '#test-template'
});
tmpl = suggestInstance.templates[suggestInstance.templateName];
html = jQuery('').append(tmpl({
data: {
test: 'test'
}
})).html();
assertEquals(html, 'test
');
};
SuggestTest.prototype.testSearch = function() {
var searchTriggered = false,
seachPropagationStopped = true,
suggestInstance = this.suggestCreate();
this.suggestElement
.on('suggestsearch', function() {
searchTriggered = true;
})
.parent()
.on('suggestsearch', function() {
seachPropagationStopped = false;
});
suggestInstance._term = suggestInstance._value();
suggestInstance._selectedItem = null;
suggestInstance.preventBlur = true;
suggestInstance.search($.Event('search'));
assertNull(suggestInstance._selectedItem);
assertFalse(searchTriggered);
suggestInstance.preventBlur = false;
this.suggestElement.val('test');
suggestInstance.search($.Event('search'));
assertEquals(suggestInstance._term, suggestInstance._value());
assertTrue(searchTriggered);
assertFalse(seachPropagationStopped);
searchTriggered = false;
seachPropagationStopped = true;
suggestInstance._selectedItem = null;
suggestInstance.options.minLength = 10;
this.suggestElement.val('testtest');
suggestInstance.search($.Event('search'));
assertEquals(suggestInstance._selectedItem, suggestInstance._nonSelectedItem);
assertEquals(suggestInstance.valueField.val(), suggestInstance._selectedItem.id);
assertFalse(searchTriggered);
searchTriggered = false;
seachPropagationStopped = true;
suggestInstance._selectedItem = null;
suggestInstance.options.minLength = 1;
this.suggestElement.val('test');
this.suggestElement
.on('suggestsearch.returnfalse', function() {
return false;
});
suggestInstance.search($.Event('search'));
assertEquals(suggestInstance._term, suggestInstance._value());
assertTrue(searchTriggered);
assertTrue(seachPropagationStopped);
};
SuggestTest.prototype.testUderscoreSearch = function() {
var sourceLaunched = false,
sorceTerm = null,
responceExists = false,
suggestOptions = {
source: function(term, response){
sourceLaunched = true;
sorceTerm = term;
responceExists = (response && jQuery.type(response) === 'function');
},
delay: null
},
suggestInstance = this.suggestCreate(suggestOptions);
suggestInstance._search($.Event('search'), 'test', {});
assertTrue(sourceLaunched);
assertEquals(sorceTerm, 'test');
assertTrue(responceExists);
assertTrue(this.suggestElement.hasClass(suggestInstance.options.loadingClass));
assertUndefined(suggestInstance._searchTimeout);
suggestInstance.options.delay = 100;
suggestInstance._search($.Event('search'), 'test', {});
assertNotUndefined(suggestInstance._searchTimeout);
};
SuggestTest.prototype.testPrepareDropdownContext = function() {
var suggestInstance = this.suggestCreate();
suggestInstance._items = [this.uiHash.item];
suggestInstance._term = 'test';
suggestInstance._selectedItem = this.uiHash.item;
var context = suggestInstance._prepareDropdownContext({});
assertEquals(context.items, suggestInstance._items);
assertEquals(context.term, suggestInstance._term);
assertEquals(context.optionData(this.uiHash.item),
'data-suggest-option="' + JSON.stringify(this.uiHash.item).replace(/"/g, '"') + '"');
assertTrue(context.itemSelected(this.uiHash.item));
assertNotUndefined(context.noRecordsText);
assertFalse(context.recentShown());
assertNotUndefined(context.recentTitle);
assertNotUndefined(context.showAllTitle);
assertFalse(context.allShown());
};
SuggestTest.prototype.testIsItemSelected = function() {
var suggestInstance = this.suggestCreate();
assertFalse(suggestInstance._isItemSelected(this.uiHash.item));
suggestInstance._selectedItem = this.uiHash.item;
assertTrue(suggestInstance._isItemSelected(this.uiHash.item));
this.suggestDestroy();
suggestInstance = this.suggestCreate({multiselect: true});
assertFalse(suggestInstance._isItemSelected(this.uiHash.item));
suggestInstance.valueField.append('');
assertTrue(suggestInstance._isItemSelected(this.uiHash.item));
};
SuggestTest.prototype.testRenderDropdown = function() {
var testContext = {
test: 'test'
},
contentUpdatedTriggered = false,
suggestOptions = {
template: '<%= data.test %>
'
},
suggestInstance = this.suggestCreate(suggestOptions);
suggestInstance.dropdown.on('contentUpdated', function() {
contentUpdatedTriggered = true;
});
suggestInstance.element.addClass(suggestInstance.options.loadingClass);
suggestInstance._renderDropdown(null, [this.uiHash.item], testContext);
assertEquals(suggestInstance._items, [this.uiHash.item]);
assertEquals(suggestInstance.dropdown.html(), 'test
');
assertTrue(contentUpdatedTriggered);
assertEquals(suggestInstance._renderedContext, suggestInstance._prepareDropdownContext(testContext));
assertFalse(suggestInstance.element.hasClass(suggestInstance.options.loadingClass));
assertTrue(suggestInstance.dropdown.is(':visible'));
};
SuggestTest.prototype.testProcessResponse = function() {
var testContext = {
test: 'test'
},
responseTriggered = false,
suggestOptions = {
template: '<%= data.test %>
'
},
responcePropagationStopped = true,
rendererExists,
responseData,
suggestInstance = this.suggestCreate(suggestOptions);
this.suggestElement
.on('suggestresponse', function(e, data, renderer) {
responseTriggered = true;
rendererExists = (renderer && jQuery.type(renderer) === 'function');
responseData = data;
})
.parent()
.on('suggestresponse', function() {
responcePropagationStopped = false;
});
suggestInstance._processResponse($.Event('response'), [this.uiHash.item], testContext);
assertTrue(responseTriggered);
assertTrue(rendererExists);
assertEquals(responseData, [this.uiHash.item]);
assertFalse(responcePropagationStopped);
assertEquals(suggestInstance.dropdown.html(), 'test
');
suggestInstance.dropdown.empty();
this.suggestElement
.on('suggestresponse.returnfalse', function() {
return false;
});
responcePropagationStopped = true;
suggestInstance._processResponse($.Event('response'), [this.uiHash.item], testContext);
assertTrue(responcePropagationStopped);
assertFalse(suggestInstance.dropdown.children().tength > 0);
};
SuggestTest.prototype.testSource = function() {
var sourceArray = [this.uiHash.item],
sourceUrl = 'www.test.url',
sourceFuncExecuted = false,
responseExecuted = false,
responseItems = null,
sourceFuncTerm = "",
sourceFuncResponse = null,
ajaxData = '',
ajaxUrl = '',
sourceFunc = function(term, response) {
sourceFuncExecuted = true;
sourceFuncTerm = term;
sourceFuncResponse = (response && jQuery.type(response) === 'function');
},
response = function (items) {
responseExecuted = true;
responseItems = items;
};
var suggestInstance = this.suggestCreate({
source: sourceArray
});
suggestInstance._source('test', response);
assertTrue(responseExecuted);
assertEquals(responseItems, sourceArray);
this.suggestDestroy();
responseExecuted = false;
responseItems = null;
suggestInstance = this.suggestCreate({
source: sourceUrl,
ajaxOptions: {
beforeSend: function(xhr, settings) {
xhr.abort();
ajaxData = settings.data;
ajaxUrl = settings.url;
settings.success(sourceArray);
}
},
termAjaxArgument: 'test'
});
suggestInstance._source('test', response);
assertTrue(responseExecuted);
assertEquals(responseItems, sourceArray);
assertEquals(ajaxData, 'test=test');
assertEquals(ajaxUrl, sourceUrl);
this.suggestDestroy();
responseExecuted = false;
responseItems = null;
suggestInstance = this.suggestCreate({
source: sourceFunc
});
suggestInstance._source('test', response);
assertTrue(sourceFuncExecuted);
assertEquals(sourceFuncTerm, 'test');
assertTrue(sourceFuncResponse);
};
SuggestTest.prototype.testAbortSearch = function() {
var searchAborted = false,
suggestInstance = this.suggestCreate();
this.suggestElement.addClass(suggestInstance.options.loadingClass);
suggestInstance._xhr = {
abort: function() {
searchAborted = true;
}
};
suggestInstance._abortSearch();
assertFalse(this.suggestElement.hasClass(suggestInstance.options.loadingClass));
assertTrue(searchAborted);
};
SuggestTest.prototype.testShowAll = function() {
var searchAborted,
showAllTerm,
showAllContext,
suggestInstance = this.suggestCreate();
suggestInstance._abortSearch = function() {
searchAborted = true;
};
suggestInstance._search = function(e, term, context) {
showAllTerm = term;
showAllContext = context;
};
suggestInstance._showAll(jQuery.Event('showAll'));
assertTrue(searchAborted);
assertEquals(showAllTerm, '');
assertEquals(showAllContext, {_allShown: true});
};
SuggestTest.prototype.testAddRecent = function() {
var recentItems = [
{id: 2, label: 'Test Label 2'},
{id: 3, label: 'Test Label 3'}
],
suggestInstance = this.suggestCreate();
suggestInstance._recentItems = recentItems;
suggestInstance.options.storageKey = 'jsTestDriver-test-suggest-recent';
suggestInstance._addRecent(this.uiHash.item);
recentItems.unshift(this.uiHash.item);
assertEquals(recentItems, suggestInstance._recentItems);
if(window.localStorage) {
assertEquals(localStorage.getItem(suggestInstance.options.storageKey), JSON.stringify(recentItems));
}
suggestInstance._addRecent(this.uiHash.item);
assertEquals(recentItems, suggestInstance._recentItems);
if(window.localStorage) {
assertEquals(localStorage.getItem(suggestInstance.options.storageKey), JSON.stringify(recentItems));
}
suggestInstance.options.storageLimit = 1;
var newRecentItem = {id: 4, label: 'Test Label 4'};
suggestInstance._addRecent(newRecentItem);
assertEquals([newRecentItem], suggestInstance._recentItems);
if(window.localStorage) {
assertEquals(localStorage.getItem(suggestInstance.options.storageKey), JSON.stringify([newRecentItem]));
localStorage.removeItem(suggestInstance.options.storageKey);
}
};
SuggestTest.prototype.testRenderMultiselect = function() {
var suggestOptions = {
multiselect: true,
multiSuggestWrapper: ''
},
suggestInstance = this.suggestCreate(suggestOptions);
assertTrue(this.suggestElement.closest('[data-role="parent-choice-element"]').is('#test-multisuggest-wrapper'));
assertTrue(suggestInstance.elementWrapper.is('#test-multisuggest-wrapper'));
};
SuggestTest.prototype.testGetOptions = function() {
var suggestInstance = this.suggestCreate();
assertFalse(suggestInstance._getOptions().length > 0);
var option = jQuery('');
suggestInstance.valueField.append(option);
assertTrue(suggestInstance._getOptions().is(option));
};
SuggestTest.prototype.testFilterSelected = function() {
var items = [this.uiHash.item, {id: 2, label: 'Test Label2'}],
suggestInstance = this.suggestCreate();
suggestInstance.valueField.append('');
assertEquals(suggestInstance._filterSelected(items), [this.uiHash.item]);
};
SuggestTest.prototype.testCreateOption = function() {
var suggestInstance = this.suggestCreate();
var option = suggestInstance._createOption(this.uiHash.item);
assertEquals(option.val(), "1");
assertEquals(option.prop('selected'), true);
assertEquals(option.text(), "Test Label");
assertNotUndefined(option.data('renderedOption'));
};
SuggestTest.prototype.testAddOption = function() {
var selectTarget = jQuery(''),
event = jQuery.Event('add'),
suggestInstance = this.suggestCreate();
event.target = selectTarget[0];
suggestInstance._addOption(event, this.uiHash.item);
var option = suggestInstance.valueField.find('option[value=' + this.uiHash.item.id + ']');
assertTrue(option.length > 0);
assertTrue(option.data('selectTarget').is(selectTarget));
};
SuggestTest.prototype.testGetOption = function() {
var suggestInstance = this.suggestCreate();
assertFalse(suggestInstance._getOption(this.uiHash.item).length > 0);
var option = jQuery('');
suggestInstance.valueField.append(option);
assertTrue(suggestInstance._getOption(this.uiHash.item).length > 0);
assertTrue(suggestInstance._getOption(option).length > 0);
};
SuggestTest.prototype.testRemoveLastAdded = function() {
var suggestInstance = this.suggestCreate({multiselect: true});
suggestInstance._addOption({}, this.uiHash.item);
assertTrue(suggestInstance.valueField.find('option').length > 0);
suggestInstance._removeLastAdded();
assertFalse(suggestInstance.valueField.find('option').length > 0);
};
SuggestTest.prototype.testRemoveOption = function() {
var selectTarget = jQuery(''),
event = jQuery.Event('select'),
suggestInstance = this.suggestCreate({multiselect: true});
selectTarget.addClass(suggestInstance.options.selectedClass);
event.target = selectTarget[0];
suggestInstance._addOption(event, this.uiHash.item);
assertTrue(suggestInstance.valueField.find('option').length > 0);
suggestInstance.removeOption(event, this.uiHash.item);
assertFalse(suggestInstance.valueField.find('option').length > 0);
assertFalse(selectTarget.hasClass(suggestInstance.options.selectedClass));
};
SuggestTest.prototype.testRenderOption = function() {
var suggestInstance = this.suggestCreate(),
choiceTmpl;
suggestInstance.elementWrapper = jQuery('').appendTo('body');
choiceTmpl = mageTemplate(suggestInstance.options.choiceTemplate, {
text: this.uiHash.item.label
});
var testOption = jQuery(choiceTmpl),
option = suggestInstance._renderOption(this.uiHash.item);
assertTrue(option.next().is(suggestInstance.elementWrapper));
assertEquals(jQuery('').append(testOption).html(), jQuery('').append(option).html());
};