bootstrap-tagsinput
Version:
jQuery plugin providing a Twitter Bootstrap user interface for managing tags.
149 lines (134 loc) • 6.33 kB
JavaScript
describe("bootstrap-tagsinput", function() {
describe("Reproduced bugs", function() {
describe("#1: Demo error", function() {
testTagsInput('<input type="text" value="some_tag" />', function() {
it("clicking remove button should remove item", function() {
$('[data-role=remove]', this.$sandbox).trigger('click');
expect(this.$element.tagsinput('items').length).toBe(0);
});
it("clicking remove button should remove tag element", function() {
$('[data-role=remove]', this.$sandbox).trigger('click');
expect($('.tag', this.$sandbox).length).toBe(0);
});
});
});
describe("#11: Cannot remove an item by programming", function() {
testTagsInput('<input type="text" />', { itemValue: function(item) { return item.value; } }, function() {
describe("add two different objects with same value", function() {
var item1 = { value: 1 },
item2 = { value: 1 };
beforeEach(function() {
this.$element.tagsinput('add', item1);
this.$element.tagsinput('add', item2);
});
it("'items' should return the first added item", function() {
expect(this.$element.tagsinput('items')[0]).toBe(item1);
});
it("'items' should return exactly 1 item", function() {
expect(this.$element.tagsinput('items').length).toBe(1);
});
it("should have exactly 1 tag", function() {
expect($('.tag', this.$sandbox).length).toBe(1);
});
});
describe("remove item", function() {
beforeEach(function() {
this.$element.tagsinput('add', { value: 1 });
});
it("by value, should remove then item", function() {
this.$element.tagsinput('remove', 1);
expect(this.$element.tagsinput('items').length).toBe(0);
});
it("by value, should remove then tag", function() {
this.$element.tagsinput('remove', 1);
expect($('.tag', this.$sandbox).length).toBe(0);
});
it("by different instance, should remove then tag", function() {
this.$element.tagsinput('remove', { value: 1 });
expect($('.tag', this.$sandbox).length).toBe(0);
});
it("should remove items when none of the items have a matching value", function() {
this.$element.tagsinput('add', { value: 1 });
this.$element.tagsinput('remove', 2);
expect(this.$element.tagsinput('items').length).toBe(1);
});
});
});
testTagsInput('<select />', { itemValue: function(item) { return item.value; } }, function() {
describe("add two objects", function() {
var item1 = { value: 1 },
item2 = { value: 2 };
beforeEach(function() {
this.$element.tagsinput('add', item1);
this.$element.tagsinput('add', item2);
});
it("'items' should return the last added item", function() {
expect(this.$element.tagsinput('items')[0]).toBe(item2);
});
it("'items' should return exactly 1 item", function() {
expect(this.$element.tagsinput('items').length).toBe(1);
});
it("should have exactly 1 tag", function() {
expect($('.tag', this.$sandbox).length).toBe(1);
});
it("val() should return first item's value", function() {
expect(this.$element.val()).toBe("2");
});
});
});
});
describe("#34: Error in ReloadPage", function() {
describe("init tagsinput with objects as items, but with value set on element", function() {
testTagsInput('<input type="text" value="1" />', { itemValue: function(item) { return item.value; } }, function() {
it("should have no tags", function() {
expect(this.$element.tagsinput('items').length).toBe(0);
});
});
testTagsInput('<select><option value="1" /></select>', { itemValue: function(item) { return item.value; } }, function() {
it("should have no tags", function() {
expect(this.$element.tagsinput('items').length).toBe(0);
});
});
});
});
describe("#90: Error in reinitialization (arg1 and arg2 are undefined)", function() {
describe("init tagsinput twice", function() {
testTagsInput('<input type="text" value="1" />', { itemValue: function(item) { return item.value; } }, function() {
it("should not fail if an element is reinitialized", function () {
this.$element.tagsinput();
});
it("should return the original instance if already initialized", function () {
return this.$element.tagsinput() === this;
});
});
});
});
describe("#142: Initialization of Null Values for Multi Select field", function() {
testTagsInput('<select multiple data-role="tagsinput"></select>', function() {
it("Initializing an empty select shouldn't throw an error.", function() {
$("select[multiple][data-role=tagsinput]").tagsinput();
});
});
});
describe("#128: Custom classes for tags don't work if entered as strings", function() {
testTagsInput('<input type="text" value="1" />', { tagClass: 'big' }, function() {
it("should have a tag with class 'big' when using tagClass option as string", function() {
expect($(".big", this.$tagsinput).length).toBe(1);
});
});
testTagsInput('<input type="text" value="1" />', { tagClass: function() { return 'big'; } }, function() {
it("should have a tag with class 'big' when using tagClass option as function", function() {
expect($(".big", this.$tagsinput).length).toBe(1);
});
});
});
describe("#107: Fixed bug when removing items", function() {
testTagsInput('<input type="text" value="yes,no" />', function() {
it("should not remove items when remove a non-existing item", function() {
this.$element.tagsinput('remove', 'maybe');
expect(this.$element.tagsinput('items').length).toBe(2);
});
});
});
});
});