model.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. window.onload = function() {
  2. // model
  3. test( "model basic tests", function() {
  4. // define model
  5. var configure_attributes_org = _.clone( App.Ticket.configure_attributes )
  6. var attribute1 = {
  7. name: 'test1', display: 'Test 1', tag: 'input', type: 'text', limit: 200, 'null': false
  8. };
  9. App.Ticket.configure_attributes.push( attribute1 )
  10. var attribute2 = {
  11. name: 'test2', display: 'Test 2', tag: 'input', type: 'text', limit: 200, 'null': true
  12. };
  13. App.Ticket.configure_attributes.push( attribute2 )
  14. var attribute3 = {
  15. name: 'pending_time1', display: 'Pending till1', tag: 'input', type: 'text', limit: 200, 'null': false, required_if: { state_id: [3] },
  16. };
  17. App.Ticket.configure_attributes.push( attribute3 )
  18. var attribute4 = {
  19. name: 'pending_time2', display: 'Pending till2', tag: 'input', type: 'text', limit: 200, 'null': true, required_if: { state_id: [3] },
  20. };
  21. App.Ticket.configure_attributes.push( attribute4 )
  22. // check validation
  23. console.log('TEST 1')
  24. var ticket = new App.Ticket()
  25. ticket.load({title: 'some title'})
  26. var error = ticket.validate()
  27. ok( error['group_id'], 'group_id is required')
  28. ok( !error['title'], 'title is required')
  29. ok( error['state_id'], 'state_id is required')
  30. ok( error['test1'], 'test1 is required')
  31. ok( !error['test2'], 'test2 is not required')
  32. ok( !error['pending_time1'], 'pending_time1 is not required')
  33. ok( !error['pending_time2'], 'pending_time2 is not required')
  34. console.log('TEST 2')
  35. ticket.title = 'some new title'
  36. ticket.state_id = [2,3]
  37. ticket.test2 = 123
  38. error = ticket.validate()
  39. ok( error['group_id'], 'group_id is required')
  40. ok( !error['title'], 'title exists')
  41. ok( !error['state_id'], 'state_id is')
  42. ok( error['test1'], 'test1 is required')
  43. ok( !error['test2'], 'test2 is not required')
  44. ok( error['pending_time1'], 'pending_time1 is required')
  45. ok( error['pending_time2'], 'pending_time2 is required')
  46. console.log('TEST 3')
  47. ticket.title = 'some new title'
  48. ticket.state_id = [2,1]
  49. ticket.test2 = 123
  50. error = ticket.validate()
  51. ok( error['group_id'], 'group_id is required')
  52. ok( !error['title'], 'title exists')
  53. ok( !error['state_id'], 'state_id is')
  54. ok( error['test1'], 'test1 is required')
  55. ok( !error['test2'], 'test2 is not required')
  56. ok( !error['pending_time1'], 'pending_time1 is required')
  57. ok( !error['pending_time2'], 'pending_time2 is required')
  58. console.log('TEST 4')
  59. ticket.title = 'some new title'
  60. ticket.state_id = [2,3]
  61. ticket.test2 = 123
  62. error = ticket.validate()
  63. ok( error['group_id'], 'group_id is required')
  64. ok( !error['title'], 'title exists')
  65. ok( !error['state_id'], 'state_id is')
  66. ok( error['test1'], 'test1 is required')
  67. ok( !error['test2'], 'test2 is not required')
  68. ok( error['pending_time1'], 'pending_time1 is required')
  69. ok( error['pending_time2'], 'pending_time2 is required')
  70. console.log('TEST 5')
  71. ticket.title = 'some new title'
  72. ticket.state_id = [2,3]
  73. ticket.test2 = 123
  74. ticket.pending_time1 = '2014-10-10 09:00'
  75. error = ticket.validate()
  76. ok( error['group_id'], 'group_id is required')
  77. ok( !error['title'], 'title exists')
  78. ok( !error['state_id'], 'state_id is')
  79. ok( error['test1'], 'test1 is required')
  80. ok( !error['test2'], 'test2 is not required')
  81. ok( !error['pending_time1'], 'pending_time1 is required')
  82. ok( error['pending_time2'], 'pending_time2 is required')
  83. // define model with screen
  84. App.Ticket.configure_attributes = configure_attributes_org
  85. var attribute1 = {
  86. name: 'test1', display: 'Test 1', tag: 'input', type: 'text', limit: 200, 'null': false, screen: { some_screen: { required_if: { state_id: [3] } } },
  87. };
  88. App.Ticket.configure_attributes.push( attribute1 )
  89. var attribute2 = {
  90. name: 'test2', display: 'Test 2', tag: 'input', type: 'text', limit: 200, 'null': true, screen: { some_screen: { required_if: { state_id: [3] } } },
  91. };
  92. App.Ticket.configure_attributes.push( attribute2 )
  93. var attribute3 = {
  94. name: 'group_id', display: 'Group', tag: 'select', multiple: false, null: false, relation: 'Group', screen: { some_screen: { null: false } },
  95. };
  96. App.Ticket.configure_attributes.push( attribute3 )
  97. var attribute4 = {
  98. name: 'owner_id', display: 'Owner', tag: 'select', multiple: false, null: false, relation: 'User', screen: { some_screen: { null: false } },
  99. };
  100. App.Ticket.configure_attributes.push( attribute4 )
  101. var attribute5 = {
  102. name: 'state_id', display: 'State', tag: 'select', multiple: false, null: false, relation: 'TicketState', screen: { some_screen: { null: false } },
  103. };
  104. App.Ticket.configure_attributes.push( attribute5 )
  105. // check validation with screen
  106. console.log('TEST 6')
  107. ticket = new App.Ticket()
  108. ticket.load({title: 'some title'})
  109. error = ticket.validate()
  110. ok( error['group_id'], 'group_id is required')
  111. ok( !error['title'], 'title is required')
  112. ok( error['state_id'], 'state_id is required')
  113. ok( error['test1'], 'test1 is required')
  114. ok( !error['test2'], 'test2 is not required')
  115. console.log('TEST 7')
  116. ticket.state_id = 3
  117. error = ticket.validate()
  118. ok( error['group_id'], 'group_id is required')
  119. ok( !error['title'], 'title is required')
  120. ok( !error['state_id'], 'state_id is required')
  121. ok( error['test1'], 'test1 is required')
  122. ok( !error['test2'], 'test2 is not required')
  123. console.log('TEST 8')
  124. ticket.state_id = 2
  125. error = ticket.validate()
  126. ok( error['group_id'], 'group_id is required')
  127. ok( !error['title'], 'title is required')
  128. ok( !error['state_id'], 'state_id is required')
  129. ok( error['test1'], 'test1 is required')
  130. ok( !error['test2'], 'test2 is not required')
  131. console.log('TEST 9')
  132. ticket.state_id = undefined
  133. error = ticket.validate({screen: 'some_screen'})
  134. ok( error['group_id'], 'group_id is required')
  135. ok( !error['title'], 'title is required')
  136. ok( error['state_id'], 'state_id is required')
  137. ok( !error['test1'], 'test1 is required')
  138. ok( !error['test2'], 'test2 is required')
  139. console.log('TEST 10')
  140. ticket.state_id = 2
  141. error = ticket.validate({screen: 'some_screen'})
  142. ok( error['group_id'], 'group_id is required')
  143. ok( !error['title'], 'title is required')
  144. ok( !error['state_id'], 'state_id is required')
  145. ok( !error['test1'], 'test1 is required')
  146. ok( !error['test2'], 'test2 is not required')
  147. console.log('TEST 11')
  148. ticket.state_id = 3
  149. error = ticket.validate({screen: 'some_screen'})
  150. ok( error['group_id'], 'group_id is required')
  151. ok( !error['title'], 'title is required')
  152. ok( !error['state_id'], 'state_id is required')
  153. ok( error['test1'], 'test1 is required')
  154. ok( error['test2'], 'test2 is required')
  155. console.log('TEST 12')
  156. ticket.state_id = 2
  157. error = ticket.validate()
  158. ok( error['group_id'], 'group_id is required')
  159. ok( !error['title'], 'title is required')
  160. ok( !error['state_id'], 'state_id is required')
  161. ok( error['test1'], 'test1 is required')
  162. ok( !error['test2'], 'test2 is not required')
  163. console.log('TEST 13')
  164. ticket.state_id = 3
  165. error = ticket.validate()
  166. ok( error['group_id'], 'group_id is required')
  167. ok( !error['title'], 'title is required')
  168. ok( !error['state_id'], 'state_id is required')
  169. ok( error['test1'], 'test1 is required')
  170. ok( !error['test2'], 'test2 is required')
  171. console.log('TEST 14')
  172. ticket.state_id = 2
  173. error = ticket.validate()
  174. ok( error['group_id'], 'group_id is required')
  175. ok( !error['title'], 'title is required')
  176. ok( !error['state_id'], 'state_id is required')
  177. ok( error['test1'], 'test1 is required')
  178. ok( !error['test2'], 'test2 is not required')
  179. });
  180. // search
  181. test( "model search tests", function() {
  182. App.TicketPriority.refresh( [
  183. {
  184. id: 1,
  185. name: '1 low',
  186. note: 'some note 1',
  187. active: true,
  188. created_at: '2014-06-10T11:17:34.000Z',
  189. },
  190. {
  191. id: 2,
  192. name: '2 normal',
  193. note: 'some note 2',
  194. active: false,
  195. created_at: '2014-06-10T10:17:33.000Z',
  196. },
  197. {
  198. id: 3,
  199. name: '3 high',
  200. note: 'some note 3',
  201. active: true,
  202. created_at: '2014-06-10T10:17:44.000Z',
  203. },
  204. {
  205. id: 4,
  206. name: '4 very high',
  207. note: 'some note 4',
  208. active: true,
  209. created_at: '2014-06-10T10:17:54.000Z',
  210. },
  211. ] )
  212. priorities = App.TicketPriority.search({sortBy:'created_at', order: 'ASC'})
  213. equal( '2 normal', priorities[0].name, 'check 1 entry')
  214. equal( '3 high', priorities[1].name, 'check 2 entry')
  215. equal( '4 very high', priorities[2].name, 'check 3 entry')
  216. equal( '1 low', priorities[3].name, 'check 4 entry')
  217. equal( undefined, priorities[4], 'check 5 entry')
  218. priorities = App.TicketPriority.search({sortBy:'created_at', order: 'DESC'})
  219. equal( '1 low', priorities[0].name, 'check 4 entry')
  220. equal( '4 very high', priorities[1].name, 'check 3 entry')
  221. equal( '3 high', priorities[2].name, 'check 2 entry')
  222. equal( '2 normal', priorities[3].name, 'check 1 entry')
  223. equal( undefined, priorities[4], 'check 5 entry')
  224. });
  225. // model
  226. test( "model loadAssets tests - 1", function() {
  227. window.refreshCounter1 = 0
  228. var callback1 = function(state, triggerType) {
  229. window.refreshCounter1 = window.refreshCounter1 + 1
  230. equal( state.id, 9999, 'id check')
  231. if (window.refreshCounter1 == 1) {
  232. equal( 'full', triggerType, 'trigger type check')
  233. }
  234. else {
  235. equal( 'refresh', triggerType, 'trigger type check')
  236. }
  237. if ( window.refreshCounter1 == 1 ) {
  238. App.Collection.loadAssets({
  239. TicketState: {
  240. 9999: {
  241. name: 'some some name', id: 9999, updated_at: "2014-11-07T23:43:08.000Z"
  242. }
  243. }
  244. })
  245. }
  246. if ( window.refreshCounter1 == 2 ) {
  247. App.Collection.loadAssets({
  248. TicketState: {
  249. 9999: {
  250. name: 'some some name', id: 9999, updated_at: "2014-11-07T23:43:08.000Z"
  251. }
  252. }
  253. })
  254. }
  255. }
  256. App.Collection.loadAssets({
  257. TicketState: {
  258. 9999: {
  259. name: 'some some name', id: 9999, updated_at: "2014-11-06T23:43:08.000Z"
  260. }
  261. }
  262. })
  263. // do not force, but bild on every change/loadAssets
  264. App.TicketState.full(9999, callback1, false, true)
  265. });
  266. App.Delay.set( function() {
  267. test( "model loadAssets tests - 1 / check refresh counter", function() {
  268. equal( window.refreshCounter1, 2, 'check refresh counter')
  269. });
  270. },
  271. 1000
  272. );
  273. test( "model loadAssets tests - 2", function() {
  274. window.refreshCounter2 = 0
  275. var callback2 = function(state, triggerType) {
  276. window.refreshCounter2 = window.refreshCounter2 + 1
  277. equal( state.id, 10000, 'id check')
  278. if (window.refreshCounter2 == 1) {
  279. equal( 'full', triggerType, 'trigger type check')
  280. }
  281. else {
  282. equal( 'refresh', triggerType, 'trigger type check')
  283. }
  284. if ( window.refreshCounter2 == 1 ) {
  285. App.Collection.loadAssets({
  286. TicketState: {
  287. 10000: {
  288. name: 'some some name', id: 10000, updated_at: "2014-11-07T23:43:08.000Z"
  289. }
  290. }
  291. })
  292. }
  293. if ( window.refreshCounter2 == 2 ) {
  294. App.Collection.loadAssets({
  295. TicketState: {
  296. 10000: {
  297. name: 'some some name', id: 10000, updated_at: "2014-11-05T23:43:08.000Z"
  298. }
  299. }
  300. })
  301. }
  302. }
  303. App.Collection.loadAssets({
  304. TicketState: {
  305. 10000: {
  306. name: 'some some name', id: 10000, updated_at: "2014-11-06T23:43:08.000Z"
  307. }
  308. }
  309. })
  310. // do not force, but bild on every change/loadAssets
  311. App.TicketState.full(10000, callback2, false, true)
  312. });
  313. App.Delay.set( function() {
  314. test( "model loadAssets tests - 2 / check refresh counter", function() {
  315. equal( window.refreshCounter2, 2, 'check refresh counter')
  316. });
  317. },
  318. 1200
  319. );
  320. test( "model loadAssets tests - 3", function() {
  321. window.refreshCounter3 = 0
  322. var callback3 = function(state, triggerType) {
  323. window.refreshCounter3 = window.refreshCounter3 + 1
  324. equal( state.id, 10001, 'id check')
  325. if (window.refreshCounter3 == 1) {
  326. equal( 'full', triggerType, 'trigger type check')
  327. }
  328. else {
  329. equal( 'refresh', triggerType, 'trigger type check')
  330. }
  331. if ( window.refreshCounter3 == 1 ) {
  332. App.Collection.loadAssets({
  333. TicketState: {
  334. 10001: {
  335. name: 'some some name', id: 10001, updated_at: "2014-11-07T23:43:08.000Z"
  336. }
  337. }
  338. })
  339. }
  340. if ( window.refreshCounter3 == 2 ) {
  341. App.Collection.loadAssets({
  342. TicketState: {
  343. 10001: {
  344. name: 'some some name', id: 10001, updated_at: "2014-11-08T23:43:08.000Z"
  345. }
  346. }
  347. })
  348. }
  349. }
  350. App.Collection.loadAssets({
  351. TicketState: {
  352. 10001: {
  353. name: 'some some name', id: 10001, updated_at: "2014-11-06T23:43:08.000Z"
  354. }
  355. }
  356. })
  357. // do not force, but bild on every change/loadAssets
  358. App.TicketState.full(10001, callback3, false, true)
  359. });
  360. App.Delay.set( function() {
  361. test( "model loadAssets tests - 3 / check refresh counter", function() {
  362. equal( window.refreshCounter3, 3, 'check refresh counter')
  363. });
  364. },
  365. 1400
  366. );
  367. }