diff options
author | Roeland Jago Douma <rullzer@users.noreply.github.com> | 2017-01-06 16:17:09 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-06 16:17:09 +0100 |
commit | 6347d97c7fb052f8c7f51ddbd410002156ba2d6d (patch) | |
tree | cb3986daa369d689cd226ee549f3651018034852 /core/js | |
parent | 4a2fbe9a5b6fd17781dd6de78b1247824618d717 (diff) | |
parent | 9ea432f88c47a8e387e6f8144ef1d8bd663d03dd (diff) | |
download | nextcloud-server-6347d97c7fb052f8c7f51ddbd410002156ba2d6d.tar.gz nextcloud-server-6347d97c7fb052f8c7f51ddbd410002156ba2d6d.zip |
Merge pull request #2512 from nextcloud/cleanup-system-tag-usage
Only allow admins to delete tags
Diffstat (limited to 'core/js')
-rw-r--r-- | core/js/systemtags/systemtagsinputfield.js | 7 | ||||
-rw-r--r-- | core/js/tests/specs/systemtags/systemtagsinputfieldSpec.js | 87 |
2 files changed, 76 insertions, 18 deletions
diff --git a/core/js/systemtags/systemtagsinputfield.js b/core/js/systemtags/systemtagsinputfield.js index 690525c0ebb..d5f6bd5f97e 100644 --- a/core/js/systemtags/systemtagsinputfield.js +++ b/core/js/systemtags/systemtagsinputfield.js @@ -40,7 +40,9 @@ '<form class="systemtags-rename-form">' + ' <label class="hidden-visually" for="{{cid}}-rename-input">{{renameLabel}}</label>' + ' <input id="{{cid}}-rename-input" type="text" value="{{name}}">' + - ' <a href="#" class="delete icon icon-delete" title="{{deleteTooltip}}"></a>' + + ' {{#if isAdmin}}' + + ' <a href="#" class="delete icon icon-delete" title="{{deleteTooltip}}"></a>' + + ' {{/if}}' + '</form>'; /** @@ -148,7 +150,8 @@ cid: this.cid, name: oldName, deleteTooltip: t('core', 'Delete'), - renameLabel: t('core', 'Rename') + renameLabel: t('core', 'Rename'), + isAdmin: this._isAdmin })); $item.find('.label').after($renameForm); $item.find('.label, .systemtags-actions').addClass('hidden'); diff --git a/core/js/tests/specs/systemtags/systemtagsinputfieldSpec.js b/core/js/tests/specs/systemtags/systemtagsinputfieldSpec.js index 503bef7cf2b..8d3f67bfa0d 100644 --- a/core/js/tests/specs/systemtags/systemtagsinputfieldSpec.js +++ b/core/js/tests/specs/systemtags/systemtagsinputfieldSpec.js @@ -267,20 +267,6 @@ describe('OC.SystemTags.SystemTagsInputField tests', function() { 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(destroyStub.calledOnce).toEqual(true); - expect(destroyStub.calledOn(view.collection.get('1'))); - - destroyStub.restore(); - }); }); describe('setting data', function() { it('sets value when calling setValues', function() { @@ -299,12 +285,18 @@ describe('OC.SystemTags.SystemTagsInputField tests', function() { }); describe('as admin', function() { + var $dropdown; + beforeEach(function() { view = new OC.SystemTags.SystemTagsInputField({ isAdmin: true }); - view.render(); $('.testInputContainer').append(view.$el); + $dropdown = $('<div class="select2-dropdown"></div>'); + select2Stub.withArgs('dropdown').returns($dropdown); + $('#testArea').append($dropdown); + + view.render(); }); it('formatResult renders tag name with visibility', function() { var opts = select2Stub.getCall(0).args[0]; @@ -431,15 +423,50 @@ describe('OC.SystemTags.SystemTagsInputField tests', function() { ]); }); }); + describe('tag actions', function() { + var opts; + + beforeEach(function() { + + opts = select2Stub.getCall(0).args[0]; + + view.collection.add([ + new OC.SystemTags.SystemTagModel({id: '1', name: 'abc'}), + ]); + + $dropdown.append(opts.formatResult(view.collection.get('1').toJSON())); + + }); + 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(destroyStub.calledOnce).toEqual(true); + expect(destroyStub.calledOn(view.collection.get('1'))); + + destroyStub.restore(); + }); + }); }); describe('as user', function() { + var $dropdown; + beforeEach(function() { view = new OC.SystemTags.SystemTagsInputField({ isAdmin: false }); - view.render(); $('.testInputContainer').append(view.$el); + $dropdown = $('<div class="select2-dropdown"></div>'); + select2Stub.withArgs('dropdown').returns($dropdown); + $('#testArea').append($dropdown); + + view.render(); }); it('formatResult renders tag name only', function() { var opts = select2Stub.getCall(0).args[0]; @@ -570,5 +597,33 @@ describe('OC.SystemTags.SystemTagsInputField tests', function() { ]); }); }); + describe('tag actions', function() { + var opts; + + beforeEach(function() { + + opts = select2Stub.getCall(0).args[0]; + + view.collection.add([ + new OC.SystemTags.SystemTagModel({id: '1', name: 'abc'}), + ]); + + $dropdown.append(opts.formatResult(view.collection.get('1').toJSON())); + + }); + 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 only for admins + expect($dropdown.find('.delete').length).toEqual(0); + $dropdown.find('.delete').mouseup(); + + expect(destroyStub.notCalled).toEqual(true); + + destroyStub.restore(); + }); + }); }); }); |