core.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721
  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 %s test', 123, 'xxx');
  241. equal( translated, '123 xxx test', 'de-de - %s %s' );
  242. translated = App.i18n.translateContent('|%s| %s test', 123, 'xxx');
  243. equal( translated, '<b>123</b> xxx test', 'de-de - *%s* %s' );
  244. translated = App.i18n.translateContent('||%s|| %s test', 123, 'xxx');
  245. equal( translated, '<i>123</i> xxx test', 'de-de - *%s* %s' );
  246. translated = App.i18n.translateContent('_%s_ %s test', 123, 'xxx');
  247. equal( translated, '<u>123</u> xxx test', 'de-de - _%s_ %s' );
  248. translated = App.i18n.translateContent('§%s§ %s test', 123, 'xxx');
  249. equal( translated, '<kbd>123</kbd> xxx test', 'de-de - §%s§ %s' );
  250. translated = App.i18n.translateContent('\'%s\' %s test', 123, 'xxx');
  251. equal( translated, '&#39;123&#39; xxx test', 'de-de - \'%s\' %s' );
  252. translated = App.i18n.translateContent('<test&now>//*äöüß');
  253. equal( translated, '&lt;test&amp;now&gt;//*äöüß', 'de - <test&now>//*äöüß' );
  254. var time_local = new Date();
  255. var offset = time_local.getTimezoneOffset();
  256. var timestamp = App.i18n.translateTimestamp('2012-11-06T21:07:24Z', offset);
  257. equal( timestamp, '06.11.2012 21:07', 'de-de - timestamp translated correctly' );
  258. // en
  259. App.i18n.set('en-us');
  260. translated = App.i18n.translateContent('yes');
  261. equal( translated, 'yes', 'en-us - yes translated correctly' );
  262. translated = App.i18n.translatePlain('yes');
  263. equal( translated, 'yes', 'en-us - yes translated correctly' );
  264. translated = App.i18n.translateInline('yes');
  265. equal( translated, 'yes', 'en-us - yes translated correctly' );
  266. translated = App.i18n.translateContent('%s ago', 123);
  267. equal( translated, '123 ago', 'en-us - %s' );
  268. translated = App.i18n.translateContent('%s %s test', 123, 'xxx');
  269. equal( translated, '123 xxx test', 'en-us - %s %s' );
  270. translated = App.i18n.translateContent('|%s| %s test', 123, 'xxx');
  271. equal( translated, '<b>123</b> xxx test', 'en-us - *%s* %s' );
  272. translated = App.i18n.translateContent('||%s|| %s test', 123, 'xxx');
  273. equal( translated, '<i>123</i> xxx test', 'en-us - *%s* %s' );
  274. translated = App.i18n.translateContent('_%s_ %s test', 123, 'xxx');
  275. equal( translated, '<u>123</u> xxx test', 'en-us - _%s_ %s' );
  276. translated = App.i18n.translateContent('§%s§ %s test', 123, 'xxx');
  277. equal( translated, '<kbd>123</kbd> xxx test', 'en-us - §%s§ %s' );
  278. translated = App.i18n.translateContent('\'%s\' %s test', 123, 'xxx');
  279. equal( translated, '&#39;123&#39; xxx test', 'en-us - \'%s\' %s' );
  280. translated = App.i18n.translateContent('<test&now>');
  281. equal( translated, '&lt;test&amp;now&gt;', 'en-us - <test&now>' );
  282. timestamp = App.i18n.translateTimestamp('2012-11-06T21:07:24Z', offset);
  283. equal( timestamp, '11/06/2012 21:07', 'en - timestamp translated correctly' );
  284. // locale alias test
  285. // de
  286. App.i18n.set('de');
  287. var translated = App.i18n.translateContent('yes');
  288. equal( translated, 'ja', 'de - yes / ja translated correctly' );
  289. // locale detection test
  290. // de-ch
  291. App.i18n.set('de-ch');
  292. var translated = App.i18n.translateContent('yes');
  293. equal( translated, 'ja', 'de - yes / ja translated correctly' );
  294. });
  295. // events
  296. test( "events simple", function() {
  297. // single bind
  298. App.Event.bind( 'test1', function(data) {
  299. ok( true, 'event received - single bind');
  300. equal( data.success, true, 'event received - data ok - single bind');
  301. });
  302. App.Event.bind( 'test2', function(data) {
  303. ok( false, 'should not be triggered - single bind');
  304. });
  305. App.Event.trigger( 'test1', { success: true } );
  306. App.Event.unbind( 'test1')
  307. App.Event.bind( 'test1', function(data) {
  308. ok( false, 'should not be triggered - single bind');
  309. });
  310. App.Event.unbind( 'test1');
  311. App.Event.trigger( 'test1', { success: true } );
  312. // multi bind
  313. App.Event.bind( 'test1-1 test1-2', function(data) {
  314. ok( true, 'event received - multi bind');
  315. equal( data.success, true, 'event received - data ok - multi bind');
  316. });
  317. App.Event.bind( 'test1-3', function(data) {
  318. ok( false, 'should not be triggered - multi bind');
  319. });
  320. App.Event.trigger( 'test1-2', { success: true } );
  321. App.Event.unbind( 'test1-1')
  322. App.Event.bind( 'test1-1', function(data) {
  323. ok( false, 'should not be triggered - multi bind');
  324. });
  325. App.Event.trigger( 'test1-2', { success: true } );
  326. });
  327. test( "events level", function() {
  328. // bind with level
  329. App.Event.bind( 'test3', function(data) {
  330. ok( false, 'should not be triggered!');
  331. }, 'test-level' );
  332. // unbind with level
  333. App.Event.unbindLevel( 'test-level' );
  334. // bind with level
  335. App.Event.bind( 'test3', function(data) {
  336. ok( true, 'event received');
  337. equal( data.success, true, 'event received - data ok - level bind');
  338. }, 'test-level' );
  339. App.Event.trigger( 'test3', { success: true} );
  340. });
  341. // session store
  342. test( "session store", function() {
  343. var tests = [
  344. 'some 123äöüßadajsdaiosjdiaoidj',
  345. { key: 123 },
  346. { key1: { key1: [1,2,3,4] }, key2: [1,2,'äöüß'] },
  347. ];
  348. // write/get
  349. App.SessionStorage.clear()
  350. _.each(tests, function(test) {
  351. App.SessionStorage.set( 'test1', test );
  352. var item = App.SessionStorage.get( 'test1' );
  353. deepEqual( test, item, 'write/get - compare stored and actual data' )
  354. });
  355. // undefined/get
  356. App.SessionStorage.clear()
  357. _.each(tests, function(test) {
  358. var item = App.SessionStorage.get( 'test1' );
  359. deepEqual( undefined, item, 'undefined/get - compare not existing data and actual data' )
  360. });
  361. // write/get/delete
  362. var tests = [
  363. { key: 'test1', value: 'some 123äöüßadajsdaiosjdiaoidj' },
  364. { key: 123, value: { a: 123, b: 'sdaad' } },
  365. { key: '123äöüß', value: { key1: [1,2,3,4] }, key2: [1,2,'äöüß'] },
  366. ];
  367. App.SessionStorage.clear()
  368. _.each(tests, function(test) {
  369. App.SessionStorage.set( test.key, test.value );
  370. });
  371. _.each(tests, function(test) {
  372. var item = App.SessionStorage.get( test.key );
  373. deepEqual( test.value, item, 'write/get/delete - compare stored and actual data' );
  374. App.SessionStorage.delete( test.key );
  375. item = App.SessionStorage.get( test.key );
  376. deepEqual( undefined, item, 'write/get/delete - compare deleted data' );
  377. });
  378. });
  379. // config
  380. test( "config", function() {
  381. // simple
  382. var tests = [
  383. { key: 'test1', value: 'some 123äöüßadajsdaiosjdiaoidj' },
  384. { key: 123, value: { a: 123, b: 'sdaad' } },
  385. { key: '123äöüß', value: { key1: [1,2,3,4] }, key2: [1,2,'äöüß'] },
  386. ];
  387. _.each(tests, function(test) {
  388. App.Config.set( test.key, test.value )
  389. });
  390. _.each(tests, function(test) {
  391. var item = App.Config.get( test.key )
  392. deepEqual( item, test.value, 'set/get tests' );
  393. });
  394. // group
  395. var test_groups = [
  396. { key: 'test2', value: [ 'some 123äöüßadajsdaiosjdiaoidj' ] },
  397. { key: 1234, value: { a: 123, b: 'sdaad' } },
  398. { key: '123äöüß', value: { key1: [1,2,3,4,5,6] }, key2: [1,2,'äöüß'] },
  399. ];
  400. var group = {};
  401. _.each(test_groups, function(test) {
  402. App.Config.set( test.key, test.value, 'group1' );
  403. group[test.key] = test.value
  404. });
  405. // verify whole group
  406. var item = App.Config.get( 'group1' );
  407. deepEqual( item, group, 'group - verify group hash');
  408. // verify each setting
  409. _.each(test_groups, function(test) {
  410. var item = App.Config.get( test.key, 'group1' );
  411. deepEqual( item, test.value, 'group set/get tests' );
  412. });
  413. });
  414. // clone
  415. test( "clone", function() {
  416. // simple
  417. var tests = [
  418. {
  419. key1: 123,
  420. key2: 1234
  421. },
  422. {
  423. key1: 123,
  424. key2: '1234'
  425. },
  426. [1,2,4,5,6],
  427. 'some string äöü',
  428. {
  429. key1: 123,
  430. key2: null,
  431. },
  432. {
  433. key1: 123,
  434. key2: undefined,
  435. },
  436. {
  437. key1: 123,
  438. key2: undefined,
  439. key3: {
  440. keya: 'some',
  441. keyb: undefined,
  442. },
  443. key4: ['a', 'b', null, false, true, undefined],
  444. },
  445. undefined,
  446. false,
  447. true,
  448. null,
  449. {
  450. key1: 123,
  451. key2: undefined,
  452. key3: {
  453. keya: 'some',
  454. keyb: undefined,
  455. },
  456. key4: ['a', 'b', {
  457. a: 123,
  458. b: [1,5,7,8,1213,1231321]
  459. }],
  460. },
  461. ];
  462. _.each(tests, function(test) {
  463. var item = clone( test )
  464. deepEqual( item, test, 'clone' );
  465. });
  466. // complex test
  467. var source = [
  468. { name: 'some name' },
  469. { name: 'some name2' },
  470. { fn: function() { return 'test' } },
  471. ]
  472. var reference = [
  473. { name: 'some name' },
  474. { name: 'some name2' },
  475. { fn: undefined },
  476. ]
  477. var result = clone( source )
  478. // modify source later, should not have any result
  479. source[0].name = 'some new name'
  480. deepEqual( result, reference, 'clone' );
  481. // full test
  482. var source = [
  483. { name: 'some name' },
  484. { name: 'some name2' },
  485. { fn: function a() { return 'test' } },
  486. ]
  487. var reference = [
  488. { name: 'some name' },
  489. { name: 'some name2' },
  490. { fn: function a() { return 'test' } },
  491. ]
  492. var result = clone( source, true )
  493. // modify source later, should not have any result
  494. source[0].name = 'some new name'
  495. source[2].fn = 'some new name'
  496. deepEqual( result[0], reference[0], 'clone full' );
  497. deepEqual( result[1], reference[1], 'clone full' );
  498. equal( typeof reference[2].fn, 'function')
  499. equal( typeof result[2].fn, 'function')
  500. equal( reference[2].fn(), 'test')
  501. equal( result[2].fn(), 'test')
  502. });
  503. // diff
  504. test( "diff", function() {
  505. // simple
  506. var tests = [
  507. {
  508. object1: {
  509. key1: 123,
  510. key2: 1234
  511. },
  512. object2: {
  513. key1: 123,
  514. key2: 1235
  515. },
  516. result: {
  517. key2: 1235
  518. }
  519. },
  520. {
  521. object1: {
  522. key1: 123,
  523. key2: 123
  524. },
  525. object2: {
  526. key1: 123,
  527. key2: 123
  528. },
  529. result: {}
  530. },
  531. {
  532. object1: {
  533. key1: 123,
  534. key2: 123
  535. },
  536. object2: {
  537. key1: 123,
  538. key2: 123
  539. },
  540. result: {}
  541. },
  542. {
  543. object1: {
  544. key1: 123,
  545. key2: [1,3,5]
  546. },
  547. object2: {
  548. key1: 123,
  549. key2: 123
  550. },
  551. result: {
  552. key2: 123
  553. }
  554. },
  555. {
  556. object1: {
  557. key1: 123,
  558. key2: [1,3,5]
  559. },
  560. object2: {
  561. key1: 123,
  562. },
  563. result: {}
  564. },
  565. {
  566. object1: {
  567. key1: 123,
  568. },
  569. object2: {
  570. key1: 123,
  571. key2: 124
  572. },
  573. result: {}
  574. },
  575. ];
  576. _.each(tests, function(test) {
  577. var item = difference( test.object1, test.object2 )
  578. deepEqual( item, test.result, 'tests simple' );
  579. });
  580. });
  581. // auth
  582. App.Auth.login({
  583. data: {
  584. username: 'not_existing',
  585. password: 'not_existing',
  586. },
  587. success: function(data) {
  588. test( "auth - not existing user", function() {
  589. ok( false, 'ok' )
  590. })
  591. },
  592. error: function() {
  593. test( "auth - not existing user", function() {
  594. ok( true, 'ok' )
  595. authWithSession();
  596. })
  597. }
  598. });
  599. var authWithSession = function() {
  600. App.Auth.login({
  601. data: {
  602. username: 'nicole.braun@zammad.org',
  603. password: 'test',
  604. },
  605. success: function(data) {
  606. test( "auth - existing user", function() {
  607. ok( true, 'authenticated')
  608. var user = App.Session.get('login');
  609. equal( 'nicole.braun@zammad.org', user, 'session login' )
  610. })
  611. },
  612. error: function() {
  613. test( "auth - existing user", function() {
  614. ok( false, 'not authenticated' )
  615. })
  616. }
  617. });
  618. }
  619. }