From 0bd17eff424333b36b431147412ffd0d604422a0 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Fri, 27 Jun 2014 17:56:09 +0200 Subject: [PATCH 1/2] Use file_source to find matching share for nested link shares --- core/js/share.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/js/share.js b/core/js/share.js index 1c59524939..a6f2992148 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -374,7 +374,7 @@ OC.Share={ if (data.shares) { $.each(data.shares, function(index, share) { if (share.share_type == OC.Share.SHARE_TYPE_LINK) { - if ( !('file_target' in share) ) { + if (itemSource === share.file_source || itemSource === share.item_source) { OC.Share.showLink(share.token, share.share_with, itemSource); } } else { From d9d816bd9815527a9cff922fa58e06646b0e3115 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Fri, 27 Jun 2014 18:21:02 +0200 Subject: [PATCH 2/2] Unit tests for share dropdown with nested link share --- core/js/share.js | 2 + core/js/tests/specs/shareSpec.js | 146 ++++++++++++++++++++++++++++++- 2 files changed, 147 insertions(+), 1 deletion(-) diff --git a/core/js/share.js b/core/js/share.js index a6f2992148..aab41cf76d 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -620,6 +620,7 @@ OC.Share={ var file = $('#dir').val() + '/' + filename; } file = '/'+OC.currentUser+'/files'+file; + // TODO: use oc webroot ? var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service=files&'+type+'='+encodeURIComponent(file); } else { //TODO add path param when showing a link to file in a subfolder of a public link share @@ -630,6 +631,7 @@ OC.Share={ service=linkSharetype; } + // TODO: use oc webroot ? var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service='+service+'&t='+token; } diff --git a/core/js/tests/specs/shareSpec.js b/core/js/tests/specs/shareSpec.js index 458bc41b6a..588e51036e 100644 --- a/core/js/tests/specs/shareSpec.js +++ b/core/js/tests/specs/shareSpec.js @@ -96,7 +96,6 @@ describe('OC.Share tests', function() { describe('Share with link', function() { // TODO: test ajax calls // TODO: test password field visibility (whenever enforced or not) - // TODO: check public upload visibility based on config it('shows share with link checkbox when allowed', function() { $('#allowShareWithLink').val('yes'); OC.Share.showDropDown( @@ -121,6 +120,151 @@ describe('OC.Share tests', function() { ); expect($('#dropdown #linkCheckbox').length).toEqual(0); }); + it('shows populated link share when a link share exists', function() { + loadItemStub.returns({ + reshare: [], + /* jshint camelcase: false */ + shares: [{ + displayname_owner: 'root', + expiration: null, + file_source: 123, + file_target: '/folder', + id: 20, + item_source: '123', + item_type: 'folder', + mail_send: '0', + parent: null, + path: '/folder', + permissions: OC.PERMISSION_READ, + share_type: OC.Share.SHARE_TYPE_LINK, + share_with: null, + stime: 1403884258, + storage: 1, + token: 'tehtoken', + uid_owner: 'root' + }] + }); + OC.Share.showDropDown( + 'file', + 123, + $container, + 'http://localhost/dummylink', + 31, + 'folder' + ); + expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(true); + // this is how the OC.Share class does it... + var link = parent.location.protocol + '//' + location.host + + OC.linkTo('', 'public.php')+'?service=files&t=tehtoken'; + expect($('#dropdown #linkText').val()).toEqual(link); + }); + it('does not show populated link share when a link share exists for a different file', function() { + loadItemStub.returns({ + reshare: [], + /* jshint camelcase: false */ + shares: [{ + displayname_owner: 'root', + expiration: null, + file_source: 123, + file_target: '/folder', + id: 20, + item_source: '123', + item_type: 'folder', + mail_send: '0', + parent: null, + path: '/folder', + permissions: OC.PERMISSION_READ, + share_type: OC.Share.SHARE_TYPE_LINK, + share_with: null, + stime: 1403884258, + storage: 1, + token: 'tehtoken', + uid_owner: 'root' + }] + }); + OC.Share.showDropDown( + 'file', + 456, // another file + $container, + 'http://localhost/dummylink', + 31, + 'folder' + ); + expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(false); + }); + it('shows correct link share when a nest link share exists along with parent one', function() { + loadItemStub.returns({ + reshare: [], + /* jshint camelcase: false */ + shares: [{ + displayname_owner: 'root', + expiration: null, + file_source: 123, + file_target: '/folder', + id: 20, + item_source: '123', + item_type: 'file', + mail_send: '0', + parent: null, + path: '/folder', + permissions: OC.PERMISSION_READ, + share_type: OC.Share.SHARE_TYPE_LINK, + share_with: null, + stime: 1403884258, + storage: 1, + token: 'tehtoken', + uid_owner: 'root' + }, { + displayname_owner: 'root', + expiration: null, + file_source: 456, + file_target: '/file_in_folder.txt', + id: 21, + item_source: '456', + item_type: 'file', + mail_send: '0', + parent: null, + path: '/folder/file_in_folder.txt', + permissions: OC.PERMISSION_READ, + share_type: OC.Share.SHARE_TYPE_LINK, + share_with: null, + stime: 1403884509, + storage: 1, + token: 'anothertoken', + uid_owner: 'root' + }] + }); + + // parent one + OC.Share.showDropDown( + 'folder', + 123, + $container, + 'http://localhost/dummylink', + 31, + 'folder' + ); + expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(true); + // this is how the OC.Share class does it... + var link = parent.location.protocol + '//' + location.host + + OC.linkTo('', 'public.php')+'?service=files&t=tehtoken'; + expect($('#dropdown #linkText').val()).toEqual(link); + + // nested one + OC.Share.showDropDown( + 'file', + 456, + $container, + 'http://localhost/dummylink', + 31, + 'file_in_folder.txt' + ); + expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(true); + // this is how the OC.Share class does it... + link = parent.location.protocol + '//' + location.host + + OC.linkTo('', 'public.php')+'?service=files&t=anothertoken'; + expect($('#dropdown #linkText').val()).toEqual(link); + }); }); describe('"sharesChanged" event', function() { var autocompleteOptions;