core.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736
  1. window.onload = function() {
  2. // ajax
  3. App.Ajax.request({
  4. type: 'GET',
  5. url: '/assets/tests/ajax-test.json',
  6. success: function (data) {
  7. test( "ajax get 200", function() {
  8. ok( true, "File found!" );
  9. equal( data.success, true, "content parsable and ok!" );
  10. equal( data.success2, undefined, "content parsable and ok!" );
  11. });
  12. },
  13. error: function (data) {
  14. test( "ajax", function() {
  15. ok( false, "Failed!" );
  16. });
  17. }
  18. });
  19. // ajax queueing
  20. App.Ajax.request({
  21. type: 'GET',
  22. url: '/tests/wait/2',
  23. queue: true,
  24. success: function (data) {
  25. test( "ajax - queue - ajax get 200 1/2", function() {
  26. // check queue
  27. ok( !window.testAjax, 'ajax - queue - check queue' );
  28. window.testAjax = true;
  29. equal( data.success, true, "ajax - queue - content parsable and ok!" );
  30. equal( data.success2, undefined, "ajax - queue - content parsable and ok!" );
  31. });
  32. },
  33. error: function (data) {
  34. test( "ajax", function() {
  35. ok( false, "Failed!" );
  36. });
  37. }
  38. });
  39. App.Ajax.request({
  40. type: 'GET',
  41. url: '/tests/wait/1',
  42. queue: true,
  43. success: function (data) {
  44. test( "ajax - queue - ajax get 200 2/2", function() {
  45. // check queue
  46. ok( window.testAjax, 'ajax - queue - check queue' )
  47. window.testAjax = undefined;
  48. equal( data.success, true, "content parsable and ok!" );
  49. equal( data.success2, undefined, "content parsable and ok!" );
  50. });
  51. },
  52. error: function (data) {
  53. test( "ajax", function() {
  54. ok( false, "Failed!" );
  55. });
  56. }
  57. });
  58. // ajax parallel
  59. App.Ajax.request({
  60. type: 'GET',
  61. url: '/tests/wait/2',
  62. success: function (data) {
  63. test( "ajax - parallel - ajax get 200 1/2", function() {
  64. // check queue
  65. ok( window.testAjaxQ, 'ajax - parallel - check queue' );
  66. window.testAjaxQ = undefined;
  67. equal( data.success, true, "ajax - parallel - content parsable and ok!" );
  68. equal( data.success2, undefined, "ajax - parallel - content parsable and ok!" );
  69. });
  70. },
  71. error: function (data) {
  72. test( "ajax", function() {
  73. ok( false, "Failed!" );
  74. });
  75. }
  76. });
  77. App.Ajax.request({
  78. type: 'GET',
  79. url: '/tests/wait/1',
  80. success: function (data) {
  81. test( "ajax - parallel - ajax get 200 2/2", function() {
  82. // check queue
  83. ok( !window.testAjaxQ, 'ajax - parallel - check queue' )
  84. window.testAjaxQ = true;
  85. equal( data.success, true, "content parsable and ok!" );
  86. equal( data.success2, undefined, "content parsable and ok!" );
  87. });
  88. },
  89. error: function (data) {
  90. test( "ajax", function() {
  91. ok( false, "Failed!" );
  92. });
  93. }
  94. });
  95. // delay
  96. window.testDelay1 = false
  97. App.Delay.set( function() {
  98. test( "delay - test 1 - 1/3 - should not be executed, will be reset by next set()", function() {
  99. // check
  100. ok( false, 'delay - test 1 - 1/3 - should not be executed, will be reset by next set()' );
  101. window.testDelay1 = true;
  102. });
  103. },
  104. 1000,
  105. 'delay-test1',
  106. 'level'
  107. );
  108. App.Delay.set( function() {
  109. test( "delay - test 1 - 2/3", function() {
  110. // check
  111. ok( !window.testDelay1, 'delay - test 1 - 2/3' );
  112. window.testDelay1 = 1;
  113. });
  114. },
  115. 2000,
  116. 'delay-test1',
  117. 'level'
  118. );
  119. App.Delay.set( function() {
  120. test( "delay - test 1 - 2/3", function() {
  121. // check
  122. ok( window.testDelay1, 'delay - test 1 - 2/3' );
  123. window.testDelay1 = false;
  124. });
  125. },
  126. 3000,
  127. 'delay-test1-verify',
  128. 'level'
  129. );
  130. App.Delay.set( function() {
  131. test( "delay - test 2 - 1/3", function() {
  132. // check
  133. ok( !window.testDelay2, 'delay - test 2 - 1/3' );
  134. window.testDelay2 = 1;
  135. });
  136. },
  137. 2000
  138. );
  139. App.Delay.set( function() {
  140. test( "delay - test 2 - 2/3", function() {
  141. // check
  142. ok( !window.testDelay2, 'delay - test 2 - 2/3' );
  143. });
  144. },
  145. 1000
  146. );
  147. App.Delay.set( function() {
  148. test( "delay - test 2 - 3/3", function() {
  149. // check
  150. ok( window.testDelay2, 'delay - test 2 - 3/3' );
  151. });
  152. },
  153. 3000
  154. );
  155. window.testDelay3 = 1;
  156. App.Delay.set( function() {
  157. test( "delay - test 3 - 1/1", function() {
  158. // check
  159. ok( false, 'delay - test 3 - 1/1' );
  160. });
  161. },
  162. 1000,
  163. 'delay3'
  164. );
  165. App.Delay.clear('delay3')
  166. App.Delay.set( function() {
  167. test( "delay - test 4 - 1/1", function() {
  168. // check
  169. ok( false, 'delay - test 4 - 1/1' );
  170. });
  171. },
  172. 1000,
  173. undefined,
  174. 'Page'
  175. );
  176. App.Delay.clearLevel('Page')
  177. // interval 1
  178. window.testInterval1 = 1
  179. App.Interval.set( function() {
  180. window.testInterval1 += 1;
  181. },
  182. 2000,
  183. 'interval-test1'
  184. );
  185. App.Delay.set( function() {
  186. test( "interval - test 1 - 1/2", function() {
  187. // check
  188. equal( window.testInterval1, 4, 'interval - test 1' );
  189. App.Interval.clear('interval-test1')
  190. });
  191. },
  192. 5200
  193. );
  194. App.Delay.set( function() {
  195. test( "interval - test 1 - 2/2", function() {
  196. // check
  197. equal( window.testInterval1, 4, 'interval - test after clear' );
  198. });
  199. },
  200. 6500
  201. );
  202. // interval 2
  203. window.testInterval2 = 1
  204. App.Interval.set( function() {
  205. window.testInterval2 += 1;
  206. },
  207. 2000,
  208. undefined,
  209. 'someLevel'
  210. );
  211. App.Delay.set( function() {
  212. test( "interval - test 2 - 1/2", function() {
  213. // check
  214. equal( window.testInterval2, 4, 'interval - test 2' );
  215. App.Interval.clearLevel('someLevel')
  216. });
  217. },
  218. 5200
  219. );
  220. App.Delay.set( function() {
  221. test( "interval - test 2 - 2/2", function() {
  222. // check
  223. equal( window.testInterval2, 4, 'interval - test 2 - after clear' );
  224. });
  225. },
  226. 6900
  227. );
  228. // i18n
  229. test( "i18n", function() {
  230. // de
  231. App.i18n.set('de-de');
  232. var translated = App.i18n.translateContent('yes');
  233. equal( translated, 'ja', 'de-de - yes / ja translated correctly' );
  234. translated = App.i18n.translatePlain('yes');
  235. equal( translated, 'ja', 'de-de - yes / ja translated correctly' );
  236. translated = App.i18n.translateInline('yes');
  237. equal( translated, 'ja', 'de-de - yes / ja translated correctly' );
  238. translated = App.i18n.translateContent('%s ago', 123);
  239. equal( translated, 'vor 123', 'de-de - %s' );
  240. translated = App.i18n.translateContent('%s ago', '<b>quote</b>');
  241. equal( translated, 'vor &lt;b&gt;quote&lt;/b&gt;', 'de-de - %s - quote' );
  242. translated = App.i18n.translateContent('%s %s test', 123, 'xxx |B|');
  243. equal( translated, '123 xxx |B| test', 'de-de - %s %s' );
  244. translated = App.i18n.translateContent('|%s| %s test', 123, 'xxx');
  245. equal( translated, '<b>123</b> xxx test', 'de-de - *%s* %s' );
  246. translated = App.i18n.translateContent('||%s|| %s test', 123, 'xxx');
  247. equal( translated, '<i>123</i> xxx test', 'de-de - *%s* %s' );
  248. translated = App.i18n.translateContent('_%s_ %s test', 123, 'xxx');
  249. equal( translated, '<u>123</u> xxx test', 'de-de - _%s_ %s' );
  250. translated = App.i18n.translateContent('§%s§ %s test', 123, 'xxx');
  251. equal( translated, '<kbd>123</kbd> xxx test', 'de-de - §%s§ %s' );
  252. translated = App.i18n.translateContent('//%s// %s test', 123, 'xxx');
  253. equal( translated, '<del>123</del> xxx test', 'de-de - //%s// %s' );
  254. translated = App.i18n.translateContent('\'%s\' %s test', 123, 'xxx');
  255. equal( translated, '&#39;123&#39; xxx test', 'de-de - \'%s\' %s' );
  256. translated = App.i18n.translateContent('<test&now>//*äöüß');
  257. equal( translated, '&lt;test&amp;now&gt;//*äöüß', 'de - <test&now>//*äöüß' );
  258. var time_local = new Date();
  259. var offset = time_local.getTimezoneOffset();
  260. var timestamp = App.i18n.translateTimestamp('2012-11-06T21:07:24Z', offset);
  261. equal( timestamp, '06.11.2012 21:07', 'de-de - timestamp translated correctly' );
  262. // en
  263. App.i18n.set('en-us');
  264. translated = App.i18n.translateContent('yes');
  265. equal( translated, 'yes', 'en-us - yes translated correctly' );
  266. translated = App.i18n.translatePlain('yes');
  267. equal( translated, 'yes', 'en-us - yes translated correctly' );
  268. translated = App.i18n.translateInline('yes');
  269. equal( translated, 'yes', 'en-us - yes translated correctly' );
  270. translated = App.i18n.translateContent('%s ago', 123);
  271. equal( translated, '123 ago', 'en-us - %s' );
  272. translated = App.i18n.translateContent('%s ago', '<b>quote</b>');
  273. equal( translated, '&lt;b&gt;quote&lt;/b&gt; ago', 'en-us - %s - qupte' );
  274. translated = App.i18n.translateContent('%s %s test', 123, 'xxx');
  275. equal( translated, '123 xxx test', 'en-us - %s %s' );
  276. translated = App.i18n.translateContent('|%s| %s test', 123, 'xxx |B|');
  277. equal( translated, '<b>123</b> xxx |B| test', 'en-us - *%s* %s' );
  278. translated = App.i18n.translateContent('||%s|| %s test', 123, 'xxx');
  279. equal( translated, '<i>123</i> xxx test', 'en-us - *%s* %s' );
  280. translated = App.i18n.translateContent('_%s_ %s test', 123, 'xxx');
  281. equal( translated, '<u>123</u> xxx test', 'en-us - _%s_ %s' );
  282. translated = App.i18n.translateContent('§%s§ %s test', 123, 'xxx');
  283. equal( translated, '<kbd>123</kbd> xxx test', 'en-us - §%s§ %s' );
  284. translated = App.i18n.translateContent('Here you can search for ticket, customers and organizations. Use the wildcard §*§ to find everything. E. g. §smi*§ or §rosent*l§. You also can use ||double quotes|| for searching phrases §"some phrase"§.');
  285. equal( translated, 'Here you can search for ticket, customers and organizations. Use the wildcard <kbd>*</kbd> to find everything. E. g. <kbd>smi*</kbd> or <kbd>rosent*l</kbd>. You also can use <i>double quotes</i> for searching phrases <kbd>&quot;some phrase&quot;</kbd>.', 'en-us - §§ §§ §§ || §§' );
  286. translated = App.i18n.translateContent('//%s// %s test', 123, 'xxx');
  287. equal( translated, '<del>123</del> xxx test', 'en-us - //%s// %s' );
  288. translated = App.i18n.translateContent('\'%s\' %s test', 123, 'xxx');
  289. equal( translated, '&#39;123&#39; xxx test', 'en-us - \'%s\' %s' );
  290. translated = App.i18n.translateContent('<test&now>');
  291. equal( translated, '&lt;test&amp;now&gt;', 'en-us - <test&now>' );
  292. timestamp = App.i18n.translateTimestamp('2012-11-06T21:07:24Z', offset);
  293. equal( timestamp, '11/06/2012 21:07', 'en - timestamp translated correctly' );
  294. // locale alias test
  295. // de
  296. App.i18n.set('de');
  297. var translated = App.i18n.translateContent('yes');
  298. equal( translated, 'ja', 'de - yes / ja translated correctly' );
  299. // locale detection test
  300. // de-ch
  301. App.i18n.set('de-ch');
  302. var translated = App.i18n.translateContent('yes');
  303. equal( translated, 'ja', 'de - yes / ja translated correctly' );
  304. });
  305. // events
  306. test( "events simple", function() {
  307. // single bind
  308. App.Event.bind( 'test1', function(data) {
  309. ok( true, 'event received - single bind');
  310. equal( data.success, true, 'event received - data ok - single bind');
  311. });
  312. App.Event.bind( 'test2', function(data) {
  313. ok( false, 'should not be triggered - single bind');
  314. });
  315. App.Event.trigger( 'test1', { success: true } );
  316. App.Event.unbind( 'test1')
  317. App.Event.bind( 'test1', function(data) {
  318. ok( false, 'should not be triggered - single bind');
  319. });
  320. App.Event.unbind( 'test1');
  321. App.Event.trigger( 'test1', { success: true } );
  322. // multi bind
  323. App.Event.bind( 'test1-1 test1-2', function(data) {
  324. ok( true, 'event received - multi bind');
  325. equal( data.success, true, 'event received - data ok - multi bind');
  326. });
  327. App.Event.bind( 'test1-3', function(data) {
  328. ok( false, 'should not be triggered - multi bind');
  329. });
  330. App.Event.trigger( 'test1-2', { success: true } );
  331. App.Event.unbind( 'test1-1')
  332. App.Event.bind( 'test1-1', function(data) {
  333. ok( false, 'should not be triggered - multi bind');
  334. });
  335. App.Event.trigger( 'test1-2', { success: true } );
  336. });
  337. test( "events level", function() {
  338. // bind with level
  339. App.Event.bind( 'test3', function(data) {
  340. ok( false, 'should not be triggered!');
  341. }, 'test-level' );
  342. // unbind with level
  343. App.Event.unbindLevel( 'test-level' );
  344. // bind with level
  345. App.Event.bind( 'test3', function(data) {
  346. ok( true, 'event received');
  347. equal( data.success, true, 'event received - data ok - level bind');
  348. }, 'test-level' );
  349. App.Event.trigger( 'test3', { success: true} );
  350. });
  351. // session store
  352. test( "session store", function() {
  353. var tests = [
  354. 'some 123äöüßadajsdaiosjdiaoidj',
  355. { key: 123 },
  356. { key1: { key1: [1,2,3,4] }, key2: [1,2,'äöüß'] },
  357. ];
  358. // write/get
  359. App.SessionStorage.clear()
  360. _.each(tests, function(test) {
  361. App.SessionStorage.set( 'test1', test );
  362. var item = App.SessionStorage.get( 'test1' );
  363. deepEqual( test, item, 'write/get - compare stored and actual data' )
  364. });
  365. // undefined/get
  366. App.SessionStorage.clear()
  367. _.each(tests, function(test) {
  368. var item = App.SessionStorage.get( 'test1' );
  369. deepEqual( undefined, item, 'undefined/get - compare not existing data and actual data' )
  370. });
  371. // write/get/delete
  372. var tests = [
  373. { key: 'test1', value: 'some 123äöüßadajsdaiosjdiaoidj' },
  374. { key: 123, value: { a: 123, b: 'sdaad' } },
  375. { key: '123äöüß', value: { key1: [1,2,3,4] }, key2: [1,2,'äöüß'] },
  376. ];
  377. App.SessionStorage.clear()
  378. _.each(tests, function(test) {
  379. App.SessionStorage.set( test.key, test.value );
  380. });
  381. _.each(tests, function(test) {
  382. var item = App.SessionStorage.get( test.key );
  383. deepEqual( test.value, item, 'write/get/delete - compare stored and actual data' );
  384. App.SessionStorage.delete( test.key );
  385. item = App.SessionStorage.get( test.key );
  386. deepEqual( undefined, item, 'write/get/delete - compare deleted data' );
  387. });
  388. });
  389. // config
  390. test( "config", function() {
  391. // simple
  392. var tests = [
  393. { key: 'test1', value: 'some 123äöüßadajsdaiosjdiaoidj' },
  394. { key: 123, value: { a: 123, b: 'sdaad' } },
  395. { key: '123äöüß', value: { key1: [1,2,3,4] }, key2: [1,2,'äöüß'] },
  396. ];
  397. _.each(tests, function(test) {
  398. App.Config.set( test.key, test.value )
  399. });
  400. _.each(tests, function(test) {
  401. var item = App.Config.get( test.key )
  402. deepEqual( item, test.value, 'set/get tests' );
  403. });
  404. // group
  405. var test_groups = [
  406. { key: 'test2', value: [ 'some 123äöüßadajsdaiosjdiaoidj' ] },
  407. { key: 1234, value: { a: 123, b: 'sdaad' } },
  408. { key: '123äöüß', value: { key1: [1,2,3,4,5,6] }, key2: [1,2,'äöüß'] },
  409. ];
  410. var group = {};
  411. _.each(test_groups, function(test) {
  412. App.Config.set( test.key, test.value, 'group1' );
  413. group[test.key] = test.value
  414. });
  415. // verify whole group
  416. var item = App.Config.get( 'group1' );
  417. deepEqual( item, group, 'group - verify group hash');
  418. // verify each setting
  419. _.each(test_groups, function(test) {
  420. var item = App.Config.get( test.key, 'group1' );
  421. deepEqual( item, test.value, 'group set/get tests' );
  422. });
  423. });
  424. // clone
  425. test( "clone", function() {
  426. // simple
  427. var tests = [
  428. {
  429. key1: 123,
  430. key2: 1234
  431. },
  432. {
  433. key1: 123,
  434. key2: '1234'
  435. },
  436. [1,2,4,5,6],
  437. 'some string äöü',
  438. {
  439. key1: 123,
  440. key2: null,
  441. },
  442. {
  443. key1: 123,
  444. key2: undefined,
  445. },
  446. {
  447. key1: 123,
  448. key2: undefined,
  449. key3: {
  450. keya: 'some',
  451. keyb: undefined,
  452. },
  453. key4: ['a', 'b', null, false, true, undefined],
  454. },
  455. undefined,
  456. false,
  457. true,
  458. null,
  459. {
  460. key1: 123,
  461. key2: undefined,
  462. key3: {
  463. keya: 'some',
  464. keyb: undefined,
  465. },
  466. key4: ['a', 'b', {
  467. a: 123,
  468. b: [1,5,7,8,1213,1231321]
  469. }],
  470. },
  471. ];
  472. _.each(tests, function(test) {
  473. var item = clone( test )
  474. deepEqual( item, test, 'clone' );
  475. });
  476. // complex test
  477. var source = [
  478. { name: 'some name' },
  479. { name: 'some name2' },
  480. { fn: function() { return 'test' } },
  481. ]
  482. var reference = [
  483. { name: 'some name' },
  484. { name: 'some name2' },
  485. { fn: undefined },
  486. ]
  487. var result = clone( source )
  488. // modify source later, should not have any result
  489. source[0].name = 'some new name'
  490. deepEqual( result, reference, 'clone' );
  491. // full test
  492. var source = [
  493. { name: 'some name' },
  494. { name: 'some name2' },
  495. { fn: function a() { return 'test' } },
  496. ]
  497. var reference = [
  498. { name: 'some name' },
  499. { name: 'some name2' },
  500. { fn: function a() { return 'test' } },
  501. ]
  502. var result = clone( source, true )
  503. // modify source later, should not have any result
  504. source[0].name = 'some new name'
  505. source[2].fn = 'some new name'
  506. deepEqual( result[0], reference[0], 'clone full' );
  507. deepEqual( result[1], reference[1], 'clone full' );
  508. equal( typeof reference[2].fn, 'function')
  509. equal( typeof result[2].fn, 'function')
  510. equal( reference[2].fn(), 'test')
  511. equal( result[2].fn(), 'test')
  512. });
  513. // diff
  514. test( "diff", function() {
  515. // simple
  516. var tests = [
  517. {
  518. object1: {
  519. key1: 123,
  520. key2: 1234
  521. },
  522. object2: {
  523. key1: 123,
  524. key2: 1235
  525. },
  526. result: {
  527. key2: 1235
  528. }
  529. },
  530. {
  531. object1: {
  532. key1: 123,
  533. key2: 123
  534. },
  535. object2: {
  536. key1: 123,
  537. key2: 123
  538. },
  539. result: {}
  540. },
  541. {
  542. object1: {
  543. key1: 123,
  544. key2: 123
  545. },
  546. object2: {
  547. key1: 123,
  548. key2: 123
  549. },
  550. result: {}
  551. },
  552. {
  553. object1: {
  554. key1: 123,
  555. key2: [1,3,5]
  556. },
  557. object2: {
  558. key1: 123,
  559. key2: 123
  560. },
  561. result: {
  562. key2: 123
  563. }
  564. },
  565. {
  566. object1: {
  567. key1: 123,
  568. key2: [1,3,5]
  569. },
  570. object2: {
  571. key1: 123,
  572. },
  573. result: {}
  574. },
  575. {
  576. object1: {
  577. key1: 123,
  578. },
  579. object2: {
  580. key1: 123,
  581. key2: 124
  582. },
  583. result: {}
  584. },
  585. ];
  586. _.each(tests, function(test) {
  587. var item = difference( test.object1, test.object2 )
  588. deepEqual( item, test.result, 'tests simple' );
  589. });
  590. });
  591. // auth
  592. App.Auth.login({
  593. data: {
  594. username: 'not_existing',
  595. password: 'not_existing',
  596. },
  597. success: function(data) {
  598. test( "auth - not existing user", function() {
  599. ok( false, 'ok' )
  600. })
  601. },
  602. error: function() {
  603. test( "auth - not existing user", function() {
  604. ok( true, 'ok' )
  605. authWithSession();
  606. })
  607. }
  608. });
  609. var authWithSession = function() {
  610. App.Auth.login({
  611. data: {
  612. username: 'nicole.braun@zammad.org',
  613. password: 'test',
  614. },
  615. success: function(data) {
  616. test( "auth - existing user", function() {
  617. ok( true, 'authenticated')
  618. var user = App.Session.get('login');
  619. equal( 'nicole.braun@zammad.org', user, 'session login' )
  620. })
  621. },
  622. error: function() {
  623. test( "auth - existing user", function() {
  624. ok( false, 'not authenticated' )
  625. })
  626. }
  627. });
  628. }
  629. }