Alert.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. 'use strict';
  2. var common = require('../common');
  3. describe('Alert', function () {
  4. describe('showStatus', function () {
  5. jsc.property(
  6. 'shows a status message',
  7. jsc.array(common.jscAlnumString()),
  8. jsc.array(common.jscAlnumString()),
  9. function (icon, message) {
  10. icon = icon.join('');
  11. message = message.join('');
  12. const expected = '<div id="status" role="alert" ' +
  13. 'class="statusmessage alert alert-info"><span ' +
  14. 'class="glyphicon glyphicon-' + icon +
  15. '" aria-hidden="true"></span> ' + message + '</div>';
  16. $('body').html(
  17. '<div id="status" role="alert" class="statusmessage ' +
  18. 'alert alert-info hidden"><span class="glyphicon ' +
  19. 'glyphicon-info-sign" aria-hidden="true"></span> </div>'
  20. );
  21. $.PrivateBin.Alert.init();
  22. $.PrivateBin.Alert.showStatus(message, icon);
  23. const result = $('body').html();
  24. return expected === result;
  25. }
  26. );
  27. });
  28. describe('showError', function () {
  29. before(function () {
  30. cleanup();
  31. });
  32. jsc.property(
  33. 'shows an error message',
  34. jsc.array(common.jscAlnumString()),
  35. jsc.array(common.jscAlnumString()),
  36. function (icon, message) {
  37. icon = icon.join('');
  38. message = message.join('');
  39. const expected = '<div id="errormessage" role="alert" ' +
  40. 'class="statusmessage alert alert-danger"><span ' +
  41. 'class="glyphicon glyphicon-' + icon +
  42. '" aria-hidden="true"></span> ' + message + '</div>';
  43. $('body').html(
  44. '<div id="errormessage" role="alert" class="statusmessage ' +
  45. 'alert alert-danger hidden"><span class="glyphicon ' +
  46. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  47. );
  48. $.PrivateBin.Alert.init();
  49. $.PrivateBin.Alert.showError(message, icon);
  50. const result = $('body').html();
  51. return expected === result;
  52. }
  53. );
  54. });
  55. describe('showRemaining', function () {
  56. before(function () {
  57. cleanup();
  58. });
  59. jsc.property(
  60. 'shows remaining time',
  61. jsc.array(common.jscAlnumString()),
  62. jsc.array(common.jscAlnumString()),
  63. 'integer',
  64. function (message, string, number) {
  65. message = message.join('');
  66. string = string.join('');
  67. const expected = '<div id="remainingtime" role="alert" ' +
  68. 'class="alert alert-info"><span ' +
  69. 'class="glyphicon glyphicon-fire" aria-hidden="true">' +
  70. '</span> ' + string + message + number + '</div>';
  71. $('body').html(
  72. '<div id="remainingtime" role="alert" class="hidden ' +
  73. 'alert alert-info"><span class="glyphicon ' +
  74. 'glyphicon-fire" aria-hidden="true"></span> </div>'
  75. );
  76. $.PrivateBin.Alert.init();
  77. $.PrivateBin.Alert.showRemaining(['%s' + message + '%d', string, number]);
  78. const result = $('body').html();
  79. return expected === result;
  80. }
  81. );
  82. });
  83. describe('showLoading', function () {
  84. before(function () {
  85. cleanup();
  86. });
  87. jsc.property(
  88. 'shows a loading message',
  89. jsc.array(common.jscAlnumString()),
  90. jsc.array(common.jscAlnumString()),
  91. function (message, icon) {
  92. message = message.join('');
  93. icon = icon.join('');
  94. const defaultMessage = 'Loading…';
  95. if (message.length === 0) {
  96. message = defaultMessage;
  97. }
  98. var expected = '<ul class="nav navbar-nav"><li ' +
  99. 'id="loadingindicator" class="navbar-text"><span ' +
  100. 'class="glyphicon glyphicon-' + icon +
  101. '" aria-hidden="true"></span> ' + message + '</li></ul>';
  102. $('body').html(
  103. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  104. 'class="navbar-text hidden"><span class="glyphicon ' +
  105. 'glyphicon-time" aria-hidden="true"></span> ' +
  106. defaultMessage + '</li></ul>'
  107. );
  108. $.PrivateBin.Alert.init();
  109. $.PrivateBin.Alert.showLoading(message, icon);
  110. const result = $('body').html();
  111. return expected === result;
  112. }
  113. );
  114. });
  115. describe('hideLoading', function () {
  116. before(function () {
  117. cleanup();
  118. });
  119. it(
  120. 'hides the loading message',
  121. function() {
  122. $('body').html(
  123. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  124. 'class="navbar-text"><span class="glyphicon ' +
  125. 'glyphicon-time" aria-hidden="true"></span> ' +
  126. 'Loading…</li></ul>'
  127. );
  128. $('body').addClass('loading');
  129. $.PrivateBin.Alert.init();
  130. $.PrivateBin.Alert.hideLoading();
  131. assert.ok(
  132. !$('body').hasClass('loading') &&
  133. $('#loadingindicator').hasClass('hidden')
  134. );
  135. }
  136. );
  137. });
  138. describe('hideMessages', function () {
  139. before(function () {
  140. cleanup();
  141. });
  142. it(
  143. 'hides all messages',
  144. function() {
  145. $('body').html(
  146. '<div id="status" role="alert" class="statusmessage ' +
  147. 'alert alert-info"><span class="glyphicon ' +
  148. 'glyphicon-info-sign" aria-hidden="true"></span> </div>' +
  149. '<div id="errormessage" role="alert" class="statusmessage ' +
  150. 'alert alert-danger"><span class="glyphicon ' +
  151. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  152. );
  153. $.PrivateBin.Alert.init();
  154. $.PrivateBin.Alert.hideMessages();
  155. assert.ok(
  156. $('#status').hasClass('hidden') &&
  157. $('#errormessage').hasClass('hidden')
  158. );
  159. }
  160. );
  161. });
  162. describe('setCustomHandler', function () {
  163. before(function () {
  164. cleanup();
  165. });
  166. jsc.property(
  167. 'calls a given handler function',
  168. 'nat 3',
  169. jsc.array(common.jscAlnumString()),
  170. function (trigger, message) {
  171. message = message.join('');
  172. let handlerCalled = false,
  173. defaultMessage = 'Loading…',
  174. functions = [
  175. $.PrivateBin.Alert.showStatus,
  176. $.PrivateBin.Alert.showError,
  177. $.PrivateBin.Alert.showRemaining,
  178. $.PrivateBin.Alert.showLoading
  179. ];
  180. if (message.length === 0) {
  181. message = defaultMessage;
  182. }
  183. $('body').html(
  184. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  185. 'class="navbar-text hidden"><span class="glyphicon ' +
  186. 'glyphicon-time" aria-hidden="true"></span> ' +
  187. defaultMessage + '</li></ul>' +
  188. '<div id="remainingtime" role="alert" class="hidden ' +
  189. 'alert alert-info"><span class="glyphicon ' +
  190. 'glyphicon-fire" aria-hidden="true"></span> </div>' +
  191. '<div id="status" role="alert" class="statusmessage ' +
  192. 'alert alert-info"><span class="glyphicon ' +
  193. 'glyphicon-info-sign" aria-hidden="true"></span> </div>' +
  194. '<div id="errormessage" role="alert" class="statusmessage ' +
  195. 'alert alert-danger"><span class="glyphicon ' +
  196. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  197. );
  198. $.PrivateBin.Alert.init();
  199. $.PrivateBin.Alert.setCustomHandler(function(id, $element) {
  200. handlerCalled = true;
  201. return jsc.random(0, 1) ? true : $element;
  202. });
  203. functions[trigger](message);
  204. $.PrivateBin.Alert.setCustomHandler(null);
  205. return handlerCalled;
  206. }
  207. );
  208. });
  209. });