Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

tagspluginspec.js 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /*
  2. * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
  3. *
  4. * This file is licensed under the Affero General Public License version 3
  5. * or later.
  6. *
  7. * See the COPYING-README file.
  8. *
  9. */
  10. describe('OCA.Files.TagsPlugin tests', function() {
  11. var fileList;
  12. var testFiles;
  13. beforeEach(function() {
  14. var $content = $('<div id="content"></div>');
  15. $('#testArea').append($content);
  16. // dummy file list
  17. var $div = $(
  18. '<div>' +
  19. '<table id="filestable">' +
  20. '<thead></thead>' +
  21. '<tbody id="fileList"></tbody>' +
  22. '</table>' +
  23. '</div>');
  24. $('#content').append($div);
  25. fileList = new OCA.Files.FileList($div);
  26. OCA.Files.TagsPlugin.attach(fileList);
  27. testFiles = [{
  28. id: 1,
  29. type: 'file',
  30. name: 'One.txt',
  31. path: '/subdir',
  32. mimetype: 'text/plain',
  33. size: 12,
  34. permissions: OC.PERMISSION_ALL,
  35. etag: 'abc',
  36. shareOwner: 'User One',
  37. isShareMountPoint: false,
  38. tags: ['tag1', 'tag2']
  39. }];
  40. });
  41. afterEach(function() {
  42. fileList.destroy();
  43. fileList = null;
  44. });
  45. describe('Favorites icon', function() {
  46. it('renders favorite icon and extra data', function() {
  47. var $favoriteMark, $tr;
  48. fileList.setFiles(testFiles);
  49. $tr = fileList.$el.find('tbody tr:first');
  50. $favoriteMark = $tr.find('.favorite-mark');
  51. expect($favoriteMark.length).toEqual(1);
  52. expect($favoriteMark.hasClass('permanent')).toEqual(false);
  53. expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2']);
  54. expect($tr.attr('data-favorite')).not.toBeDefined();
  55. });
  56. it('renders permanent favorite icon and extra data', function() {
  57. var $favoriteMark, $tr;
  58. testFiles[0].tags.push(OC.TAG_FAVORITE);
  59. fileList.setFiles(testFiles);
  60. $tr = fileList.$el.find('tbody tr:first');
  61. $favoriteMark = $tr.find('.favorite-mark');
  62. expect($favoriteMark.length).toEqual(1);
  63. expect($favoriteMark.hasClass('permanent')).toEqual(true);
  64. expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2', OC.TAG_FAVORITE]);
  65. expect($tr.attr('data-favorite')).toEqual('true');
  66. });
  67. });
  68. describe('Applying tags', function() {
  69. it('through FileActionsMenu sends request to server and updates icon', function() {
  70. var request;
  71. fileList.setFiles(testFiles);
  72. var $tr = fileList.findFileEl('One.txt');
  73. var $favoriteMark = $tr.find('.favorite-mark');
  74. var $showMenuAction = $tr.find('.action-menu');
  75. $showMenuAction.click();
  76. var $favoriteActionInMenu = $tr.find('.fileActionsMenu .action-favorite');
  77. $favoriteActionInMenu.click();
  78. expect(fakeServer.requests.length).toEqual(1);
  79. request = fakeServer.requests[0];
  80. expect(JSON.parse(request.requestBody)).toEqual({
  81. tags: ['tag1', 'tag2', OC.TAG_FAVORITE]
  82. });
  83. request.respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
  84. tags: ['tag1', 'tag2', 'tag3', OC.TAG_FAVORITE]
  85. }));
  86. // re-read the element as it was re-inserted
  87. $tr = fileList.findFileEl('One.txt');
  88. $favoriteMark = $tr.find('.favorite-mark');
  89. $showMenuAction = $tr.find('.action-menu');
  90. expect($tr.attr('data-favorite')).toEqual('true');
  91. expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2', 'tag3', OC.TAG_FAVORITE]);
  92. expect(fileList.files[0].tags).toEqual(['tag1', 'tag2', 'tag3', OC.TAG_FAVORITE]);
  93. expect($favoriteMark.find('.icon').hasClass('icon-star')).toEqual(false);
  94. expect($favoriteMark.find('.icon').hasClass('icon-starred')).toEqual(true);
  95. // show again the menu and get the new action, as the menu was
  96. // closed and removed (and with it, the previous action) when that
  97. // action was clicked
  98. $showMenuAction.click();
  99. $favoriteActionInMenu = $tr.find('.fileActionsMenu .action-favorite');
  100. $favoriteActionInMenu.click();
  101. expect(fakeServer.requests.length).toEqual(2);
  102. request = fakeServer.requests[1];
  103. expect(JSON.parse(request.requestBody)).toEqual({
  104. tags: ['tag1', 'tag2', 'tag3']
  105. });
  106. request.respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
  107. tags: ['tag1', 'tag2', 'tag3']
  108. }));
  109. // re-read the element as it was re-inserted
  110. $tr = fileList.findFileEl('One.txt');
  111. $favoriteMark = $tr.find('.favorite-mark');
  112. expect($tr.attr('data-favorite')).toBeFalsy();
  113. expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2', 'tag3']);
  114. expect(fileList.files[0].tags).toEqual(['tag1', 'tag2', 'tag3']);
  115. expect($favoriteMark.find('.icon').hasClass('icon-star')).toEqual(true);
  116. expect($favoriteMark.find('.icon').hasClass('icon-starred')).toEqual(false);
  117. });
  118. });
  119. describe('elementToFile', function() {
  120. it('returns tags', function() {
  121. fileList.setFiles(testFiles);
  122. var $tr = fileList.findFileEl('One.txt');
  123. var data = fileList.elementToFile($tr);
  124. expect(data.tags).toEqual(['tag1', 'tag2']);
  125. });
  126. it('returns empty array when no tags present', function() {
  127. delete testFiles[0].tags;
  128. fileList.setFiles(testFiles);
  129. var $tr = fileList.findFileEl('One.txt');
  130. var data = fileList.elementToFile($tr);
  131. expect(data.tags).toEqual([]);
  132. });
  133. });
  134. });