blob: 5004ef9b0c831baae29e69b032973caf50a1e61a [file] [log] [blame]
/**
* 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');
var credentialUtils = require('utils/credentials');
var view;
function getView() {
return App.ManageCredentialsFormView.create({
parentView: Em.Object.create({})
});
}
describe('#App.ManageCredentialsFormView', function() {
beforeEach(function() {
view = getView();
});
afterEach(function() {
view.destroy();
});
App.TestAliases.testAsComputedAlias(getView(), 'storePersisted', 'App.isCredentialStorePersistent', 'boolean');
App.TestAliases.testAsComputedIfThenElse(getView(), 'formHeader', 'isRemovable', Em.I18n.t('admin.kerberos.credentials.form.header.stored'), Em.I18n.t('admin.kerberos.credentials.form.header.not.stored'));
App.TestAliases.testAsComputedIfThenElse(getView(), 'hintMessage', 'storePersisted', Em.I18n.t('admin.kerberos.credentials.store.hint.supported'), Em.I18n.t('admin.kerberos.credentials.store.hint.not.supported'));
describe('#prepareContent', function() {
var credentials;
beforeEach(function () {
this.stub = sinon.stub(App, 'get');
sinon.stub(credentialUtils, 'credentials', function(clusterName, callback) {
callback(credentials);
});
});
afterEach(function () {
App.get.restore();
credentialUtils.credentials.restore();
});
[
{
isStorePersistent: true,
credentials: [
{
alias: 'kdc.admin.credential',
type: 'persisted'
}
],
e: {
isRemovable: true,
isRemoveDisabled: false,
storePersisted: true
},
m: 'persistent store is available, previous credentials were stored as persisted. Remove button should be visible and active.'
},
{
isStorePersistent: true,
credentials: [
{
alias: 'kdc.admin.credential',
type: 'temporary'
}
],
e: {
isRemovable: false,
isRemoveDisabled: true,
storePersisted: true
},
m: 'persistent store is available, previous credentials were stored as temporary. Remove button should be hidden and disabled.'
}
].forEach(function(test) {
it(test.m, function(done) {
credentials = test.credentials;
this.stub.withArgs('isCredentialStorePersistent').returns(test.e.storePersisted);
view.prepareContent();
Em.run.next(function() {
assert.equal(view.get('isRemovable'), test.e.isRemovable, '#isRemovable property validation');
assert.equal(view.get('isRemoveDisabled'), test.e.isRemoveDisabled, '#isRemoveDisabled property validation');
assert.equal(view.get('storePersisted'), test.e.storePersisted, '#storePersisted property validation');
done();
});
});
});
});
describe('#isSubmitDisabled', function() {
it('save button disabled by default', function() {
expect(view.get('isSubmitDisabled')).to.be.true;
});
it('save button disabled when password is empty', function() {
view.set('principal', 'some_principal');
expect(view.get('isSubmitDisabled')).to.be.true;
});
it('save button disabled when principal is empty', function() {
view.set('password', 'some_password');
expect(view.get('isSubmitDisabled')).to.be.true;
});
it('save button should be enabled when principal and password are filled', function() {
view.set('password', 'some_password');
view.set('principal', 'principal');
expect(view.get('isSubmitDisabled')).to.be.false;
});
});
describe('fields validation', function() {
var t = Em.I18n.t;
it('should flow validation', function() {
assert.isTrue(view.get('isSubmitDisabled'), 'submit disabled on initial state');
});
it('principal is not empty', function() {
view.set('principal', ' a');
expect(view.get('principalError')).to.equal(t('host.spacesValidation'));
assert.isTrue(view.get('isPrincipalDirty'), 'principal name modified');
assert.isTrue(view.get('isSubmitDisabled'), 'submit disabled because principal not valid');
});
it('principal is empty', function() {
view.set('principal', ' a');
view.set('principal', '');
expect(view.get('principalError')).to.equal(t('admin.users.editError.requiredField'));
});
it('principal is not empty (2)', function() {
view.set('principal', 'some_name');
assert.isFalse(view.get('principalError'), 'principal name valid no message shown');
assert.isTrue(view.get('isSubmitDisabled'), 'submit disabled because password field not modified');
});
it('password is updated', function() {
view.set('password', '1');
view.set('password', '');
expect(view.get('passwordError')).to.equal(t('admin.users.editError.requiredField'));
assert.isTrue(view.get('isPasswordDirty'), 'password modified');
assert.isTrue(view.get('isSubmitDisabled'), 'submit disabled because password field is empty');
});
it('password is updated (2)', function() {
view.set('password', 'some_pass');
view.set('principal', 'some_name');
assert.isFalse(view.get('passwordError'), 'password valid no message shown');
assert.isFalse(view.get('isSubmitDisabled'), 'submit enabled all fields are valid');
});
});
describe('#removeKDCCredentials', function() {
var popup;
beforeEach(function () {
popup = view.removeKDCCredentials().popup;
this.clock = sinon.useFakeTimers();
sinon.stub(credentialUtils, 'removeCredentials', function() {
var dfd = $.Deferred();
setTimeout(function() {
dfd.resolve();
}, 500);
return dfd.promise();
});
});
afterEach(function () {
popup.destroy();
credentialUtils.removeCredentials.restore();
this.clock.restore();
});
it('should show confirmation popup', function() {
expect(popup).be.instanceof(App.ModalPopup);
});
it('on popup open', function() {
assert.isFalse(view.get('actionStatus'), '#actionStatus before remove');
});
it('on Primary', function() {
popup.onPrimary();
assert.isTrue(view.get('isActionInProgress'), 'action in progress');
assert.isTrue(view.get('isRemoveDisabled'), 'remove button disabled');
assert.isTrue(view.get('isSubmitDisabled'), 'submit button disabled');
});
it('after 1s', function() {
popup.onPrimary();
this.clock.tick(1000);
assert.isFalse(view.get('isActionInProgress'), 'action finished');
assert.equal(Em.I18n.t('common.success'), view.get('actionStatus'), '#actionStatus after remove');
assert.isTrue(view.get('parentView.isCredentialsRemoved'), 'parentView#isCredentialsRemoved property should be triggered when remove complete');
});
});
});