From d9d816bd9815527a9cff922fa58e06646b0e3115 Mon Sep 17 00:00:00 2001
From: Vincent Petry <pvince81@owncloud.com>
Date: Fri, 27 Jun 2014 18:21:02 +0200
Subject: [PATCH] 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;
-- 
GitLab