diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js index db80a9aa76..13396670aa 100644 --- a/core/js/shareitemmodel.js +++ b/core/js/shareitemmodel.js @@ -297,8 +297,7 @@ * @returns {boolean} */ hasUserShares: function() { - var shares = this.get('shares'); - return _.isArray(shares) && shares.length > 0; + return this.getSharesWithCurrentItem().length > 0; }, /** @@ -407,6 +406,20 @@ return this.get('reshare').share_type; }, + /** + * Returns all share entries that only apply to the current item + * (file/folder) + * + * @return {Array.} + */ + getSharesWithCurrentItem: function() { + var shares = this.get('shares') || []; + var fileId = this.fileInfoModel.get('id'); + return _.filter(shares, function(share) { + return share.item_source === fileId; + }); + }, + /** * @param shareIndex * @returns {string} diff --git a/core/js/tests/specs/shareitemmodelSpec.js b/core/js/tests/specs/shareitemmodelSpec.js index a2f3d6fa0a..b4403e2847 100644 --- a/core/js/tests/specs/shareitemmodelSpec.js +++ b/core/js/tests/specs/shareitemmodelSpec.js @@ -304,6 +304,63 @@ describe('OC.Share.ShareItemModel', function() { expect(share.expiration).toEqual('2015-10-12 00:00:00'); }); }); + describe('hasUserShares', function() { + it('returns false when no user shares exist', function() { + loadItemStub.yields({ + reshare: {}, + shares: [] + }); + + model.fetch(); + + expect(model.hasUserShares()).toEqual(false); + }); + it('returns true when user shares exist on the current item', function() { + loadItemStub.yields({ + reshare: {}, + shares: [{ + id: 1, + share_type: OC.Share.SHARE_TYPE_USER, + share_with: 'user1', + item_source: '123' + }] + }); + + model.fetch(); + + expect(model.hasUserShares()).toEqual(true); + }); + it('returns true when group shares exist on the current item', function() { + loadItemStub.yields({ + reshare: {}, + shares: [{ + id: 1, + share_type: OC.Share.SHARE_TYPE_GROUP, + share_with: 'group1', + item_source: '123' + }] + }); + + model.fetch(); + + expect(model.hasUserShares()).toEqual(true); + }); + it('returns false when share exist on parent item', function() { + loadItemStub.yields({ + reshare: {}, + shares: [{ + id: 1, + share_type: OC.Share.SHARE_TYPE_GROUP, + share_with: 'group1', + item_source: '111' + }] + }); + + model.fetch(); + + expect(model.hasUserShares()).toEqual(false); + }); + }); describe('Util', function() { it('parseTime should properly parse strings', function() {