Alert.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. 'use strict';
  2. var common = require('../common');
  3. describe('Alert', function () {
  4. describe('showStatus', function () {
  5. before(function () {
  6. cleanup();
  7. });
  8. jsc.property(
  9. 'shows a status message',
  10. jsc.array(common.jscAlnumString()),
  11. jsc.array(common.jscAlnumString()),
  12. function (icon, message) {
  13. icon = icon.join('');
  14. message = message.join('');
  15. var expected = '<div id="status" role="alert" ' +
  16. 'class="statusmessage alert alert-info"><span ' +
  17. 'class="glyphicon glyphicon-' + icon +
  18. '" aria-hidden="true"></span> ' + message + '</div>';
  19. $('body').html(
  20. '<div id="status" role="alert" class="statusmessage ' +
  21. 'alert alert-info hidden"><span class="glyphicon ' +
  22. 'glyphicon-info-sign" aria-hidden="true"></span> </div>'
  23. );
  24. $.PrivateBin.Alert.init();
  25. $.PrivateBin.Alert.showStatus(message, icon);
  26. var result = $('body').html();
  27. return expected === result;
  28. }
  29. );
  30. });
  31. describe('showError', function () {
  32. before(function () {
  33. cleanup();
  34. });
  35. jsc.property(
  36. 'shows an error message',
  37. jsc.array(common.jscAlnumString()),
  38. jsc.array(common.jscAlnumString()),
  39. function (icon, message) {
  40. icon = icon.join('');
  41. message = message.join('');
  42. var expected = '<div id="errormessage" role="alert" ' +
  43. 'class="statusmessage alert alert-danger"><span ' +
  44. 'class="glyphicon glyphicon-' + icon +
  45. '" aria-hidden="true"></span> ' + message + '</div>';
  46. $('body').html(
  47. '<div id="errormessage" role="alert" class="statusmessage ' +
  48. 'alert alert-danger hidden"><span class="glyphicon ' +
  49. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  50. );
  51. $.PrivateBin.Alert.init();
  52. $.PrivateBin.Alert.showError(message, icon);
  53. var result = $('body').html();
  54. return expected === result;
  55. }
  56. );
  57. });
  58. describe('showRemaining', function () {
  59. before(function () {
  60. cleanup();
  61. });
  62. jsc.property(
  63. 'shows remaining time',
  64. jsc.array(common.jscAlnumString()),
  65. jsc.array(common.jscAlnumString()),
  66. 'integer',
  67. function (message, string, number) {
  68. message = message.join('');
  69. string = string.join('');
  70. var expected = '<div id="remainingtime" role="alert" ' +
  71. 'class="alert alert-info"><span ' +
  72. 'class="glyphicon glyphicon-fire" aria-hidden="true">' +
  73. '</span> ' + string + message + number + '</div>';
  74. $('body').html(
  75. '<div id="remainingtime" role="alert" class="hidden ' +
  76. 'alert alert-info"><span class="glyphicon ' +
  77. 'glyphicon-fire" aria-hidden="true"></span> </div>'
  78. );
  79. $.PrivateBin.Alert.init();
  80. $.PrivateBin.Alert.showRemaining(['%s' + message + '%d', string, number]);
  81. var result = $('body').html();
  82. return expected === result;
  83. }
  84. );
  85. });
  86. describe('showLoading', function () {
  87. before(function () {
  88. cleanup();
  89. });
  90. jsc.property(
  91. 'shows a loading message',
  92. jsc.array(common.jscAlnumString()),
  93. jsc.array(common.jscAlnumString()),
  94. 'integer',
  95. function (icon, message, number) {
  96. icon = icon.join('');
  97. message = message.join('');
  98. var default_message = 'Loading…';
  99. if (message.length === 0) {
  100. message = default_message;
  101. }
  102. var expected = '<ul class="nav navbar-nav"><li ' +
  103. 'id="loadingindicator" class="navbar-text"><span ' +
  104. 'class="glyphicon glyphicon-' + icon +
  105. '" aria-hidden="true"></span> ' + message + '</li></ul>';
  106. $('body').html(
  107. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  108. 'class="navbar-text hidden"><span class="glyphicon ' +
  109. 'glyphicon-time" aria-hidden="true"></span> ' +
  110. default_message + '</li></ul>'
  111. );
  112. $.PrivateBin.Alert.init();
  113. $.PrivateBin.Alert.showLoading(message, number, icon);
  114. var result = $('body').html();
  115. return expected === result;
  116. }
  117. );
  118. });
  119. describe('hideLoading', function () {
  120. before(function () {
  121. cleanup();
  122. });
  123. it(
  124. 'hides the loading message',
  125. function() {
  126. $('body').html(
  127. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  128. 'class="navbar-text"><span class="glyphicon ' +
  129. 'glyphicon-time" aria-hidden="true"></span> ' +
  130. 'Loading…</li></ul>'
  131. );
  132. $('body').addClass('loading');
  133. $.PrivateBin.Alert.init();
  134. $.PrivateBin.Alert.hideLoading();
  135. return !$('body').hasClass('loading') &&
  136. $('#loadingindicator').hasClass('hidden');
  137. }
  138. );
  139. });
  140. describe('hideMessages', function () {
  141. before(function () {
  142. cleanup();
  143. });
  144. it(
  145. 'hides all messages',
  146. function() {
  147. $('body').html(
  148. '<div id="status" role="alert" class="statusmessage ' +
  149. 'alert alert-info"><span class="glyphicon ' +
  150. 'glyphicon-info-sign" aria-hidden="true"></span> </div>' +
  151. '<div id="errormessage" role="alert" class="statusmessage ' +
  152. 'alert alert-danger"><span class="glyphicon ' +
  153. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  154. );
  155. $.PrivateBin.Alert.init();
  156. $.PrivateBin.Alert.hideMessages();
  157. return $('#statusmessage').hasClass('hidden') &&
  158. $('#errormessage').hasClass('hidden');
  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. var handlerCalled = false,
  173. default_message = '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 = default_message;
  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. default_message + '</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. return handlerCalled;
  205. }
  206. );
  207. });
  208. });