Alert.js 14 KB

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