Alert.js 17 KB

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