Alert.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. 'use strict';
  2. var common = require('../common');
  3. describe('Alert', function () {
  4. describe('showStatus', function () {
  5. jsc.property(
  6. 'shows a status message (basic)',
  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">' + message + '</div>';
  13. $('body').html(
  14. '<div id="status"></div>'
  15. );
  16. PrivateBin.Alert.init();
  17. PrivateBin.Alert.showStatus(message, icon);
  18. const 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. const 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. const 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. const 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. const result = $('body').html();
  61. return expected === result;
  62. }
  63. );
  64. });
  65. describe('showWarning', function () {
  66. jsc.property(
  67. 'shows a warning 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. const expected = '<div id="errormessage">' + message + '</div>';
  74. $('body').html(
  75. '<div id="errormessage"></div>'
  76. );
  77. PrivateBin.Alert.init();
  78. PrivateBin.Alert.showWarning(message, icon);
  79. const result = $('body').html();
  80. return expected === result;
  81. }
  82. );
  83. jsc.property(
  84. 'shows a warning message (bootstrap)',
  85. jsc.array(common.jscAlnumString()),
  86. jsc.array(common.jscAlnumString()),
  87. function (message) {
  88. message = message.join('');
  89. const expected = '<div id="errormessage" role="alert" ' +
  90. 'class="statusmessage alert alert-danger"><span ' +
  91. 'class="glyphicon glyphicon-warning-sign" ' +
  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.showWarning(message);
  100. const result = $('body').html();
  101. return expected === result;
  102. }
  103. );
  104. jsc.property(
  105. 'shows a warning 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. const 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.showWarning(message, icon);
  122. const result = $('body').html();
  123. return expected === result;
  124. }
  125. );
  126. });
  127. describe('showError', function () {
  128. jsc.property(
  129. 'shows an error message (basic)',
  130. jsc.array(common.jscAlnumString()),
  131. jsc.array(common.jscAlnumString()),
  132. function (icon, message) {
  133. icon = icon.join('');
  134. message = message.join('');
  135. const expected = '<div id="errormessage">' + message + '</div>';
  136. $('body').html(
  137. '<div id="errormessage"></div>'
  138. );
  139. PrivateBin.Alert.init();
  140. PrivateBin.Alert.showError(message, icon);
  141. const result = $('body').html();
  142. return expected === result;
  143. }
  144. );
  145. jsc.property(
  146. 'shows an error message (bootstrap)',
  147. jsc.array(common.jscAlnumString()),
  148. jsc.array(common.jscAlnumString()),
  149. function (icon, message) {
  150. message = message.join('');
  151. const expected = '<div id="errormessage" role="alert" ' +
  152. 'class="statusmessage alert alert-danger"><span ' +
  153. 'class="glyphicon glyphicon-alert" ' +
  154. 'aria-hidden="true"></span> <span>' + message + '</span></div>';
  155. $('body').html(
  156. '<div id="errormessage" role="alert" class="statusmessage ' +
  157. 'alert alert-danger hidden"><span class="glyphicon ' +
  158. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  159. );
  160. PrivateBin.Alert.init();
  161. PrivateBin.Alert.showError(message);
  162. const result = $('body').html();
  163. return expected === result;
  164. }
  165. );
  166. jsc.property(
  167. 'shows an error message (bootstrap, custom icon)',
  168. jsc.array(common.jscAlnumString()),
  169. jsc.array(common.jscAlnumString()),
  170. function (icon, message) {
  171. icon = icon.join('');
  172. message = message.join('');
  173. const expected = '<div id="errormessage" role="alert" ' +
  174. 'class="statusmessage alert alert-danger"><span ' +
  175. 'class="glyphicon glyphicon-' + icon +
  176. '" aria-hidden="true"></span> <span>' + message + '</span></div>';
  177. $('body').html(
  178. '<div id="errormessage" role="alert" class="statusmessage ' +
  179. 'alert alert-danger hidden"><span class="glyphicon ' +
  180. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  181. );
  182. PrivateBin.Alert.init();
  183. PrivateBin.Alert.showError(message, icon);
  184. const result = $('body').html();
  185. return expected === result;
  186. }
  187. );
  188. });
  189. describe('showRemaining', function () {
  190. jsc.property(
  191. 'shows remaining time (basic)',
  192. jsc.array(common.jscAlnumString()),
  193. jsc.array(common.jscAlnumString()),
  194. 'integer',
  195. function (message, string, number) {
  196. message = message.join('');
  197. string = string.join('');
  198. const expected = '<div id="remainingtime" class="">' + string + message + number + '</div>';
  199. $('body').html(
  200. '<div id="remainingtime" class="hidden"></div>'
  201. );
  202. PrivateBin.Alert.init();
  203. PrivateBin.Alert.showRemaining(['%s' + message + '%d', string, number]);
  204. const result = $('body').html();
  205. return expected === result;
  206. }
  207. );
  208. jsc.property(
  209. 'shows remaining time (bootstrap)',
  210. jsc.array(common.jscAlnumString()),
  211. jsc.array(common.jscAlnumString()),
  212. 'integer',
  213. function (message, string, number) {
  214. message = message.join('');
  215. string = string.join('');
  216. const expected = '<div id="remainingtime" role="alert" ' +
  217. 'class="alert alert-info"><span ' +
  218. 'class="glyphicon glyphicon-fire" aria-hidden="true">' +
  219. '</span> <span>' + string + message + number + '</span></div>';
  220. $('body').html(
  221. '<div id="remainingtime" role="alert" class="hidden ' +
  222. 'alert alert-info"><span class="glyphicon ' +
  223. 'glyphicon-fire" aria-hidden="true"></span> </div>'
  224. );
  225. PrivateBin.Alert.init();
  226. PrivateBin.Alert.showRemaining(['%s' + message + '%d', string, number]);
  227. const result = $('body').html();
  228. return expected === result;
  229. }
  230. );
  231. });
  232. describe('showLoading', function () {
  233. jsc.property(
  234. 'shows a loading message (basic)',
  235. jsc.array(common.jscAlnumString()),
  236. jsc.array(common.jscAlnumString()),
  237. function (message, icon) {
  238. message = message.join('');
  239. icon = icon.join('');
  240. const defaultMessage = 'Loading…';
  241. if (message.length === 0) {
  242. message = defaultMessage;
  243. }
  244. const expected = '<div id="loadingindicator" class="">' + message + '</div>';
  245. $('body').html(
  246. '<div id="loadingindicator" class="hidden">' + defaultMessage + '</div>'
  247. );
  248. PrivateBin.Alert.init();
  249. PrivateBin.Alert.showLoading(message, icon);
  250. const result = $('body').html();
  251. return expected === result;
  252. }
  253. );
  254. jsc.property(
  255. 'shows a loading message (bootstrap)',
  256. jsc.array(common.jscAlnumString()),
  257. jsc.array(common.jscAlnumString()),
  258. function (message, icon) {
  259. message = message.join('');
  260. icon = icon.join('');
  261. const defaultMessage = 'Loading…';
  262. if (message.length === 0) {
  263. message = defaultMessage;
  264. }
  265. const expected = '<ul class="nav navbar-nav"><li ' +
  266. 'id="loadingindicator" class="navbar-text"><span ' +
  267. 'class="glyphicon glyphicon-' + icon +
  268. '" aria-hidden="true"></span> <span>' + message + '</span></li></ul>';
  269. $('body').html(
  270. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  271. 'class="navbar-text hidden"><span class="glyphicon ' +
  272. 'glyphicon-time" aria-hidden="true"></span> ' +
  273. defaultMessage + '</li></ul>'
  274. );
  275. PrivateBin.Alert.init();
  276. PrivateBin.Alert.showLoading(message, icon);
  277. const result = $('body').html();
  278. return expected === result;
  279. }
  280. );
  281. });
  282. describe('hideLoading', function () {
  283. it(
  284. 'hides the loading message',
  285. function() {
  286. $('body').html(
  287. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  288. 'class="navbar-text"><span class="glyphicon ' +
  289. 'glyphicon-time" aria-hidden="true"></span> ' +
  290. 'Loading…</li></ul>'
  291. );
  292. $('body').addClass('loading');
  293. PrivateBin.Alert.init();
  294. PrivateBin.Alert.hideLoading();
  295. assert.ok(!$('body').hasClass('loading'));
  296. assert.ok($('#loadingindicator').hasClass('hidden'));
  297. }
  298. );
  299. });
  300. describe('hideMessages', function () {
  301. it(
  302. 'hides all messages',
  303. function() {
  304. $('body').html(
  305. '<div id="status" role="alert" class="statusmessage ' +
  306. 'alert alert-info"><span class="glyphicon ' +
  307. 'glyphicon-info-sign" aria-hidden="true"></span> </div>' +
  308. '<div id="errormessage" role="alert" class="statusmessage ' +
  309. 'alert alert-danger"><span class="glyphicon ' +
  310. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  311. );
  312. PrivateBin.Alert.init();
  313. PrivateBin.Alert.hideMessages();
  314. assert.ok($('#status').hasClass('hidden'));
  315. assert.ok($('#errormessage').hasClass('hidden'));
  316. }
  317. );
  318. });
  319. describe('setCustomHandler', function () {
  320. jsc.property(
  321. 'calls a given handler function',
  322. 'nat 3',
  323. jsc.array(common.jscAlnumString()),
  324. function (trigger, message) {
  325. message = message.join('');
  326. let handlerCalled = false,
  327. defaultMessage = 'Loading…',
  328. functions = [
  329. PrivateBin.Alert.showStatus,
  330. PrivateBin.Alert.showError,
  331. PrivateBin.Alert.showRemaining,
  332. PrivateBin.Alert.showLoading
  333. ];
  334. if (message.length === 0) {
  335. message = defaultMessage;
  336. }
  337. $('body').html(
  338. '<ul class="nav navbar-nav"><li id="loadingindicator" ' +
  339. 'class="navbar-text hidden"><span class="glyphicon ' +
  340. 'glyphicon-time" aria-hidden="true"></span> ' +
  341. defaultMessage + '</li></ul>' +
  342. '<div id="remainingtime" role="alert" class="hidden ' +
  343. 'alert alert-info"><span class="glyphicon ' +
  344. 'glyphicon-fire" aria-hidden="true"></span> </div>' +
  345. '<div id="status" role="alert" class="statusmessage ' +
  346. 'alert alert-info"><span class="glyphicon ' +
  347. 'glyphicon-info-sign" aria-hidden="true"></span> </div>' +
  348. '<div id="errormessage" role="alert" class="statusmessage ' +
  349. 'alert alert-danger"><span class="glyphicon ' +
  350. 'glyphicon-alert" aria-hidden="true"></span> </div>'
  351. );
  352. PrivateBin.Alert.init();
  353. PrivateBin.Alert.setCustomHandler(function(id, $element) {
  354. handlerCalled = true;
  355. return jsc.random(0, 1) ? true : $element;
  356. });
  357. functions[trigger](message);
  358. PrivateBin.Alert.setCustomHandler(null);
  359. return handlerCalled;
  360. }
  361. );
  362. });
  363. });