edit_dataset_controller_test.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. var App = require('app');
  19. require('controllers/main/mirroring/edit_dataset_controller');
  20. require('models/target_cluster');
  21. require('views/main/mirroring/edit_dataset_view');
  22. describe('App.MainMirroringEditDataSetController', function () {
  23. describe('#clearStep', function () {
  24. it('should clear all fields, error flags and messages', function () {
  25. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  26. var errors = mainMirroringEditDataSetController.get('errors');
  27. var errorMessages = mainMirroringEditDataSetController.get('errorMessages');
  28. var formFeilds = mainMirroringEditDataSetController.get('formFields');
  29. formFeilds.set('datasetName', 'test');
  30. sinon.spy(mainMirroringEditDataSetController, 'clearErrors');
  31. mainMirroringEditDataSetController.clearStep();
  32. expect(mainMirroringEditDataSetController.clearErrors.calledOnce).to.be.true;
  33. Em.keys(formFeilds).forEach(function (field) {
  34. expect(formFeilds[field]).to.be.null;
  35. });
  36. mainMirroringEditDataSetController.clearErrors.restore();
  37. });
  38. });
  39. describe('#clearErrors', function () {
  40. it('should clear all error messages and flags', function () {
  41. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  42. var errors = mainMirroringEditDataSetController.get('errors');
  43. var errorMessages = mainMirroringEditDataSetController.get('errorMessages');
  44. Em.keys(errors).forEach(function (error) {
  45. errors[error] = true;
  46. }, this);
  47. Em.keys(errorMessages).forEach(function (errorMessage) {
  48. errorMessages[errorMessage] = 'test';
  49. }, this);
  50. mainMirroringEditDataSetController.clearErrors();
  51. Em.keys(errors).forEach(function (error) {
  52. expect(errors[error]).to.be.false;
  53. });
  54. Em.keys(errorMessages).forEach(function (errorMessage) {
  55. expect(errorMessages[errorMessage]).to.be.empty;
  56. });
  57. });
  58. });
  59. describe('#showAddPopup', function () {
  60. it('should show popup and set isEdit as false', function () {
  61. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  62. sinon.spy(App.ModalPopup, 'show');
  63. mainMirroringEditDataSetController.showAddPopup();
  64. expect(App.ModalPopup.show.calledOnce).to.be.true;
  65. expect(mainMirroringEditDataSetController.get('isEdit')).to.be.false;
  66. App.ModalPopup.show.restore();
  67. });
  68. });
  69. describe('#showEditPopup', function () {
  70. it('should show popup,set isEdit as true and set dataset id', function () {
  71. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  72. var dataset = Ember.Object.create({
  73. id: 'test'
  74. });
  75. sinon.spy(App.ModalPopup, 'show');
  76. mainMirroringEditDataSetController.showEditPopup(dataset);
  77. expect(App.ModalPopup.show.calledOnce).to.equal(true);
  78. expect(mainMirroringEditDataSetController.get('isEdit')).to.be.true;
  79. expect(mainMirroringEditDataSetController.get('datasetIdToEdit')).to.equal('test');
  80. App.ModalPopup.show.restore();
  81. });
  82. });
  83. describe('#showPopup', function () {
  84. it('should show dataset popup and save its view', function () {
  85. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  86. sinon.spy(App.ModalPopup, 'show');
  87. mainMirroringEditDataSetController.showPopup();
  88. expect(App.ModalPopup.show.calledOnce).to.equal(true);
  89. expect(mainMirroringEditDataSetController.get('popup')).to.not.be.empty;
  90. App.ModalPopup.show.restore();
  91. });
  92. });
  93. describe('#applyValidation', function () {
  94. it('should add observers to all fields to validate form', function () {
  95. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  96. sinon.spy(mainMirroringEditDataSetController, 'validate');
  97. mainMirroringEditDataSetController.applyValidation();
  98. expect(mainMirroringEditDataSetController.validate.calledOnce).to.be.true;
  99. Em.keys(mainMirroringEditDataSetController.get('formFields')).forEach(function (field) {
  100. expect(mainMirroringEditDataSetController.hasObserverFor('formFields.' + field)).to.be.true;
  101. });
  102. mainMirroringEditDataSetController.validate.restore();
  103. });
  104. });
  105. var testCases = [
  106. {
  107. day: '01/01/2001',
  108. hours: '00',
  109. minutes: '00',
  110. middayPeriod: 'AM',
  111. result: new Date('01/01/2001 00:00 AM'),
  112. message: 'should return date object'
  113. },
  114. {
  115. day: '06/05/2014',
  116. hours: '12',
  117. minutes: '59',
  118. middayPeriod: 'PM',
  119. result: new Date('06/05/2014 12:59 PM'),
  120. message: 'should return date object'
  121. },
  122. {
  123. day: '',
  124. hours: '00',
  125. minutes: '00',
  126. middayPeriod: 'AM',
  127. result: null,
  128. message: 'should return null if there are empty fields'
  129. }
  130. ];
  131. describe('#scheduleStartDate', function () {
  132. testCases.forEach(function (test) {
  133. it(test.message, function () {
  134. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
  135. formFields: Ember.Object.create({
  136. datasetStartDate: test.day,
  137. hoursForStart: test.hours,
  138. minutesForStart: test.minutes,
  139. middayPeriodForStart: test.middayPeriod
  140. })
  141. });
  142. expect(mainMirroringEditDataSetController.get('scheduleStartDate')).to.deep.equal(test.result);
  143. });
  144. });
  145. });
  146. describe('#scheduleEndDate', function () {
  147. testCases.forEach(function (test) {
  148. it(test.message, function () {
  149. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
  150. formFields: Ember.Object.create({
  151. datasetEndDate: test.day,
  152. hoursForEnd: test.hours,
  153. minutesForEnd: test.minutes,
  154. middayPeriodForEnd: test.middayPeriod
  155. })
  156. });
  157. expect(mainMirroringEditDataSetController.get('scheduleEndDate')).to.deep.equal(test.result);
  158. });
  159. });
  160. });
  161. var formFields = Ember.Object.create({
  162. datasetName: 'test',
  163. datasetTargetClusterName: 'test',
  164. datasetSourceDir: '/test',
  165. datasetTargetDir: '/test',
  166. datasetStartDate: '01/19/2038',
  167. hoursForStart: '03',
  168. minutesForStart: '15',
  169. middayPeriodForStart: 'AM',
  170. datasetEndDate: '01/19/2039',
  171. hoursForEnd: '03',
  172. minutesForEnd: '15',
  173. middayPeriodForEnd: 'AM',
  174. datasetFrequency: '1',
  175. repeatOptionSelected: 'days'
  176. })
  177. describe('#validate', function () {
  178. it('should set an error for empty fields', function () {
  179. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  180. mainMirroringEditDataSetController.validate();
  181. var errors = mainMirroringEditDataSetController.get('errors');
  182. var errorMessages = mainMirroringEditDataSetController.get('errorMessages');
  183. Em.keys(errors).forEach(function (error) {
  184. expect(errors[error]).to.be.true;
  185. });
  186. Em.keys(errorMessages).forEach(function (errorMessage) {
  187. expect(errorMessages[errorMessage]).to.equal(Em.I18n.t('mirroring.required.error'));
  188. });
  189. });
  190. it('should set an error if start date is after end date', function () {
  191. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  192. var formFields = mainMirroringEditDataSetController.get('formFields');
  193. formFields.set('datasetStartDate', '04/07/2014');
  194. formFields.set('hoursForStart', '11');
  195. formFields.set('minutesForStart', '00');
  196. formFields.set('middayPeriodForStart', 'PM');
  197. formFields.set('datasetEndDate', '04/07/2014');
  198. formFields.set('hoursForEnd', '11');
  199. formFields.set('minutesForEnd', '00');
  200. formFields.set('middayPeriodForEnd', 'AM');
  201. mainMirroringEditDataSetController.validate();
  202. expect(mainMirroringEditDataSetController.get('errors.isEndDateError')).to.be.true;
  203. expect(mainMirroringEditDataSetController.get('errorMessages.endDate')).to.equal(Em.I18n.t('mirroring.dateOrder.error'));
  204. });
  205. it('should set an error if start date is in the past', function () {
  206. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  207. var formFields = mainMirroringEditDataSetController.get('formFields');
  208. formFields.set('datasetStartDate', '04/07/2014');
  209. formFields.set('hoursForStart', '11');
  210. formFields.set('minutesForStart', '00');
  211. formFields.set('middayPeriodForStart', 'AM');
  212. mainMirroringEditDataSetController.validate();
  213. expect(mainMirroringEditDataSetController.get('errors.isStartDateError')).to.be.true;
  214. expect(mainMirroringEditDataSetController.get('errorMessages.startDate')).to.equal(Em.I18n.t('mirroring.startDate.error'));
  215. });
  216. it('should set an error if repeat field value consist not only form digits', function () {
  217. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  218. var formFields = mainMirroringEditDataSetController.get('formFields');
  219. formFields.set('datasetFrequency', 'test');
  220. mainMirroringEditDataSetController.validate();
  221. expect(mainMirroringEditDataSetController.get('errors.isFrequencyError')).to.be.true;
  222. expect(mainMirroringEditDataSetController.get('errorMessages.frequency')).to.equal(Em.I18n.t('mirroring.required.invalidNumberError'));
  223. formFields.set('datasetFrequency', '100test');
  224. mainMirroringEditDataSetController.validate();
  225. expect(mainMirroringEditDataSetController.get('errors.isFrequencyError')).to.be.true;
  226. expect(mainMirroringEditDataSetController.get('errorMessages.frequency')).to.equal(Em.I18n.t('mirroring.required.invalidNumberError'));
  227. });
  228. it('should not set errors if all fields are filled correctly', function () {
  229. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
  230. formFields: formFields
  231. });
  232. mainMirroringEditDataSetController.validate();
  233. var errors = mainMirroringEditDataSetController.get('errors');
  234. var errorMessages = mainMirroringEditDataSetController.get('errorMessages');
  235. Em.keys(errors).forEach(function (error) {
  236. expect(errors[error]).to.be.false;
  237. });
  238. Em.keys(errorMessages).forEach(function (errorMessage) {
  239. expect(errorMessages[errorMessage]).to.be.empty;
  240. });
  241. });
  242. });
  243. describe('#addZero', function () {
  244. it('should add 0 for numbers less than 10', function () {
  245. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  246. expect(mainMirroringEditDataSetController.addZero(1)).to.equal('01');
  247. expect(mainMirroringEditDataSetController.addZero(9)).to.equal('09');
  248. expect(mainMirroringEditDataSetController.addZero(0)).to.equal('00');
  249. });
  250. it('should not add 0 for numbers greater than 9', function () {
  251. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  252. expect(mainMirroringEditDataSetController.addZero(10)).to.equal('10');
  253. expect(mainMirroringEditDataSetController.addZero(99)).to.equal('99');
  254. });
  255. });
  256. describe('#toTZFormat', function () {
  257. it('should convert date to TZ format', function () {
  258. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  259. expect(mainMirroringEditDataSetController.toTZFormat(new Date(Date.UTC(2014, 0, 1, 1, 1)))).to.equal('2014-01-01T01:01Z');
  260. expect(mainMirroringEditDataSetController.toTZFormat(new Date(Date.UTC(2014, 11, 31, 23, 59)))).to.equal('2014-12-31T23:59Z');
  261. });
  262. });
  263. describe('#toAMPMHours', function () {
  264. it('should convert time to 12-hours format', function () {
  265. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  266. expect(mainMirroringEditDataSetController.toAMPMHours(13)).to.equal('01');
  267. expect(mainMirroringEditDataSetController.toAMPMHours(20)).to.equal('08');
  268. expect(mainMirroringEditDataSetController.toAMPMHours(24)).to.equal('12');
  269. expect(mainMirroringEditDataSetController.toAMPMHours(0)).to.equal('12');
  270. });
  271. it('should not convert time if argument is less than 12', function () {
  272. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  273. expect(mainMirroringEditDataSetController.toAMPMHours(1)).to.equal('01');
  274. expect(mainMirroringEditDataSetController.toAMPMHours(8)).to.equal('08');
  275. expect(mainMirroringEditDataSetController.toAMPMHours(11)).to.equal('11');
  276. });
  277. });
  278. describe('#save', function () {
  279. it('should create XML and send it to server', function () {
  280. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
  281. popup: Ember.Object.create({
  282. isSaving: false
  283. })
  284. });
  285. sinon.spy(mainMirroringEditDataSetController, 'createDatasetXML');
  286. sinon.spy(mainMirroringEditDataSetController, 'sendDatasetToServer');
  287. mainMirroringEditDataSetController.save();
  288. expect(mainMirroringEditDataSetController.createDatasetXML.calledOnce).to.be.true;
  289. expect(mainMirroringEditDataSetController.sendDatasetToServer.calledOnce).to.be.true;
  290. expect(mainMirroringEditDataSetController.get('popup.isSaving')).to.be.true;
  291. mainMirroringEditDataSetController.createDatasetXML.restore();
  292. mainMirroringEditDataSetController.sendDatasetToServer.restore();
  293. });
  294. });
  295. describe('#createDatasetXML', function () {
  296. it('should create XML-fromatted data', function () {
  297. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
  298. formFields: formFields
  299. });
  300. var startDate = new Date('01/19/2038 03:15 AM').toISOString().replace(/\:\d{2}\.\d{3}/, '');
  301. var endDate = new Date('01/19/2039 03:15 AM').toISOString().replace(/\:\d{2}\.\d{3}/, '');
  302. var expectedResult = '<?xml version="1.0"?><feed description="" name="' + App.mirroringDatasetNamePrefix + 'test" xmlns="uri:falcon:feed:0.1"><frequency>days(1)' +
  303. '</frequency><clusters><cluster name="' + App.get('clusterName') + '" type="source"><validity start="' + startDate + '" end="' + endDate +
  304. '"/><retention limit="days(7)" action="delete"/></cluster><cluster name="test" type="target"><validity start="' + startDate + '" end="' + endDate +
  305. '"/><retention limit="months(1)" action="delete"/><locations><location type="data" path="/test" /></locations></cluster></clusters><locations><location type="data" path="' +
  306. '/test" /></locations><ACL owner="hue" group="users" permission="0755" /><schema location="/none" provider="none"/></feed>';
  307. var result = mainMirroringEditDataSetController.createDatasetXML();
  308. expect(result).to.equal(expectedResult);
  309. });
  310. });
  311. describe('#sendDatasetToServer', function () {
  312. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
  313. formFields: formFields
  314. });
  315. beforeEach(function () {
  316. sinon.stub(App.ajax, 'send', Em.K);
  317. });
  318. afterEach(function () {
  319. App.ajax.send.restore();
  320. });
  321. it('should send data with correct dataset name', function () {
  322. mainMirroringEditDataSetController.sendDatasetToServer('test');
  323. expect(App.ajax.send.args[0][0].data.name).to.equal(App.mirroringDatasetNamePrefix + formFields.datasetName);
  324. });
  325. it('should send data from param', function () {
  326. mainMirroringEditDataSetController.sendDatasetToServer('test');
  327. expect(App.ajax.send.args[0][0].data.entity).to.equal('test');
  328. });
  329. it('should use edit request if isEdit is true', function () {
  330. mainMirroringEditDataSetController.set('isEdit', true);
  331. mainMirroringEditDataSetController.sendDatasetToServer('test');
  332. expect(App.ajax.send.args[0][0].name).to.equal('mirroring.update_entity');
  333. });
  334. it('should use create request if isEdit is false', function () {
  335. mainMirroringEditDataSetController.set('isEdit', false);
  336. mainMirroringEditDataSetController.sendDatasetToServer('test');
  337. expect(App.ajax.send.args[0][0].name).to.equal('mirroring.create_new_dataset');
  338. });
  339. });
  340. describe('#onSaveSuccess', function () {
  341. it('should hide popup and load data', function () {
  342. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
  343. popup: Ember.Object.create({
  344. isSaving: true,
  345. hide: function () {
  346. }
  347. })
  348. });
  349. App.router.set('mainMirroringController', Ember.Object.create({
  350. loadData: function () {
  351. }
  352. }));
  353. sinon.spy(mainMirroringEditDataSetController.get('popup'), 'hide');
  354. sinon.spy(App.router.get('mainMirroringController'), 'loadData');
  355. mainMirroringEditDataSetController.onSaveSuccess();
  356. expect(mainMirroringEditDataSetController.get('popup.isSaving')).to.be.false;
  357. expect(App.router.get('mainMirroringController').loadData.calledOnce).to.be.true;
  358. expect(mainMirroringEditDataSetController.get('popup').hide.calledOnce).to.be.true;
  359. mainMirroringEditDataSetController.get('popup').hide.restore();
  360. App.router.get('mainMirroringController').loadData.restore();
  361. });
  362. });
  363. describe('#onSaveError', function () {
  364. var mainMirroringEditDataSetController;
  365. beforeEach(function () {
  366. mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
  367. popup: Ember.Object.create({
  368. isSaving: true
  369. })
  370. });
  371. sinon.stub(App, 'showAlertPopup', Em.K);
  372. });
  373. afterEach(function () {
  374. App.showAlertPopup.restore();
  375. });
  376. it('shouldn\'t show error popup and enable button', function () {
  377. mainMirroringEditDataSetController.onSaveError(null);
  378. expect(App.showAlertPopup.calledOnce).to.be.false;
  379. expect(mainMirroringEditDataSetController.get('popup.isSaving')).to.be.false;
  380. });
  381. it('should show error popup and enable button', function () {
  382. mainMirroringEditDataSetController.onSaveError({responseText: '<message>test</message>'});
  383. expect(App.showAlertPopup.args[0][1]).to.be.equal(Em.I18n.t('mirroring.manageClusters.error') + ': test');
  384. expect(mainMirroringEditDataSetController.get('popup.isSaving')).to.be.false;
  385. });
  386. });
  387. describe('#saveDisabled', function () {
  388. it('should return false if there are no errors', function () {
  389. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({});
  390. expect(mainMirroringEditDataSetController.get('saveDisabled')).to.be.false;
  391. });
  392. it('should return true if there are some errors', function () {
  393. var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
  394. mainMirroringEditDataSetController.set('errors.isNameError', true);
  395. expect(mainMirroringEditDataSetController.get('saveDisabled')).to.be.true;
  396. });
  397. });
  398. });