1
0

Alert.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  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. var expected = '<div id="status">' + message + '</div>';
  13. $('body').html(
  14. '<div id="status"></div>'
  15. );
  16. $.PrivateBin.Alert.init();
  17. $.PrivateBin.Alert.showStatus(message, icon);
  18. var result = $('body').html();
  19. return expected === result;
  20. }
  21. );
  22. jsc.property(
  23. 'shows a status message (bootstrap)',
  24. jsc.array(common.jscAlnumString()),
  25. function (message) {
  26. message = message.join('');
  27. var expected = '<div id="status" role="alert" ' +
  28. 'class="statusmessage alert alert-info"><span ' +
  29. 'class="glyphicon glyphicon-info-sign" ' +
  30. 'aria-hidden="true"></span> <span>' + message + '</span></div>';
  31. $('body').html(
  32. '<div id="status" role="alert" class="statusmessage ' +
  33. 'alert alert-info hidden"><span class="glyphicon ' +
  34. 'glyphicon-info-sign" aria-hidden="true"></span> </div>'
  35. );
  36. $.PrivateBin.Alert.init();
  37. $.PrivateBin.Alert.showStatus(message);
  38. var result = $('body').html();
  39. return expected === result;
  40. }
  41. );
  42. jsc.property(
  43. 'shows a status message (bootstrap, custom icon)',
  44. jsc.array(common.jscAlnumString()),
  45. jsc.array(common.jscAlnumString()),
  46. function (icon, message) {
  47. icon = icon.join('');
  48. message = message.join('');
  49. var expected = '<div id="status" role="alert" ' +
  50. 'class="statusmessage alert alert-info"><span ' +
  51. 'class="glyphicon glyphicon-' + icon +
  52. '" aria-hidden="true"></span> <span>' + message + '</span></div>';
  53. $('body').html(
  54. '<div id="status" role="alert" class="statusmessage ' +
  55. 'alert alert-info hidden"><span class="glyphicon ' +
  56. 'glyphicon-info-sign" aria-hidden="true"></span> </div>'
  57. );
  58. $.PrivateBin.Alert.init();
  59. $.PrivateBin.Alert.showStatus(message, icon);
  60. var result = $('body').html();
  61. return expected === result;
  62. }
  63. );
  64. });
  65. describe('showError', function () {
  66. jsc.property(
  67. 'shows an error message (basic)',
  68. jsc.array(common.jscAlnumString()),
  69. jsc.array(common.jscAlnumString()),
  70. function (icon, message) {
  71. icon = icon.join('');
  72. message = message.join('');
  73. var expected = '<div id="errormessage">' + message + '</div>';
  74. $('body').html(
  75. '<div id="errormessage"></div>'
  76. );
  77. $.PrivateBin.Alert.init();
  78. $.PrivateBin.Alert.showError(message, icon);
  79. var result = $('body').html();
  80. return expected === result;
  81. }
  82. );
  83. jsc.property(
  84. 'shows an error message (bootstrap)',
  85. jsc.array(common.jscAlnumString()),
  86. jsc.array(common.jscAlnumString()),
  87. function (icon, message) {
  88. message = message.join('');
  89. var expected = '<div id="errormessage" role="alert" ' +
  90. 'class="statusmessage alert alert-danger"><span ' +
  91. 'class="glyphicon glyphicon-alert" ' +
  92. 'aria-hidden="true"></span> <span>' + message + '</span></div>';
  93. $('body').html(
  94. '<div id="errormessage" role="alert" class="statusmessage ' +
  95. 'alert alert-danger hidden"><span class="glyphicon ' +
  96. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  97. );
  98. $.PrivateBin.Alert.init();
  99. $.PrivateBin.Alert.showError(message);
  100. var result = $('body').html();
  101. return expected === result;
  102. }
  103. );
  104. jsc.property(
  105. 'shows an error message (bootstrap, custom icon)',
  106. jsc.array(common.jscAlnumString()),
  107. jsc.array(common.jscAlnumString()),
  108. function (icon, message) {
  109. icon = icon.join('');
  110. message = message.join('');
  111. var expected = '<div id="errormessage" role="alert" ' +
  112. 'class="statusmessage alert alert-danger"><span ' +
  113. 'class="glyphicon glyphicon-' + icon +
  114. '" aria-hidden="true"></span> <span>' + message + '</span></div>';
  115. $('body').html(
  116. '<div id="errormessage" role="alert" class="statusmessage ' +
  117. 'alert alert-danger hidden"><span class="glyphicon ' +
  118. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  119. );
  120. $.PrivateBin.Alert.init();
  121. $.PrivateBin.Alert.showError(message, icon);
  122. var result = $('body').html();
  123. return expected === result;
  124. }
  125. );
  126. });
  127. describe('showRemaining', function () {
  128. jsc.property(
  129. 'shows remaining time (basic)',
  130. jsc.array(common.jscAlnumString()),
  131. jsc.array(common.jscAlnumString()),
  132. 'integer',
  133. function (message, string, number) {
  134. message = message.join('');
  135. string = string.join('');
  136. var expected = '<div id="remainingtime" class="">' + string + message + number + '</div>';
  137. $('body').html(
  138. '<div id="remainingtime" class="hidden"></div>'
  139. );
  140. $.PrivateBin.Alert.init();
  141. $.PrivateBin.Alert.showRemaining(['%s' + message + '%d', string, number]);
  142. var result = $('body').html();
  143. return expected === result;
  144. }
  145. );
  146. jsc.property(
  147. 'shows remaining time (bootstrap)',
  148. jsc.array(common.jscAlnumString()),
  149. jsc.array(common.jscAlnumString()),
  150. 'integer',
  151. function (message, string, number) {
  152. message = message.join('');
  153. string = string.join('');
  154. var expected = '<div id="remainingtime" role="alert" ' +
  155. 'class="alert alert-info"><span ' +
  156. 'class="glyphicon glyphicon-fire" aria-hidden="true">' +
  157. '</span> <span>' + string + message + number + '</span></div>';
  158. $('body').html(
  159. '<div id="remainingtime" role="alert" class="hidden ' +
  160. 'alert alert-info"><span class="glyphicon ' +
  161. 'glyphicon-fire" aria-hidden="true"></span> </div>'
  162. );
  163. $.PrivateBin.Alert.init();
  164. $.PrivateBin.Alert.showRemaining(['%s' + message + '%d', string, number]);
  165. var result = $('body').html();
  166. return expected === result;
  167. }
  168. );
  169. });
  170. describe('showLoading', function () {
  171. jsc.property(
  172. 'shows a loading message (basic)',
  173. jsc.array(common.jscAlnumString()),
  174. jsc.array(common.jscAlnumString()),
  175. function (message, icon) {
  176. message = message.join('');
  177. icon = icon.join('');
  178. var defaultMessage = 'Loading…';
  179. if (message.length === 0) {
  180. message = defaultMessage;
  181. }
  182. var expected = '<div id="loadingindicator" class="">' + message + '</div>';
  183. $('body').html(
  184. '<div id="loadingindicator" class="hidden">' + defaultMessage + '</div>'
  185. );
  186. $.PrivateBin.Alert.init();
  187. $.PrivateBin.Alert.showLoading(message, icon);
  188. var result = $('body').html();
  189. return expected === result;
  190. }
  191. );
  192. jsc.property(
  193. 'shows a loading message (bootstrap)',
  194. jsc.array(common.jscAlnumString()),
  195. jsc.array(common.jscAlnumString()),
  196. function (message, icon) {
  197. message = message.join('');
  198. icon = icon.join('');
  199. var defaultMessage = 'Loading…';
  200. if (message.length === 0) {
  201. message = defaultMessage;
  202. }
  203. var expected = '<ul class="nav navbar-nav"><li ' +
  204. 'id="loadingindicator" class="navbar-text"><span ' +
  205. 'class="glyphicon glyphicon-' + icon +
  206. '" aria-hidden="true"></span> <span>' + message + '</span></li></ul>';
  207. $('body').html(
  208. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  209. 'class="navbar-text hidden"><span class="glyphicon ' +
  210. 'glyphicon-time" aria-hidden="true"></span> ' +
  211. defaultMessage + '</li></ul>'
  212. );
  213. $.PrivateBin.Alert.init();
  214. $.PrivateBin.Alert.showLoading(message, icon);
  215. var result = $('body').html();
  216. return expected === result;
  217. }
  218. );
  219. });
  220. describe('hideLoading', function () {
  221. it(
  222. 'hides the loading message',
  223. function() {
  224. $('body').html(
  225. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  226. 'class="navbar-text"><span class="glyphicon ' +
  227. 'glyphicon-time" aria-hidden="true"></span> ' +
  228. 'Loading…</li></ul>'
  229. );
  230. $('body').addClass('loading');
  231. $.PrivateBin.Alert.init();
  232. $.PrivateBin.Alert.hideLoading();
  233. assert.ok(
  234. !$('body').hasClass('loading') &&
  235. $('#loadingindicator').hasClass('hidden')
  236. );
  237. }
  238. );
  239. });
  240. describe('hideMessages', function () {
  241. it(
  242. 'hides all messages',
  243. function() {
  244. $('body').html(
  245. '<div id="status" role="alert" class="statusmessage ' +
  246. 'alert alert-info"><span class="glyphicon ' +
  247. 'glyphicon-info-sign" aria-hidden="true"></span> </div>' +
  248. '<div id="errormessage" role="alert" class="statusmessage ' +
  249. 'alert alert-danger"><span class="glyphicon ' +
  250. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  251. );
  252. $.PrivateBin.Alert.init();
  253. $.PrivateBin.Alert.hideMessages();
  254. assert.ok(
  255. $('#status').hasClass('hidden') &&
  256. $('#errormessage').hasClass('hidden')
  257. );
  258. }
  259. );
  260. });
  261. describe('setCustomHandler', function () {
  262. jsc.property(
  263. 'calls a given handler function',
  264. 'nat 3',
  265. jsc.array(common.jscAlnumString()),
  266. function (trigger, message) {
  267. message = message.join('');
  268. var handlerCalled = false,
  269. defaultMessage = 'Loading…',
  270. functions = [
  271. $.PrivateBin.Alert.showStatus,
  272. $.PrivateBin.Alert.showError,
  273. $.PrivateBin.Alert.showRemaining,
  274. $.PrivateBin.Alert.showLoading
  275. ];
  276. if (message.length === 0) {
  277. message = defaultMessage;
  278. }
  279. $('body').html(
  280. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  281. 'class="navbar-text hidden"><span class="glyphicon ' +
  282. 'glyphicon-time" aria-hidden="true"></span> ' +
  283. defaultMessage + '</li></ul>' +
  284. '<div id="remainingtime" role="alert" class="hidden ' +
  285. 'alert alert-info"><span class="glyphicon ' +
  286. 'glyphicon-fire" aria-hidden="true"></span> </div>' +
  287. '<div id="status" role="alert" class="statusmessage ' +
  288. 'alert alert-info"><span class="glyphicon ' +
  289. 'glyphicon-info-sign" aria-hidden="true"></span> </div>' +
  290. '<div id="errormessage" role="alert" class="statusmessage ' +
  291. 'alert alert-danger"><span class="glyphicon ' +
  292. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  293. );
  294. $.PrivateBin.Alert.init();
  295. $.PrivateBin.Alert.setCustomHandler(function(id, $element) {
  296. handlerCalled = true;
  297. return jsc.random(0, 1) ? true : $element;
  298. });
  299. functions[trigger](message);
  300. return handlerCalled;
  301. }
  302. );
  303. });
  304. });