/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var App = require('app');
require('controllers/main/mirroring/edit_dataset_controller');
require('models/target_cluster');
require('views/main/mirroring/edit_dataset_view');
describe('App.MainMirroringEditDataSetController', function () {
describe('#clearStep', function () {
it('should clear all fields, error flags and messages', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
var errors = mainMirroringEditDataSetController.get('errors');
var errorMessages = mainMirroringEditDataSetController.get('errorMessages');
var formFeilds = mainMirroringEditDataSetController.get('formFields');
formFeilds.set('datasetName', 'test');
sinon.spy(mainMirroringEditDataSetController, 'clearErrors');
mainMirroringEditDataSetController.clearStep();
expect(mainMirroringEditDataSetController.clearErrors.calledOnce).to.be.true;
Em.keys(formFeilds).forEach(function (field) {
expect(formFeilds[field]).to.be.null;
});
mainMirroringEditDataSetController.clearErrors.restore();
});
});
describe('#clearErrors', function () {
it('should clear all error messages and flags', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
var errors = mainMirroringEditDataSetController.get('errors');
var errorMessages = mainMirroringEditDataSetController.get('errorMessages');
Em.keys(errors).forEach(function (error) {
errors[error] = true;
}, this);
Em.keys(errorMessages).forEach(function (errorMessage) {
errorMessages[errorMessage] = 'test';
}, this);
mainMirroringEditDataSetController.clearErrors();
Em.keys(errors).forEach(function (error) {
expect(errors[error]).to.be.false;
});
Em.keys(errorMessages).forEach(function (errorMessage) {
expect(errorMessages[errorMessage]).to.be.empty;
});
});
});
describe('#showAddPopup', function () {
it('should show popup and set isEdit as false', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
sinon.spy(App.ModalPopup, 'show');
mainMirroringEditDataSetController.showAddPopup();
expect(App.ModalPopup.show.calledOnce).to.be.true;
expect(mainMirroringEditDataSetController.get('isEdit')).to.be.false;
App.ModalPopup.show.restore();
});
});
describe('#showEditPopup', function () {
it('should show popup,set isEdit as true and set dataset id', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
var dataset = Ember.Object.create({
id: 'test'
});
sinon.spy(App.ModalPopup, 'show');
mainMirroringEditDataSetController.showEditPopup(dataset);
expect(App.ModalPopup.show.calledOnce).to.equal(true);
expect(mainMirroringEditDataSetController.get('isEdit')).to.be.true;
expect(mainMirroringEditDataSetController.get('datasetIdToEdit')).to.equal('test');
App.ModalPopup.show.restore();
});
});
describe('#showPopup', function () {
it('should show dataset popup and save its view', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
sinon.spy(App.ModalPopup, 'show');
mainMirroringEditDataSetController.showPopup();
expect(App.ModalPopup.show.calledOnce).to.equal(true);
expect(mainMirroringEditDataSetController.get('popup')).to.not.be.empty;
App.ModalPopup.show.restore();
});
});
describe('#applyValidation', function () {
it('should add observers to all fields to validate form', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
sinon.spy(mainMirroringEditDataSetController, 'validate');
mainMirroringEditDataSetController.applyValidation();
expect(mainMirroringEditDataSetController.validate.calledOnce).to.be.true;
Em.keys(mainMirroringEditDataSetController.get('formFields')).forEach(function (field) {
expect(mainMirroringEditDataSetController.hasObserverFor('formFields.' + field)).to.be.true;
});
mainMirroringEditDataSetController.validate.restore();
});
});
var testCases = [
{
day: '01/01/2001',
hours: '00',
minutes: '00',
middayPeriod: 'AM',
result: new Date('01/01/2001 00:00 AM'),
message: 'should return date object'
},
{
day: '06/05/2014',
hours: '12',
minutes: '59',
middayPeriod: 'PM',
result: new Date('06/05/2014 12:59 PM'),
message: 'should return date object'
},
{
day: '',
hours: '00',
minutes: '00',
middayPeriod: 'AM',
result: null,
message: 'should return null if there are empty fields'
}
];
describe('#scheduleStartDate', function () {
testCases.forEach(function (test) {
it(test.message, function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
formFields: Ember.Object.create({
datasetStartDate: test.day,
hoursForStart: test.hours,
minutesForStart: test.minutes,
middayPeriodForStart: test.middayPeriod
})
});
expect(mainMirroringEditDataSetController.get('scheduleStartDate')).to.deep.equal(test.result);
});
});
});
describe('#scheduleEndDate', function () {
testCases.forEach(function (test) {
it(test.message, function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
formFields: Ember.Object.create({
datasetEndDate: test.day,
hoursForEnd: test.hours,
minutesForEnd: test.minutes,
middayPeriodForEnd: test.middayPeriod
})
});
expect(mainMirroringEditDataSetController.get('scheduleEndDate')).to.deep.equal(test.result);
});
});
});
var formFields = Ember.Object.create({
datasetName: 'test',
datasetTargetClusterName: 'test',
datasetSourceDir: '/test',
datasetTargetDir: '/test',
datasetStartDate: '01/19/2038',
hoursForStart: '03',
minutesForStart: '15',
middayPeriodForStart: 'AM',
datasetEndDate: '01/19/2039',
hoursForEnd: '03',
minutesForEnd: '15',
middayPeriodForEnd: 'AM',
datasetFrequency: '1',
repeatOptionSelected: 'days'
})
describe('#validate', function () {
it('should set an error for empty fields', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
mainMirroringEditDataSetController.validate();
var errors = mainMirroringEditDataSetController.get('errors');
var errorMessages = mainMirroringEditDataSetController.get('errorMessages');
Em.keys(errors).forEach(function (error) {
expect(errors[error]).to.be.true;
});
Em.keys(errorMessages).forEach(function (errorMessage) {
expect(errorMessages[errorMessage]).to.equal(Em.I18n.t('mirroring.required.error'));
});
});
it('should set an error if start date is after end date', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
var formFields = mainMirroringEditDataSetController.get('formFields');
formFields.set('datasetStartDate', '04/07/2014');
formFields.set('hoursForStart', '11');
formFields.set('minutesForStart', '00');
formFields.set('middayPeriodForStart', 'PM');
formFields.set('datasetEndDate', '04/07/2014');
formFields.set('hoursForEnd', '11');
formFields.set('minutesForEnd', '00');
formFields.set('middayPeriodForEnd', 'AM');
mainMirroringEditDataSetController.validate();
expect(mainMirroringEditDataSetController.get('errors.isEndDateError')).to.be.true;
expect(mainMirroringEditDataSetController.get('errorMessages.endDate')).to.equal(Em.I18n.t('mirroring.dateOrder.error'));
});
it('should set an error if start date is in the past', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
var formFields = mainMirroringEditDataSetController.get('formFields');
formFields.set('datasetStartDate', '04/07/2014');
formFields.set('hoursForStart', '11');
formFields.set('minutesForStart', '00');
formFields.set('middayPeriodForStart', 'AM');
mainMirroringEditDataSetController.validate();
expect(mainMirroringEditDataSetController.get('errors.isStartDateError')).to.be.true;
expect(mainMirroringEditDataSetController.get('errorMessages.startDate')).to.equal(Em.I18n.t('mirroring.startDate.error'));
});
it('should set an error if repeat field value consist not only form digits', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
var formFields = mainMirroringEditDataSetController.get('formFields');
formFields.set('datasetFrequency', 'test');
mainMirroringEditDataSetController.validate();
expect(mainMirroringEditDataSetController.get('errors.isFrequencyError')).to.be.true;
expect(mainMirroringEditDataSetController.get('errorMessages.frequency')).to.equal(Em.I18n.t('mirroring.required.invalidNumberError'));
formFields.set('datasetFrequency', '100test');
mainMirroringEditDataSetController.validate();
expect(mainMirroringEditDataSetController.get('errors.isFrequencyError')).to.be.true;
expect(mainMirroringEditDataSetController.get('errorMessages.frequency')).to.equal(Em.I18n.t('mirroring.required.invalidNumberError'));
});
it('should not set errors if all fields are filled correctly', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
formFields: formFields
});
mainMirroringEditDataSetController.validate();
var errors = mainMirroringEditDataSetController.get('errors');
var errorMessages = mainMirroringEditDataSetController.get('errorMessages');
Em.keys(errors).forEach(function (error) {
expect(errors[error]).to.be.false;
});
Em.keys(errorMessages).forEach(function (errorMessage) {
expect(errorMessages[errorMessage]).to.be.empty;
});
});
});
describe('#addZero', function () {
it('should add 0 for numbers less than 10', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
expect(mainMirroringEditDataSetController.addZero(1)).to.equal('01');
expect(mainMirroringEditDataSetController.addZero(9)).to.equal('09');
expect(mainMirroringEditDataSetController.addZero(0)).to.equal('00');
});
it('should not add 0 for numbers greater than 9', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
expect(mainMirroringEditDataSetController.addZero(10)).to.equal('10');
expect(mainMirroringEditDataSetController.addZero(99)).to.equal('99');
});
});
describe('#toTZFormat', function () {
it('should convert date to TZ format', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
expect(mainMirroringEditDataSetController.toTZFormat(new Date(Date.UTC(2014, 0, 1, 1, 1)))).to.equal('2014-01-01T01:01Z');
expect(mainMirroringEditDataSetController.toTZFormat(new Date(Date.UTC(2014, 11, 31, 23, 59)))).to.equal('2014-12-31T23:59Z');
});
});
describe('#toAMPMHours', function () {
it('should convert time to 12-hours format', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
expect(mainMirroringEditDataSetController.toAMPMHours(13)).to.equal('01');
expect(mainMirroringEditDataSetController.toAMPMHours(20)).to.equal('08');
expect(mainMirroringEditDataSetController.toAMPMHours(24)).to.equal('12');
expect(mainMirroringEditDataSetController.toAMPMHours(0)).to.equal('12');
});
it('should not convert time if argument is less than 12', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
expect(mainMirroringEditDataSetController.toAMPMHours(1)).to.equal('01');
expect(mainMirroringEditDataSetController.toAMPMHours(8)).to.equal('08');
expect(mainMirroringEditDataSetController.toAMPMHours(11)).to.equal('11');
});
});
describe('#save', function () {
it('should create XML and send it to server', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
popup: Ember.Object.create({
isSaving: false
})
});
sinon.spy(mainMirroringEditDataSetController, 'createDatasetXML');
sinon.spy(mainMirroringEditDataSetController, 'sendDatasetToServer');
mainMirroringEditDataSetController.save();
expect(mainMirroringEditDataSetController.createDatasetXML.calledOnce).to.be.true;
expect(mainMirroringEditDataSetController.sendDatasetToServer.calledOnce).to.be.true;
expect(mainMirroringEditDataSetController.get('popup.isSaving')).to.be.true;
mainMirroringEditDataSetController.createDatasetXML.restore();
mainMirroringEditDataSetController.sendDatasetToServer.restore();
});
});
describe('#createDatasetXML', function () {
it('should create XML-fromatted data', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
formFields: formFields
});
var startDate = new Date('01/19/2038 03:15 AM').toISOString().replace(/\:\d{2}\.\d{3}/, '');
var endDate = new Date('01/19/2039 03:15 AM').toISOString().replace(/\:\d{2}\.\d{3}/, '');
var expectedResult = 'days(1)' +
'';
var result = mainMirroringEditDataSetController.createDatasetXML();
expect(result).to.equal(expectedResult);
});
});
describe('#sendDatasetToServer', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
formFields: formFields
});
beforeEach(function () {
sinon.stub(App.ajax, 'send', Em.K);
});
afterEach(function () {
App.ajax.send.restore();
});
it('should send data with correct dataset name', function () {
mainMirroringEditDataSetController.sendDatasetToServer('test');
expect(App.ajax.send.args[0][0].data.name).to.equal(App.mirroringDatasetNamePrefix + formFields.datasetName);
});
it('should send data from param', function () {
mainMirroringEditDataSetController.sendDatasetToServer('test');
expect(App.ajax.send.args[0][0].data.entity).to.equal('test');
});
it('should use edit request if isEdit is true', function () {
mainMirroringEditDataSetController.set('isEdit', true);
mainMirroringEditDataSetController.sendDatasetToServer('test');
expect(App.ajax.send.args[0][0].name).to.equal('mirroring.update_entity');
});
it('should use create request if isEdit is false', function () {
mainMirroringEditDataSetController.set('isEdit', false);
mainMirroringEditDataSetController.sendDatasetToServer('test');
expect(App.ajax.send.args[0][0].name).to.equal('mirroring.create_new_dataset');
});
});
describe('#onSaveSuccess', function () {
it('should hide popup and load data', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
popup: Ember.Object.create({
isSaving: true,
hide: function () {
}
})
});
App.router.set('mainMirroringController', Ember.Object.create({
loadData: function () {
}
}));
sinon.spy(mainMirroringEditDataSetController.get('popup'), 'hide');
sinon.spy(App.router.get('mainMirroringController'), 'loadData');
mainMirroringEditDataSetController.onSaveSuccess();
expect(mainMirroringEditDataSetController.get('popup.isSaving')).to.be.false;
expect(App.router.get('mainMirroringController').loadData.calledOnce).to.be.true;
expect(mainMirroringEditDataSetController.get('popup').hide.calledOnce).to.be.true;
mainMirroringEditDataSetController.get('popup').hide.restore();
App.router.get('mainMirroringController').loadData.restore();
});
});
describe('#onSaveError', function () {
var mainMirroringEditDataSetController;
beforeEach(function () {
mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({
popup: Ember.Object.create({
isSaving: true
})
});
sinon.stub(App, 'showAlertPopup', Em.K);
});
afterEach(function () {
App.showAlertPopup.restore();
});
it('shouldn\'t show error popup and enable button', function () {
mainMirroringEditDataSetController.onSaveError(null);
expect(App.showAlertPopup.calledOnce).to.be.false;
expect(mainMirroringEditDataSetController.get('popup.isSaving')).to.be.false;
});
it('should show error popup and enable button', function () {
mainMirroringEditDataSetController.onSaveError({responseText: 'test'});
expect(App.showAlertPopup.args[0][1]).to.be.equal(Em.I18n.t('mirroring.manageClusters.error') + ': test');
expect(mainMirroringEditDataSetController.get('popup.isSaving')).to.be.false;
});
});
describe('#saveDisabled', function () {
it('should return false if there are no errors', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create({});
expect(mainMirroringEditDataSetController.get('saveDisabled')).to.be.false;
});
it('should return true if there are some errors', function () {
var mainMirroringEditDataSetController = App.MainMirroringEditDataSetController.create();
mainMirroringEditDataSetController.set('errors.isNameError', true);
expect(mainMirroringEditDataSetController.get('saveDisabled')).to.be.true;
});
});
});