You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

sharedialogshareelistview.js 7.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. /**
  2. * ownCloud
  3. *
  4. * @author Tom Needham
  5. * @copyright 2015 Tom Needham <tom@owncloud.com>
  6. *
  7. * This library is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
  9. * License as published by the Free Software Foundation; either
  10. * version 3 of the License, or any later version.
  11. *
  12. * This library is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
  16. *
  17. * You should have received a copy of the GNU Affero General Public
  18. * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  19. *
  20. */
  21. describe('OC.Share.ShareDialogShareeListView', function () {
  22. var oldCurrentUser;
  23. var fileInfoModel;
  24. var configModel;
  25. var shareModel;
  26. var listView;
  27. var updateShareStub;
  28. beforeEach(function () {
  29. /* jshint camelcase:false */
  30. oldAppConfig = _.extend({}, OC.appConfig.core);
  31. OC.appConfig.core.enforcePasswordForPublicLink = false;
  32. fileInfoModel = new OCA.Files.FileInfoModel({
  33. id: 123,
  34. name: 'shared_file_name.txt',
  35. path: '/subdir',
  36. size: 100,
  37. mimetype: 'text/plain',
  38. permissions: 31,
  39. sharePermissions: 31
  40. });
  41. var attributes = {
  42. itemType: fileInfoModel.isDirectory() ? 'folder' : 'file',
  43. itemSource: fileInfoModel.get('id'),
  44. possiblePermissions: 31,
  45. permissions: 31
  46. };
  47. shareModel = new OC.Share.ShareItemModel(attributes, {
  48. configModel: configModel,
  49. fileInfoModel: fileInfoModel
  50. });
  51. configModel = new OC.Share.ShareConfigModel({
  52. enforcePasswordForPublicLink: false,
  53. isResharingAllowed: true,
  54. isDefaultExpireDateEnabled: false,
  55. isDefaultExpireDateEnforced: false,
  56. defaultExpireDate: 7
  57. });
  58. listView = new OC.Share.ShareDialogShareeListView({
  59. configModel: configModel,
  60. model: shareModel
  61. });
  62. // required for proper event propagation when simulating clicks in some cases (jquery bugs)
  63. $('#testArea').append(listView.$el);
  64. shareModel.set({
  65. linkShares: []
  66. });
  67. oldCurrentUser = OC.currentUser;
  68. OC.currentUser = 'user0';
  69. updateShareStub = sinon.stub(OC.Share.ShareItemModel.prototype, 'updateShare');
  70. });
  71. afterEach(function () {
  72. OC.currentUser = oldCurrentUser;
  73. /* jshint camelcase:false */
  74. OC.appConfig.core = oldAppConfig;
  75. listView.remove();
  76. updateShareStub.restore();
  77. });
  78. describe('Sets correct initial checkbox state', function () {
  79. it('marks edit box as unchecked for file shares without edit permissions', function () {
  80. shareModel.set('shares', [{
  81. id: 100,
  82. item_source: 123,
  83. permissions: 1,
  84. share_type: OC.Share.SHARE_TYPE_USER,
  85. share_with: 'user1',
  86. share_with_displayname: 'User One',
  87. uid_owner: OC.getCurrentUser().uid,
  88. itemType: 'file'
  89. }]);
  90. listView.render();
  91. expect(listView.$el.find("input[name='edit']").is(':not(:checked)')).toEqual(true);
  92. });
  93. it('marks edit box as checked for file shares', function () {
  94. shareModel.set('shares', [{
  95. id: 100,
  96. item_source: 123,
  97. permissions: 1 | OC.PERMISSION_UPDATE,
  98. share_type: OC.Share.SHARE_TYPE_USER,
  99. share_with: 'user1',
  100. share_with_displayname: 'User One',
  101. uid_owner: OC.getCurrentUser().uid,
  102. itemType: 'file'
  103. }]);
  104. listView.render();
  105. expect(listView.$el.find("input[name='edit']").is(':checked')).toEqual(true);
  106. });
  107. it('marks edit box as indeterminate when only some permissions are given', function () {
  108. shareModel.set('shares', [{
  109. id: 100,
  110. item_source: 123,
  111. permissions: 1 | OC.PERMISSION_UPDATE,
  112. share_type: OC.Share.SHARE_TYPE_USER,
  113. share_with: 'user1',
  114. share_with_displayname: 'User One',
  115. uid_owner: OC.getCurrentUser().uid,
  116. itemType: 'folder'
  117. }]);
  118. shareModel.set('itemType', 'folder');
  119. listView.render();
  120. expect(listView.$el.find("input[name='edit']").is(':indeterminate')).toEqual(true);
  121. });
  122. it('marks edit box as indeterminate when only some permissions are given for sharee with special characters', function () {
  123. shareModel.set('shares', [{
  124. id: 100,
  125. item_source: 123,
  126. permissions: 1 | OC.PERMISSION_UPDATE,
  127. share_type: OC.Share.SHARE_TYPE_USER,
  128. share_with: 'user _.@-\'',
  129. share_with_displayname: 'User One',
  130. uid_owner: OC.getCurrentUser().uid,
  131. itemType: 'folder'
  132. }]);
  133. shareModel.set('itemType', 'folder');
  134. listView.render();
  135. expect(listView.$el.find("input[name='edit']").is(':indeterminate')).toEqual(true);
  136. });
  137. it('Checks edit box when all permissions are given', function () {
  138. shareModel.set('shares', [{
  139. id: 100,
  140. item_source: 123,
  141. permissions: 1 | OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_DELETE,
  142. share_type: OC.Share.SHARE_TYPE_USER,
  143. share_with: 'user1',
  144. share_with_displayname: 'User One',
  145. uid_owner: OC.getCurrentUser().uid,
  146. itemType: 'folder'
  147. }]);
  148. shareModel.set('itemType', 'folder');
  149. listView.render();
  150. expect(listView.$el.find("input[name='edit']").is(':checked')).toEqual(true);
  151. });
  152. it('Checks edit box when all permissions are given for sharee with special characters', function () {
  153. shareModel.set('shares', [{
  154. id: 100,
  155. item_source: 123,
  156. permissions: 1 | OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_DELETE,
  157. share_type: OC.Share.SHARE_TYPE_USER,
  158. share_with: 'user _.@-\'',
  159. share_with_displayname: 'User One',
  160. uid_owner: OC.getCurrentUser().uid,
  161. itemType: 'folder'
  162. }]);
  163. shareModel.set('itemType', 'folder');
  164. listView.render();
  165. expect(listView.$el.find("input[name='edit']").is(':checked')).toEqual(true);
  166. });
  167. });
  168. describe('Manages checkbox events correctly', function () {
  169. it('Checks cruds boxes when edit box checked', function () {
  170. shareModel.set('shares', [{
  171. id: 100,
  172. item_source: 123,
  173. permissions: 1,
  174. share_type: OC.Share.SHARE_TYPE_USER,
  175. share_with: 'user1',
  176. share_with_displayname: 'User One',
  177. uid_owner: OC.getCurrentUser().uid,
  178. }]);
  179. shareModel.set('itemType', 'folder');
  180. listView.render();
  181. listView.$el.find("input[name='edit']").click();
  182. expect(listView.$el.find("input[name='update']").is(':checked')).toEqual(true);
  183. expect(updateShareStub.calledOnce).toEqual(true);
  184. });
  185. it('marks edit box as indeterminate when some of create/update/delete are checked', function () {
  186. shareModel.set('shares', [{
  187. id: 100,
  188. item_source: 123,
  189. permissions: 1,
  190. share_type: OC.Share.SHARE_TYPE_USER,
  191. share_with: 'user1',
  192. share_with_displayname: 'User One',
  193. uid_owner: OC.getCurrentUser().uid,
  194. itemType: 'folder'
  195. }]);
  196. shareModel.set('itemType', 'folder');
  197. listView.render();
  198. listView.$el.find("input[name='update']").click();
  199. expect(listView.$el.find("input[name='edit']").is(':indeterminate')).toEqual(true);
  200. expect(updateShareStub.calledOnce).toEqual(true);
  201. });
  202. it('Checks edit box when all of create/update/delete are checked', function () {
  203. shareModel.set('shares', [{
  204. id: 100,
  205. item_source: 123,
  206. permissions: 1 | OC.PERMISSION_CREATE | OC.PERMISSION_DELETE,
  207. share_type: OC.Share.SHARE_TYPE_USER,
  208. share_with: 'user1',
  209. share_with_displayname: 'User One',
  210. uid_owner: OC.getCurrentUser().uid,
  211. itemType: 'folder'
  212. }]);
  213. shareModel.set('itemType', 'folder');
  214. listView.render();
  215. listView.$el.find("input[name='update']").click();
  216. expect(listView.$el.find("input[name='edit']").is(':checked')).toEqual(true);
  217. expect(updateShareStub.calledOnce).toEqual(true);
  218. });
  219. });
  220. });