PasteStatus.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. 'use strict';
  2. var common = require('../common');
  3. describe('PasteStatus', function () {
  4. describe('createPasteNotification', function () {
  5. this.timeout(30000);
  6. jsc.property(
  7. 'creates a notification after a successfull paste upload',
  8. common.jscUrl(),
  9. common.jscUrl(false),
  10. function (url1, url2) {
  11. const expected1 = common.urlToString(url1),
  12. expected2 = common.urlToString(url2),
  13. clean = jsdom();
  14. $('body').html('<div><div id="deletelink"></div><div id="pastelink"></div></div>');
  15. $.PrivateBin.PasteStatus.init();
  16. $.PrivateBin.PasteStatus.createPasteNotification(expected1, expected2);
  17. var result1 = $('#pasteurl')[0].href,
  18. result2 = $('#deletelink a')[0].href;
  19. clean();
  20. return result1 === expected1 && result2 === expected2;
  21. }
  22. );
  23. });
  24. describe('extractUrl', function () {
  25. this.timeout(30000);
  26. jsc.property(
  27. 'extracts and updates URLs found in given response',
  28. jsc.elements(['http','https']),
  29. 'nestring',
  30. common.jscUrl(),
  31. function (schema, domain, url) {
  32. domain = domain.replace(/\P{Letter}|[\u00AA-\u00BA]/gu,'').toLowerCase();
  33. if (domain.length === 0) {
  34. domain = 'a';
  35. }
  36. url.schema = schema;
  37. url.address.unshift('.');
  38. url.address = domain.split('').concat(url.address);
  39. const urlString = common.urlToString(url),
  40. expected = urlString.substring((schema + '://' + domain).length),
  41. clean = jsdom();
  42. $('body').html('<div><div id="pastelink"></div></div>');
  43. $.PrivateBin.PasteStatus.init();
  44. $.PrivateBin.PasteStatus.createPasteNotification('', '');
  45. $.PrivateBin.PasteStatus.extractUrl(urlString);
  46. const result = $('#pasteurl')[0].href;
  47. clean();
  48. return result.endsWith(expected) && (
  49. result.startsWith(schema + '://xn--') ||
  50. result.startsWith(schema + '://' + domain)
  51. );
  52. }
  53. );
  54. });
  55. describe('showRemainingTime', function () {
  56. this.timeout(30000);
  57. jsc.property(
  58. 'shows burn after reading message or remaining time v1',
  59. 'bool',
  60. 'nat',
  61. common.jscUrl(),
  62. function (burnafterreading, remainingTime, url) {
  63. let clean = jsdom('', {url: common.urlToString(url)}),
  64. result;
  65. $('body').html('<div id="remainingtime" class="hidden"></div>');
  66. $.PrivateBin.PasteStatus.init();
  67. $.PrivateBin.PasteStatus.showRemainingTime($.PrivateBin.Helper.PasteFactory({'meta': {
  68. 'burnafterreading': burnafterreading,
  69. 'remaining_time': remainingTime
  70. }}));
  71. if (burnafterreading) {
  72. result = $('#remainingtime').hasClass('foryoureyesonly') &&
  73. !$('#remainingtime').hasClass('hidden');
  74. } else if (remainingTime) {
  75. result =!$('#remainingtime').hasClass('foryoureyesonly') &&
  76. !$('#remainingtime').hasClass('hidden');
  77. } else {
  78. result = $('#remainingtime').hasClass('hidden') &&
  79. !$('#remainingtime').hasClass('foryoureyesonly');
  80. }
  81. clean();
  82. return result;
  83. }
  84. );
  85. jsc.property(
  86. 'shows burn after reading message or remaining time v2',
  87. 'bool',
  88. 'nat',
  89. common.jscUrl(),
  90. function (burnafterreading, remainingTime, url) {
  91. let clean = jsdom('', {url: common.urlToString(url)}),
  92. result;
  93. $('body').html('<div id="remainingtime" class="hidden"></div>');
  94. $.PrivateBin.PasteStatus.init();
  95. $.PrivateBin.PasteStatus.showRemainingTime($.PrivateBin.Helper.PasteFactory({
  96. 'adata': [null, null, null, burnafterreading],
  97. 'v': 2,
  98. 'meta': {
  99. 'time_to_live': remainingTime
  100. }
  101. }));
  102. if (burnafterreading) {
  103. result = $('#remainingtime').hasClass('foryoureyesonly') &&
  104. !$('#remainingtime').hasClass('hidden');
  105. } else if (remainingTime) {
  106. result =!$('#remainingtime').hasClass('foryoureyesonly') &&
  107. !$('#remainingtime').hasClass('hidden');
  108. } else {
  109. result = $('#remainingtime').hasClass('hidden') &&
  110. !$('#remainingtime').hasClass('foryoureyesonly');
  111. }
  112. clean();
  113. return result;
  114. }
  115. );
  116. });
  117. describe('hideMessages', function () {
  118. it(
  119. 'hides all messages',
  120. function() {
  121. $('body').html(
  122. '<div id="remainingtime"></div><div id="pastesuccess"></div>'
  123. );
  124. $.PrivateBin.PasteStatus.init();
  125. $.PrivateBin.PasteStatus.hideMessages();
  126. assert.ok(
  127. $('#remainingtime').hasClass('hidden') &&
  128. $('#pastesuccess').hasClass('hidden')
  129. );
  130. }
  131. );
  132. });
  133. });