|
|
@@ -27,8 +27,6 @@ describe('OC.SystemTags.SystemTagsInputField tests', function() { |
|
|
|
select2Stub = sinon.stub($.fn, 'select2'); |
|
|
|
select2Stub.returnsThis(); |
|
|
|
$('#testArea').append($container); |
|
|
|
view = new OC.SystemTags.SystemTagsInputField(); |
|
|
|
$container.append(view.$el); |
|
|
|
}); |
|
|
|
afterEach(function() { |
|
|
|
select2Stub.restore(); |
|
|
@@ -36,273 +34,384 @@ describe('OC.SystemTags.SystemTagsInputField tests', function() { |
|
|
|
view.remove(); |
|
|
|
view = undefined; |
|
|
|
}); |
|
|
|
describe('rendering', function() { |
|
|
|
beforeEach(function() { |
|
|
|
view.render(); |
|
|
|
}); |
|
|
|
it('calls select2 on rendering', function() { |
|
|
|
expect(view.$el.find('input[name=tags]').length).toEqual(1); |
|
|
|
expect(select2Stub.called).toEqual(true); |
|
|
|
}); |
|
|
|
it('formatResult renders rename button', function() { |
|
|
|
var opts = select2Stub.getCall(0).args[0]; |
|
|
|
var $el = $(opts.formatResult({id: '1', name: 'test'})); |
|
|
|
expect($el.find('.label').text()).toEqual('test'); |
|
|
|
expect($el.find('.rename').length).toEqual(1); |
|
|
|
}); |
|
|
|
}); |
|
|
|
describe('initSelection', function() { |
|
|
|
var fetchStub; |
|
|
|
var testTags; |
|
|
|
|
|
|
|
describe('general behavior', function() { |
|
|
|
var $dropdown; |
|
|
|
|
|
|
|
beforeEach(function() { |
|
|
|
fetchStub = sinon.stub(OC.SystemTags.SystemTagsCollection.prototype, 'fetch'); |
|
|
|
testTags = [ |
|
|
|
new OC.SystemTags.SystemTagModel({id: '1', name: 'test1'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '2', name: 'test2'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '3', name: 'test3'}), |
|
|
|
]; |
|
|
|
view.render(); |
|
|
|
}); |
|
|
|
afterEach(function() { |
|
|
|
fetchStub.restore(); |
|
|
|
}); |
|
|
|
it('grabs values from the full collection', function() { |
|
|
|
var $el = view.$el.find('input'); |
|
|
|
$el.val('1,3'); |
|
|
|
var opts = select2Stub.getCall(0).args[0]; |
|
|
|
var callback = sinon.stub(); |
|
|
|
opts.initSelection($el, callback); |
|
|
|
|
|
|
|
expect(fetchStub.calledOnce).toEqual(true); |
|
|
|
view.collection.add(testTags); |
|
|
|
fetchStub.yieldTo('success', view.collection); |
|
|
|
|
|
|
|
expect(callback.calledOnce).toEqual(true); |
|
|
|
var models = callback.getCall(0).args[0]; |
|
|
|
expect(models.length).toEqual(2); |
|
|
|
expect(models[0].id).toEqual('1'); |
|
|
|
expect(models[0].name).toEqual('test1'); |
|
|
|
expect(models[1].id).toEqual('3'); |
|
|
|
expect(models[1].name).toEqual('test3'); |
|
|
|
}); |
|
|
|
}); |
|
|
|
describe('tag selection', function() { |
|
|
|
beforeEach(function() { |
|
|
|
view = new OC.SystemTags.SystemTagsInputField(); |
|
|
|
$('.testInputContainer').append(view.$el); |
|
|
|
$dropdown = $('<div class="select2-dropdown"></div>'); |
|
|
|
select2Stub.withArgs('dropdown').returns($dropdown); |
|
|
|
$('#testArea').append($dropdown); |
|
|
|
|
|
|
|
view.render(); |
|
|
|
var $el = view.$el.find('input'); |
|
|
|
$el.val('1'); |
|
|
|
|
|
|
|
view.collection.add([ |
|
|
|
new OC.SystemTags.SystemTagModel({id: '1', name: 'abc'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '2', name: 'def'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '3', name: 'abd'}), |
|
|
|
]); |
|
|
|
}); |
|
|
|
afterEach(function() { |
|
|
|
}); |
|
|
|
it('does not create dummy tag when user types non-matching name', function() { |
|
|
|
var opts = select2Stub.getCall(0).args[0]; |
|
|
|
var result = opts.createSearchChoice('abc'); |
|
|
|
expect(result).not.toBeDefined(); |
|
|
|
}); |
|
|
|
it('creates dummy tag when user types non-matching name', function() { |
|
|
|
var opts = select2Stub.getCall(0).args[0]; |
|
|
|
var result = opts.createSearchChoice('abnew'); |
|
|
|
expect(result.id).toEqual(-1); |
|
|
|
expect(result.name).toEqual('abnew'); |
|
|
|
expect(result.isNew).toEqual(true); |
|
|
|
describe('rendering', function() { |
|
|
|
it('calls select2 on rendering', function() { |
|
|
|
expect(view.$el.find('input[name=tags]').length).toEqual(1); |
|
|
|
expect(select2Stub.called).toEqual(true); |
|
|
|
}); |
|
|
|
it('formatResult renders rename button', function() { |
|
|
|
var opts = select2Stub.getCall(0).args[0]; |
|
|
|
var $el = $(opts.formatResult({id: '1', name: 'test'})); |
|
|
|
expect($el.find('.rename').length).toEqual(1); |
|
|
|
}); |
|
|
|
}); |
|
|
|
it('creates the real tag and fires select event after user selects the dummy tag', function() { |
|
|
|
var selectHandler = sinon.stub(); |
|
|
|
view.on('select', selectHandler); |
|
|
|
var createStub = sinon.stub(OC.SystemTags.SystemTagsCollection.prototype, 'create'); |
|
|
|
view.$el.find('input').trigger(new $.Event('select2-selecting', { |
|
|
|
object: { |
|
|
|
id: -1, |
|
|
|
name: 'newname', |
|
|
|
isNew: true |
|
|
|
} |
|
|
|
})); |
|
|
|
|
|
|
|
expect(createStub.calledOnce).toEqual(true); |
|
|
|
expect(createStub.getCall(0).args[0]).toEqual({ |
|
|
|
name: 'newname', |
|
|
|
userVisible: true, |
|
|
|
userAssignable: true |
|
|
|
describe('tag selection', function() { |
|
|
|
beforeEach(function() { |
|
|
|
var $el = view.$el.find('input'); |
|
|
|
$el.val('1'); |
|
|
|
|
|
|
|
view.collection.add([ |
|
|
|
new OC.SystemTags.SystemTagModel({id: '1', name: 'abc'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '2', name: 'def'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '3', name: 'abd', userAssignable: false}), |
|
|
|
]); |
|
|
|
}); |
|
|
|
|
|
|
|
var newModel = new OC.SystemTags.SystemTagModel({ |
|
|
|
id: '123', |
|
|
|
name: 'newname', |
|
|
|
userVisible: true, |
|
|
|
userAssignable: true |
|
|
|
it('does not create dummy tag when user types non-matching name', function() { |
|
|
|
var opts = select2Stub.getCall(0).args[0]; |
|
|
|
var result = opts.createSearchChoice('abc'); |
|
|
|
expect(result).not.toBeDefined(); |
|
|
|
}); |
|
|
|
it('creates dummy tag when user types non-matching name', function() { |
|
|
|
var opts = select2Stub.getCall(0).args[0]; |
|
|
|
var result = opts.createSearchChoice('abnew'); |
|
|
|
expect(result.id).toEqual(-1); |
|
|
|
expect(result.name).toEqual('abnew'); |
|
|
|
expect(result.isNew).toEqual(true); |
|
|
|
expect(result.userVisible).toEqual(true); |
|
|
|
expect(result.userAssignable).toEqual(true); |
|
|
|
}); |
|
|
|
it('creates the real tag and fires select event after user selects the dummy tag', function() { |
|
|
|
var selectHandler = sinon.stub(); |
|
|
|
view.on('select', selectHandler); |
|
|
|
var createStub = sinon.stub(OC.SystemTags.SystemTagsCollection.prototype, 'create'); |
|
|
|
view.$el.find('input').trigger(new $.Event('select2-selecting', { |
|
|
|
object: { |
|
|
|
id: -1, |
|
|
|
name: 'newname', |
|
|
|
isNew: true |
|
|
|
} |
|
|
|
})); |
|
|
|
|
|
|
|
expect(createStub.calledOnce).toEqual(true); |
|
|
|
expect(createStub.getCall(0).args[0]).toEqual({ |
|
|
|
name: 'newname', |
|
|
|
userVisible: true, |
|
|
|
userAssignable: true |
|
|
|
}); |
|
|
|
|
|
|
|
// not called yet |
|
|
|
expect(selectHandler.notCalled).toEqual(true); |
|
|
|
|
|
|
|
select2Stub.withArgs('data').returns([{ |
|
|
|
id: '1', |
|
|
|
name: 'abc' |
|
|
|
}]); |
|
|
|
var newModel = new OC.SystemTags.SystemTagModel({ |
|
|
|
id: '123', |
|
|
|
name: 'newname', |
|
|
|
userVisible: true, |
|
|
|
userAssignable: true |
|
|
|
}); |
|
|
|
|
|
|
|
createStub.yieldTo('success', newModel); |
|
|
|
// not called yet |
|
|
|
expect(selectHandler.notCalled).toEqual(true); |
|
|
|
|
|
|
|
expect(select2Stub.lastCall.args[0]).toEqual('data'); |
|
|
|
expect(select2Stub.lastCall.args[1]).toEqual([{ |
|
|
|
select2Stub.withArgs('data').returns([{ |
|
|
|
id: '1', |
|
|
|
name: 'abc' |
|
|
|
}, |
|
|
|
newModel.toJSON() |
|
|
|
]); |
|
|
|
}]); |
|
|
|
|
|
|
|
expect(selectHandler.calledOnce).toEqual(true); |
|
|
|
expect(selectHandler.getCall(0).args[0]).toEqual(newModel); |
|
|
|
createStub.yieldTo('success', newModel); |
|
|
|
|
|
|
|
createStub.restore(); |
|
|
|
}); |
|
|
|
it('triggers select event after selecting an existing tag', function() { |
|
|
|
var selectHandler = sinon.stub(); |
|
|
|
view.on('select', selectHandler); |
|
|
|
view.$el.find('input').trigger(new $.Event('select2-selecting', { |
|
|
|
object: { |
|
|
|
id: '2', |
|
|
|
name: 'def' |
|
|
|
} |
|
|
|
})); |
|
|
|
|
|
|
|
expect(selectHandler.calledOnce).toEqual(true); |
|
|
|
expect(selectHandler.getCall(0).args[0]).toEqual(view.collection.get('2')); |
|
|
|
}); |
|
|
|
it('triggers deselect event after deselecting an existing tag', function() { |
|
|
|
var selectHandler = sinon.stub(); |
|
|
|
view.on('deselect', selectHandler); |
|
|
|
view.$el.find('input').trigger(new $.Event('select2-removing', { |
|
|
|
choice: { |
|
|
|
id: '2', |
|
|
|
name: 'def' |
|
|
|
} |
|
|
|
})); |
|
|
|
|
|
|
|
expect(selectHandler.calledOnce).toEqual(true); |
|
|
|
expect(selectHandler.getCall(0).args[0]).toEqual('2'); |
|
|
|
}); |
|
|
|
}); |
|
|
|
describe('autocomplete', function() { |
|
|
|
var fetchStub, opts; |
|
|
|
expect(select2Stub.lastCall.args[0]).toEqual('data'); |
|
|
|
expect(select2Stub.lastCall.args[1]).toEqual([{ |
|
|
|
id: '1', |
|
|
|
name: 'abc' |
|
|
|
}, |
|
|
|
newModel.toJSON() |
|
|
|
]); |
|
|
|
|
|
|
|
beforeEach(function() { |
|
|
|
fetchStub = sinon.stub(OC.SystemTags.SystemTagsCollection.prototype, 'fetch'); |
|
|
|
view.render(); |
|
|
|
opts = select2Stub.getCall(0).args[0]; |
|
|
|
expect(selectHandler.calledOnce).toEqual(true); |
|
|
|
expect(selectHandler.getCall(0).args[0]).toEqual(newModel); |
|
|
|
|
|
|
|
view.collection.add([ |
|
|
|
new OC.SystemTags.SystemTagModel({id: '1', name: 'abc'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '2', name: 'def'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '3', name: 'abd'}), |
|
|
|
]); |
|
|
|
}); |
|
|
|
afterEach(function() { |
|
|
|
fetchStub.restore(); |
|
|
|
}); |
|
|
|
it('completes results', function() { |
|
|
|
var callback = sinon.stub(); |
|
|
|
opts.query({ |
|
|
|
term: 'ab', |
|
|
|
callback: callback |
|
|
|
createStub.restore(); |
|
|
|
}); |
|
|
|
it('triggers select event after selecting an existing tag', function() { |
|
|
|
var selectHandler = sinon.stub(); |
|
|
|
view.on('select', selectHandler); |
|
|
|
view.$el.find('input').trigger(new $.Event('select2-selecting', { |
|
|
|
object: { |
|
|
|
id: '2', |
|
|
|
name: 'def' |
|
|
|
} |
|
|
|
})); |
|
|
|
|
|
|
|
expect(selectHandler.calledOnce).toEqual(true); |
|
|
|
expect(selectHandler.getCall(0).args[0]).toEqual(view.collection.get('2')); |
|
|
|
}); |
|
|
|
it('triggers deselect event after deselecting an existing tag', function() { |
|
|
|
var selectHandler = sinon.stub(); |
|
|
|
view.on('deselect', selectHandler); |
|
|
|
view.$el.find('input').trigger(new $.Event('select2-removing', { |
|
|
|
choice: { |
|
|
|
id: '2', |
|
|
|
name: 'def' |
|
|
|
} |
|
|
|
})); |
|
|
|
|
|
|
|
expect(selectHandler.calledOnce).toEqual(true); |
|
|
|
expect(selectHandler.getCall(0).args[0]).toEqual('2'); |
|
|
|
}); |
|
|
|
expect(fetchStub.calledOnce).toEqual(true); |
|
|
|
|
|
|
|
fetchStub.yieldTo('success', view.collection); |
|
|
|
|
|
|
|
expect(callback.calledOnce).toEqual(true); |
|
|
|
expect(callback.getCall(0).args[0].results).toEqual([ |
|
|
|
{ |
|
|
|
id: '1', |
|
|
|
name: 'abc', |
|
|
|
userVisible: true, |
|
|
|
userAssignable: true |
|
|
|
}, |
|
|
|
{ |
|
|
|
id: '3', |
|
|
|
name: 'abd', |
|
|
|
userVisible: true, |
|
|
|
userAssignable: true |
|
|
|
} |
|
|
|
]); |
|
|
|
}); |
|
|
|
}); |
|
|
|
describe('tag actions', function() { |
|
|
|
var $dropdown, opts; |
|
|
|
describe('tag actions', function() { |
|
|
|
var opts; |
|
|
|
|
|
|
|
beforeEach(function() { |
|
|
|
$dropdown = $('<div class="select2-dropdown"></div>'); |
|
|
|
select2Stub.withArgs('dropdown').returns($dropdown); |
|
|
|
$('#testArea').append($dropdown); |
|
|
|
beforeEach(function() { |
|
|
|
|
|
|
|
view.render(); |
|
|
|
opts = select2Stub.getCall(0).args[0]; |
|
|
|
|
|
|
|
opts = select2Stub.getCall(0).args[0]; |
|
|
|
view.collection.add([ |
|
|
|
new OC.SystemTags.SystemTagModel({id: '1', name: 'abc'}), |
|
|
|
]); |
|
|
|
|
|
|
|
view.collection.add([ |
|
|
|
new OC.SystemTags.SystemTagModel({id: '1', name: 'abc'}), |
|
|
|
]); |
|
|
|
$dropdown.append(opts.formatResult(view.collection.get('1').toJSON())); |
|
|
|
|
|
|
|
$dropdown.append(opts.formatResult(view.collection.get('1').toJSON())); |
|
|
|
}); |
|
|
|
it('displays rename form when clicking rename', function() { |
|
|
|
$dropdown.find('.rename').mouseup(); |
|
|
|
expect($dropdown.find('form.systemtags-rename-form').length).toEqual(1); |
|
|
|
expect($dropdown.find('form.systemtags-rename-form input').val()).toEqual('abc'); |
|
|
|
}); |
|
|
|
it('renames model and submits change when submitting form', function() { |
|
|
|
var saveStub = sinon.stub(OC.SystemTags.SystemTagModel.prototype, 'save'); |
|
|
|
$dropdown.find('.rename').mouseup(); |
|
|
|
$dropdown.find('form input').val('abc_renamed'); |
|
|
|
$dropdown.find('form').trigger(new $.Event('submit')); |
|
|
|
|
|
|
|
}); |
|
|
|
afterEach(function() { |
|
|
|
}); |
|
|
|
it('displays rename form when clicking rename', function() { |
|
|
|
$dropdown.find('.rename').mouseup(); |
|
|
|
expect($dropdown.find('form.systemtags-rename-form').length).toEqual(1); |
|
|
|
expect($dropdown.find('form.systemtags-rename-form input').val()).toEqual('abc'); |
|
|
|
}); |
|
|
|
it('renames model and submits change when submitting form', function() { |
|
|
|
var saveStub = sinon.stub(OC.SystemTags.SystemTagModel.prototype, 'save'); |
|
|
|
$dropdown.find('.rename').mouseup(); |
|
|
|
$dropdown.find('form input').val('abc_renamed'); |
|
|
|
$dropdown.find('form').trigger(new $.Event('submit')); |
|
|
|
expect(saveStub.calledOnce).toEqual(true); |
|
|
|
expect(saveStub.getCall(0).args[0]).toEqual({'name': 'abc_renamed'}); |
|
|
|
|
|
|
|
expect(saveStub.calledOnce).toEqual(true); |
|
|
|
expect(saveStub.getCall(0).args[0]).toEqual({'name': 'abc_renamed'}); |
|
|
|
expect($dropdown.find('.label').text()).toEqual('abc_renamed'); |
|
|
|
expect($dropdown.find('form').length).toEqual(0); |
|
|
|
|
|
|
|
expect($dropdown.find('.label').text()).toEqual('abc_renamed'); |
|
|
|
expect($dropdown.find('form').length).toEqual(0); |
|
|
|
saveStub.restore(); |
|
|
|
}); |
|
|
|
it('deletes model and submits change when clicking delete', function() { |
|
|
|
var destroyStub = sinon.stub(OC.SystemTags.SystemTagModel.prototype, 'destroy'); |
|
|
|
|
|
|
|
saveStub.restore(); |
|
|
|
}); |
|
|
|
it('deletes model and submits change when clicking delete', function() { |
|
|
|
var destroyStub = sinon.stub(OC.SystemTags.SystemTagModel.prototype, 'destroy'); |
|
|
|
expect($dropdown.find('.delete').length).toEqual(0); |
|
|
|
$dropdown.find('.rename').mouseup(); |
|
|
|
// delete button appears |
|
|
|
expect($dropdown.find('.delete').length).toEqual(1); |
|
|
|
$dropdown.find('.delete').mouseup(); |
|
|
|
|
|
|
|
expect($dropdown.find('.delete').length).toEqual(0); |
|
|
|
$dropdown.find('.rename').mouseup(); |
|
|
|
// delete button appears |
|
|
|
expect($dropdown.find('.delete').length).toEqual(1); |
|
|
|
$dropdown.find('.delete').mouseup(); |
|
|
|
expect(destroyStub.calledOnce).toEqual(true); |
|
|
|
expect(destroyStub.calledOn(view.collection.get('1'))); |
|
|
|
|
|
|
|
expect(destroyStub.calledOnce).toEqual(true); |
|
|
|
expect(destroyStub.calledOn(view.collection.get('1'))); |
|
|
|
destroyStub.restore(); |
|
|
|
}); |
|
|
|
}); |
|
|
|
describe('setting data', function() { |
|
|
|
it('sets value when calling setValues', function() { |
|
|
|
var vals = ['1', '2']; |
|
|
|
view.setValues(vals); |
|
|
|
expect(select2Stub.lastCall.args[0]).toEqual('val'); |
|
|
|
expect(select2Stub.lastCall.args[1]).toEqual(vals); |
|
|
|
}); |
|
|
|
it('sets data when calling setData', function() { |
|
|
|
var vals = [{id: '1', name: 'test1'}, {id: '2', name: 'test2'}]; |
|
|
|
view.setData(vals); |
|
|
|
expect(select2Stub.lastCall.args[0]).toEqual('data'); |
|
|
|
expect(select2Stub.lastCall.args[1]).toEqual(vals); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
destroyStub.restore(); |
|
|
|
describe('as admin', function() { |
|
|
|
beforeEach(function() { |
|
|
|
view = new OC.SystemTags.SystemTagsInputField({ |
|
|
|
isAdmin: true |
|
|
|
}); |
|
|
|
view.render(); |
|
|
|
$('.testInputContainer').append(view.$el); |
|
|
|
}); |
|
|
|
it('formatResult renders tag name with visibility', function() { |
|
|
|
var opts = select2Stub.getCall(0).args[0]; |
|
|
|
var $el = $(opts.formatResult({id: '1', name: 'test', userVisible: false, userAssignable: false})); |
|
|
|
expect($el.find('.label').text()).toEqual('test (invisible, not assignable)'); |
|
|
|
}); |
|
|
|
it('formatSelection renders tag name with visibility', function() { |
|
|
|
var opts = select2Stub.getCall(0).args[0]; |
|
|
|
var $el = $(opts.formatSelection({id: '1', name: 'test', userVisible: false, userAssignable: false})); |
|
|
|
expect($el.text().trim()).toEqual('test (invisible, not assignable),'); |
|
|
|
}); |
|
|
|
describe('initSelection', function() { |
|
|
|
var fetchStub; |
|
|
|
var testTags; |
|
|
|
|
|
|
|
beforeEach(function() { |
|
|
|
fetchStub = sinon.stub(OC.SystemTags.SystemTagsCollection.prototype, 'fetch'); |
|
|
|
testTags = [ |
|
|
|
new OC.SystemTags.SystemTagModel({id: '1', name: 'test1'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '2', name: 'test2'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '3', name: 'test3', userAssignable: false}), |
|
|
|
]; |
|
|
|
}); |
|
|
|
afterEach(function() { |
|
|
|
fetchStub.restore(); |
|
|
|
}); |
|
|
|
it('grabs values from the full collection', function() { |
|
|
|
var $el = view.$el.find('input'); |
|
|
|
$el.val('1,3'); |
|
|
|
var opts = select2Stub.getCall(0).args[0]; |
|
|
|
var callback = sinon.stub(); |
|
|
|
opts.initSelection($el, callback); |
|
|
|
|
|
|
|
expect(fetchStub.calledOnce).toEqual(true); |
|
|
|
view.collection.add(testTags); |
|
|
|
fetchStub.yieldTo('success', view.collection); |
|
|
|
|
|
|
|
expect(callback.calledOnce).toEqual(true); |
|
|
|
var models = callback.getCall(0).args[0]; |
|
|
|
expect(models.length).toEqual(2); |
|
|
|
expect(models[0].id).toEqual('1'); |
|
|
|
expect(models[0].name).toEqual('test1'); |
|
|
|
expect(models[1].id).toEqual('3'); |
|
|
|
expect(models[1].name).toEqual('test3'); |
|
|
|
}); |
|
|
|
}); |
|
|
|
describe('autocomplete', function() { |
|
|
|
var fetchStub, opts; |
|
|
|
|
|
|
|
beforeEach(function() { |
|
|
|
fetchStub = sinon.stub(OC.SystemTags.SystemTagsCollection.prototype, 'fetch'); |
|
|
|
opts = select2Stub.getCall(0).args[0]; |
|
|
|
|
|
|
|
view.collection.add([ |
|
|
|
new OC.SystemTags.SystemTagModel({id: '1', name: 'abc'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '2', name: 'def'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '3', name: 'abd', userAssignable: false}), |
|
|
|
]); |
|
|
|
}); |
|
|
|
afterEach(function() { |
|
|
|
fetchStub.restore(); |
|
|
|
}); |
|
|
|
it('completes results', function() { |
|
|
|
var callback = sinon.stub(); |
|
|
|
opts.query({ |
|
|
|
term: 'ab', |
|
|
|
callback: callback |
|
|
|
}); |
|
|
|
expect(fetchStub.calledOnce).toEqual(true); |
|
|
|
|
|
|
|
fetchStub.yieldTo('success', view.collection); |
|
|
|
|
|
|
|
expect(callback.calledOnce).toEqual(true); |
|
|
|
expect(callback.getCall(0).args[0].results).toEqual([ |
|
|
|
{ |
|
|
|
id: '1', |
|
|
|
name: 'abc', |
|
|
|
userVisible: true, |
|
|
|
userAssignable: true |
|
|
|
}, |
|
|
|
{ |
|
|
|
id: '3', |
|
|
|
name: 'abd', |
|
|
|
userVisible: true, |
|
|
|
userAssignable: false |
|
|
|
} |
|
|
|
]); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
describe('setting data', function() { |
|
|
|
|
|
|
|
describe('as user', function() { |
|
|
|
beforeEach(function() { |
|
|
|
view = new OC.SystemTags.SystemTagsInputField({ |
|
|
|
isAdmin: false |
|
|
|
}); |
|
|
|
view.render(); |
|
|
|
$('.testInputContainer').append(view.$el); |
|
|
|
}); |
|
|
|
it('sets value when calling setValues', function() { |
|
|
|
var vals = ['1', '2']; |
|
|
|
view.setValues(vals); |
|
|
|
expect(select2Stub.lastCall.args[0]).toEqual('val'); |
|
|
|
expect(select2Stub.lastCall.args[1]).toEqual(vals); |
|
|
|
it('formatResult renders tag name only', function() { |
|
|
|
var opts = select2Stub.getCall(0).args[0]; |
|
|
|
var $el = $(opts.formatResult({id: '1', name: 'test'})); |
|
|
|
expect($el.find('.label').text()).toEqual('test'); |
|
|
|
}); |
|
|
|
it('formatSelection renders tag name only', function() { |
|
|
|
var opts = select2Stub.getCall(0).args[0]; |
|
|
|
var $el = $(opts.formatSelection({id: '1', name: 'test'})); |
|
|
|
expect($el.text().trim()).toEqual('test,'); |
|
|
|
}); |
|
|
|
describe('initSelection', function() { |
|
|
|
var fetchStub; |
|
|
|
var testTags; |
|
|
|
|
|
|
|
beforeEach(function() { |
|
|
|
fetchStub = sinon.stub(OC.SystemTags.SystemTagsCollection.prototype, 'fetch'); |
|
|
|
testTags = [ |
|
|
|
new OC.SystemTags.SystemTagModel({id: '1', name: 'test1'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '2', name: 'test2'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '3', name: 'test3', userAssignable: false}), |
|
|
|
]; |
|
|
|
view.render(); |
|
|
|
}); |
|
|
|
afterEach(function() { |
|
|
|
fetchStub.restore(); |
|
|
|
}); |
|
|
|
it('grabs values from the full collection', function() { |
|
|
|
var $el = view.$el.find('input'); |
|
|
|
$el.val('1,3'); |
|
|
|
var opts = select2Stub.getCall(0).args[0]; |
|
|
|
var callback = sinon.stub(); |
|
|
|
opts.initSelection($el, callback); |
|
|
|
|
|
|
|
expect(fetchStub.calledOnce).toEqual(true); |
|
|
|
view.collection.add(testTags); |
|
|
|
fetchStub.yieldTo('success', view.collection); |
|
|
|
|
|
|
|
expect(callback.calledOnce).toEqual(true); |
|
|
|
var models = callback.getCall(0).args[0]; |
|
|
|
expect(models.length).toEqual(2); |
|
|
|
expect(models[0].id).toEqual('1'); |
|
|
|
expect(models[0].name).toEqual('test1'); |
|
|
|
expect(models[1].id).toEqual('3'); |
|
|
|
expect(models[1].name).toEqual('test3'); |
|
|
|
}); |
|
|
|
}); |
|
|
|
it('sets data when calling setData', function() { |
|
|
|
var vals = [{id: '1', name: 'test1'}, {id: '2', name: 'test2'}]; |
|
|
|
view.setData(vals); |
|
|
|
expect(select2Stub.lastCall.args[0]).toEqual('data'); |
|
|
|
expect(select2Stub.lastCall.args[1]).toEqual(vals); |
|
|
|
describe('autocomplete', function() { |
|
|
|
var fetchStub, opts; |
|
|
|
|
|
|
|
beforeEach(function() { |
|
|
|
fetchStub = sinon.stub(OC.SystemTags.SystemTagsCollection.prototype, 'fetch'); |
|
|
|
view.render(); |
|
|
|
opts = select2Stub.getCall(0).args[0]; |
|
|
|
|
|
|
|
view.collection.add([ |
|
|
|
new OC.SystemTags.SystemTagModel({id: '1', name: 'abc'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '2', name: 'def'}), |
|
|
|
new OC.SystemTags.SystemTagModel({id: '3', name: 'abd', userAssignable: false}), |
|
|
|
]); |
|
|
|
}); |
|
|
|
afterEach(function() { |
|
|
|
fetchStub.restore(); |
|
|
|
}); |
|
|
|
it('completes results excluding non-assignable tags', function() { |
|
|
|
var callback = sinon.stub(); |
|
|
|
opts.query({ |
|
|
|
term: 'ab', |
|
|
|
callback: callback |
|
|
|
}); |
|
|
|
expect(fetchStub.calledOnce).toEqual(true); |
|
|
|
|
|
|
|
fetchStub.yieldTo('success', view.collection); |
|
|
|
|
|
|
|
expect(callback.calledOnce).toEqual(true); |
|
|
|
expect(callback.getCall(0).args[0].results).toEqual([ |
|
|
|
{ |
|
|
|
id: '1', |
|
|
|
name: 'abc', |
|
|
|
userVisible: true, |
|
|
|
userAssignable: true |
|
|
|
} |
|
|
|
]); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |