Alert.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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. function (message, icon) {
  95. message = message.join('');
  96. icon = icon.join('');
  97. var defaultMessage = 'Loading…';
  98. if (message.length === 0) {
  99. message = defaultMessage;
  100. }
  101. var expected = '<ul class="nav navbar-nav"><li ' +
  102. 'id="loadingindicator" class="navbar-text"><span ' +
  103. 'class="glyphicon glyphicon-' + icon +
  104. '" aria-hidden="true"></span> ' + message + '</li></ul>';
  105. $('body').html(
  106. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  107. 'class="navbar-text hidden"><span class="glyphicon ' +
  108. 'glyphicon-time" aria-hidden="true"></span> ' +
  109. defaultMessage + '</li></ul>'
  110. );
  111. $.PrivateBin.Alert.init();
  112. $.PrivateBin.Alert.showLoading(message, icon);
  113. var result = $('body').html();
  114. return expected === result;
  115. }
  116. );
  117. });
  118. describe('hideLoading', function () {
  119. before(function () {
  120. cleanup();
  121. });
  122. it(
  123. 'hides the loading message',
  124. function() {
  125. $('body').html(
  126. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  127. 'class="navbar-text"><span class="glyphicon ' +
  128. 'glyphicon-time" aria-hidden="true"></span> ' +
  129. 'Loading…</li></ul>'
  130. );
  131. $('body').addClass('loading');
  132. $.PrivateBin.Alert.init();
  133. $.PrivateBin.Alert.hideLoading();
  134. assert.ok(
  135. !$('body').hasClass('loading') &&
  136. $('#loadingindicator').hasClass('hidden')
  137. );
  138. }
  139. );
  140. });
  141. describe('hideMessages', function () {
  142. before(function () {
  143. cleanup();
  144. });
  145. it(
  146. 'hides all messages',
  147. function() {
  148. $('body').html(
  149. '<div id="status" role="alert" class="statusmessage ' +
  150. 'alert alert-info"><span class="glyphicon ' +
  151. 'glyphicon-info-sign" aria-hidden="true"></span> </div>' +
  152. '<div id="errormessage" role="alert" class="statusmessage ' +
  153. 'alert alert-danger"><span class="glyphicon ' +
  154. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  155. );
  156. $.PrivateBin.Alert.init();
  157. $.PrivateBin.Alert.hideMessages();
  158. assert.ok(
  159. $('#status').hasClass('hidden') &&
  160. $('#errormessage').hasClass('hidden')
  161. );
  162. }
  163. );
  164. });
  165. describe('setCustomHandler', function () {
  166. before(function () {
  167. cleanup();
  168. });
  169. jsc.property(
  170. 'calls a given handler function',
  171. 'nat 3',
  172. jsc.array(common.jscAlnumString()),
  173. function (trigger, message) {
  174. message = message.join('');
  175. var handlerCalled = false,
  176. defaultMessage = 'Loading…',
  177. functions = [
  178. $.PrivateBin.Alert.showStatus,
  179. $.PrivateBin.Alert.showError,
  180. $.PrivateBin.Alert.showRemaining,
  181. $.PrivateBin.Alert.showLoading
  182. ];
  183. if (message.length === 0) {
  184. message = defaultMessage;
  185. }
  186. $('body').html(
  187. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  188. 'class="navbar-text hidden"><span class="glyphicon ' +
  189. 'glyphicon-time" aria-hidden="true"></span> ' +
  190. defaultMessage + '</li></ul>' +
  191. '<div id="remainingtime" role="alert" class="hidden ' +
  192. 'alert alert-info"><span class="glyphicon ' +
  193. 'glyphicon-fire" aria-hidden="true"></span> </div>' +
  194. '<div id="status" role="alert" class="statusmessage ' +
  195. 'alert alert-info"><span class="glyphicon ' +
  196. 'glyphicon-info-sign" aria-hidden="true"></span> </div>' +
  197. '<div id="errormessage" role="alert" class="statusmessage ' +
  198. 'alert alert-danger"><span class="glyphicon ' +
  199. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  200. );
  201. $.PrivateBin.Alert.init();
  202. $.PrivateBin.Alert.setCustomHandler(function(id, $element) {
  203. handlerCalled = true;
  204. return jsc.random(0, 1) ? true : $element;
  205. });
  206. functions[trigger](message);
  207. $.PrivateBin.Alert.setCustomHandler(null);
  208. return handlerCalled;
  209. }
  210. );
  211. });
  212. });