summaryrefslogtreecommitdiffstats
path: root/core/js/tests/specs
diff options
context:
space:
mode:
authorDaniel Calviño Sánchez <danxuliu@gmail.com>2018-10-15 17:09:46 +0200
committerDaniel Calviño Sánchez <danxuliu@gmail.com>2018-11-02 13:30:18 +0100
commit376704e83413d093d596f1b9168daf24907189aa (patch)
tree0058f7763e7cdbd535400847843178655a54f97d /core/js/tests/specs
parentadf80aa8b329cf08e3f21a1ed8f722ab066d868d (diff)
downloadnextcloud-server-376704e83413d093d596f1b9168daf24907189aa.tar.gz
nextcloud-server-376704e83413d093d596f1b9168daf24907189aa.zip
Add "Password protect by Talk" to the menu of link shares
When Talk is enabled the menu for link shares now shows a checkbox to protect the password by Talk (that is, to show the "Request password by Talk" UI in the authentication page for the link share). Although in e-mail shares protecting the share with a password and protecting the password by Talk are mutually exclusive actions (as when the password is set it is sent to the sharee, so it must be set again when protecting it by Talk to be able to verify the identity of the sharee), in the case of link shares protecting the password by Talk is an additional step to protecting the share with a password (as just setting the password does not disclose it to anyone). As such, the checkbox is shown only when there is a password set for the link share (even if the field itself for the password is not shown, like when they are enforced in the settings). Note that the icon set for the field, "icon-passwordtalk", does not currently exist; it is the same used for e-mail shares, and it is needed simply to get the right padding in the menu. Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Diffstat (limited to 'core/js/tests/specs')
-rw-r--r--core/js/tests/specs/sharedialoglinkshareview.js113
-rw-r--r--core/js/tests/specs/shareitemmodelSpec.js13
2 files changed, 123 insertions, 3 deletions
diff --git a/core/js/tests/specs/sharedialoglinkshareview.js b/core/js/tests/specs/sharedialoglinkshareview.js
index f5fe8725c03..c2d84fd2e87 100644
--- a/core/js/tests/specs/sharedialoglinkshareview.js
+++ b/core/js/tests/specs/sharedialoglinkshareview.js
@@ -235,4 +235,117 @@ describe('OC.Share.ShareDialogLinkShareView', function () {
});
+ describe('protect password by Talk', function () {
+
+ var $passwordByTalkCheckbox;
+ var $workingIcon;
+
+ beforeEach(function () {
+ // Needed to render the view
+ configModel.isShareWithLinkAllowed.returns(true);
+
+ // "Enable" Talk
+ window.oc_appswebroots['spreed'] = window.oc_webroot + '/apps/files/';
+
+ shareModel.set({
+ linkShares: [{
+ id: 123,
+ password: 'password'
+ }]
+ });
+ view.render();
+
+ $passwordByTalkCheckbox = view.$el.find('.passwordByTalkCheckbox');
+ $workingIcon = $passwordByTalkCheckbox.prev('.icon-loading-small');
+
+ sinon.stub(shareModel, 'saveLinkShare');
+
+ expect($workingIcon.hasClass('hidden')).toBeTruthy();
+ });
+
+ afterEach(function () {
+ shareModel.saveLinkShare.restore();
+ });
+
+ it('is shown if Talk is enabled and there is a password set', function() {
+ expect($passwordByTalkCheckbox.length).toBeTruthy();
+ });
+
+ it('is not shown if Talk is enabled but there is no password set', function() {
+ // Changing the password value also triggers the rendering
+ shareModel.set({
+ linkShares: [{
+ id: 123
+ }]
+ });
+
+ $passwordByTalkCheckbox = view.$el.find('.passwordByTalkCheckbox');
+
+ expect($passwordByTalkCheckbox.length).toBeFalsy();
+ });
+
+ it('is not shown if there is a password set but Talk is not enabled', function() {
+ // "Disable" Talk
+ delete window.oc_appswebroots['spreed'];
+
+ view.render();
+
+ $passwordByTalkCheckbox = view.$el.find('.passwordByTalkCheckbox');
+
+ expect($passwordByTalkCheckbox.length).toBeFalsy();
+ });
+
+ it('checkbox is checked when the setting is enabled', function () {
+ shareModel.set({
+ linkShares: [{
+ id: 123,
+ password: 'password',
+ sendPasswordByTalk: true
+ }]
+ });
+ view.render();
+
+ $passwordByTalkCheckbox = view.$el.find('.passwordByTalkCheckbox');
+
+ expect($passwordByTalkCheckbox.is(':checked')).toEqual(true);
+ });
+
+ it('checkbox is not checked when the setting is disabled', function () {
+ expect($passwordByTalkCheckbox.is(':checked')).toEqual(false);
+ });
+
+ it('enables the setting if clicked when unchecked', function () {
+ // Simulate the click by checking the checkbox and then triggering
+ // the "change" event.
+ $passwordByTalkCheckbox.prop('checked', true);
+ $passwordByTalkCheckbox.change();
+
+ expect($workingIcon.hasClass('hidden')).toBeFalsy();
+ expect(shareModel.saveLinkShare.withArgs({ sendPasswordByTalk: true, cid: 123 }).calledOnce).toBeTruthy();
+ });
+
+ it('disables the setting if clicked when checked', function () {
+ shareModel.set({
+ linkShares: [{
+ id: 123,
+ password: 'password',
+ sendPasswordByTalk: true
+ }]
+ });
+ view.render();
+
+ $passwordByTalkCheckbox = view.$el.find('.passwordByTalkCheckbox');
+ $workingIcon = $passwordByTalkCheckbox.prev('.icon-loading-small');
+
+ // Simulate the click by unchecking the checkbox and then triggering
+ // the "change" event.
+ $passwordByTalkCheckbox.prop('checked', false);
+ $passwordByTalkCheckbox.change();
+
+ expect($workingIcon.hasClass('hidden')).toBeFalsy();
+ expect(shareModel.saveLinkShare.withArgs({ sendPasswordByTalk: false, cid: 123 }).calledOnce).toBeTruthy();
+ });
+
+ });
+
});
diff --git a/core/js/tests/specs/shareitemmodelSpec.js b/core/js/tests/specs/shareitemmodelSpec.js
index 3b4dc5a960f..e8016950094 100644
--- a/core/js/tests/specs/shareitemmodelSpec.js
+++ b/core/js/tests/specs/shareitemmodelSpec.js
@@ -169,7 +169,8 @@ describe('OC.Share.ShareItemModel', function() {
storage: 1,
token: 'tehtoken',
uid_owner: 'root',
- hide_download: 1
+ hide_download: 1,
+ send_password_by_talk: true
}
]));
@@ -189,6 +190,7 @@ describe('OC.Share.ShareItemModel', function() {
expect(linkShares.length).toEqual(1);
var linkShare = linkShares[0];
expect(linkShare.hideDownload).toEqual(true);
+ expect(linkShare.sendPasswordByTalk).toEqual(true);
// TODO: check more attributes
});
@@ -293,7 +295,8 @@ describe('OC.Share.ShareItemModel', function() {
storage: 1,
token: 'tehtoken',
uid_owner: 'root',
- hide_download: 0
+ hide_download: 0,
+ send_password_by_talk: false
}, {
displayname_owner: 'root',
expiration: '2015-10-15 00:00:00',
@@ -312,7 +315,8 @@ describe('OC.Share.ShareItemModel', function() {
storage: 1,
token: 'anothertoken',
uid_owner: 'root',
- hide_download: 1
+ hide_download: 1,
+ send_password_by_talk: true
}]
));
OC.currentUser = 'root';
@@ -327,6 +331,7 @@ describe('OC.Share.ShareItemModel', function() {
var linkShare = linkShares[0];
expect(linkShare.token).toEqual('tehtoken');
expect(linkShare.hideDownload).toEqual(false);
+ expect(linkShare.sendPasswordByTalk).toEqual(false);
// TODO: check child too
});
@@ -588,6 +593,7 @@ describe('OC.Share.ShareItemModel', function() {
hideDownload: false,
password: '',
passwordChanged: false,
+ sendPasswordByTalk: false,
permissions: OC.PERMISSION_READ,
expireDate: '',
shareType: OC.Share.SHARE_TYPE_LINK
@@ -612,6 +618,7 @@ describe('OC.Share.ShareItemModel', function() {
hideDownload: false,
password: '',
passwordChanged: false,
+ sendPasswordByTalk: false,
permissions: OC.PERMISSION_READ,
expireDate: '2015-07-24 00:00:00',
shareType: OC.Share.SHARE_TYPE_LINK