blob: c6054b2becbf7ac2d31135772867db0ef4173e5b [file] [log] [blame]
/**
* @license
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed 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.
*/
import '../../../test/common-test-setup-karma.js';
import './gr-group.js';
const basicFixture = fixtureFromElement('gr-group');
suite('gr-group tests', () => {
let element;
let groupStub;
const group = {
id: '6a1e70e1a88782771a91808c8af9bbb7a9871389',
url: '#/admin/groups/uuid-6a1e70e1a88782771a91808c8af9bbb7a9871389',
options: {},
description: 'Gerrit Site Administrators',
group_id: 1,
owner: 'Administrators',
owner_id: '6a1e70e1a88782771a91808c8af9bbb7a9871389',
name: 'Administrators',
};
setup(() => {
stub('gr-rest-api-interface', {
getLoggedIn() { return Promise.resolve(true); },
});
element = basicFixture.instantiate();
groupStub = sinon.stub(
element.$.restAPI,
'getGroupConfig')
.callsFake(() => Promise.resolve(group));
});
test('loading displays before group config is loaded', () => {
assert.isTrue(element.$.loading.classList.contains('loading'));
assert.isFalse(getComputedStyle(element.$.loading).display === 'none');
assert.isTrue(element.$.loadedContent.classList.contains('loading'));
assert.isTrue(getComputedStyle(element.$.loadedContent)
.display === 'none');
});
test('default values are populated with internal group', done => {
sinon.stub(
element.$.restAPI,
'getIsGroupOwner')
.callsFake(() => Promise.resolve(true));
element.groupId = 1;
element._loadGroup().then(() => {
assert.isTrue(element._groupIsInternal);
assert.isFalse(element.$.visibleToAll.bindValue);
done();
});
});
test('default values with external group', done => {
const groupExternal = Object.assign({}, group);
groupExternal.id = 'external-group-id';
groupStub.restore();
groupStub = sinon.stub(
element.$.restAPI,
'getGroupConfig')
.callsFake(() => Promise.resolve(groupExternal));
sinon.stub(
element.$.restAPI,
'getIsGroupOwner')
.callsFake(() => Promise.resolve(true));
element.groupId = 1;
element._loadGroup().then(() => {
assert.isFalse(element._groupIsInternal);
assert.isFalse(element.$.visibleToAll.bindValue);
done();
});
});
test('rename group', done => {
const groupName = 'test-group';
const groupName2 = 'test-group2';
element.groupId = 1;
element._groupConfig = {
name: groupName,
};
element._groupName = groupName;
sinon.stub(
element.$.restAPI,
'getIsGroupOwner')
.callsFake(() => Promise.resolve(true));
sinon.stub(
element.$.restAPI,
'saveGroupName')
.callsFake(() => Promise.resolve({status: 200}));
const button = element.$.inputUpdateNameBtn;
element._loadGroup().then(() => {
assert.isTrue(button.hasAttribute('disabled'));
assert.isFalse(element.$.Title.classList.contains('edited'));
element.$.groupNameInput.text = groupName2;
assert.isFalse(button.hasAttribute('disabled'));
assert.isTrue(element.$.groupName.classList.contains('edited'));
element._handleSaveName().then(() => {
assert.isTrue(button.hasAttribute('disabled'));
assert.isFalse(element.$.Title.classList.contains('edited'));
assert.equal(element._groupName, groupName2);
done();
});
});
});
test('rename group owner', done => {
const groupName = 'test-group';
element.groupId = 1;
element._groupConfig = {
name: groupName,
};
element._groupConfigOwner = 'testId';
element._groupOwner = true;
sinon.stub(
element.$.restAPI,
'getIsGroupOwner')
.callsFake(() => Promise.resolve({status: 200}));
const button = element.$.inputUpdateOwnerBtn;
element._loadGroup().then(() => {
assert.isTrue(button.hasAttribute('disabled'));
assert.isFalse(element.$.Title.classList.contains('edited'));
element.$.groupOwnerInput.text = 'testId2';
assert.isFalse(button.hasAttribute('disabled'));
assert.isTrue(element.$.groupOwner.classList.contains('edited'));
element._handleSaveOwner().then(() => {
assert.isTrue(button.hasAttribute('disabled'));
assert.isFalse(element.$.Title.classList.contains('edited'));
done();
});
});
});
test('test for undefined group name', done => {
groupStub.restore();
sinon.stub(
element.$.restAPI,
'getGroupConfig')
.callsFake(() => Promise.resolve({}));
assert.isUndefined(element.groupId);
element.groupId = 1;
assert.isDefined(element.groupId);
// Test that loading shows instead of filling
// in group details
element._loadGroup().then(() => {
assert.isTrue(element.$.loading.classList.contains('loading'));
assert.isTrue(element._loading);
done();
});
});
test('test fire event', done => {
element._groupConfig = {
name: 'test-group',
};
sinon.stub(element.$.restAPI, 'saveGroupName')
.returns(Promise.resolve({status: 200}));
const showStub = sinon.stub(element, 'dispatchEvent');
element._handleSaveName()
.then(() => {
assert.isTrue(showStub.called);
done();
});
});
test('_computeGroupDisabled', () => {
let admin = true;
let owner = false;
let groupIsInternal = true;
assert.equal(element._computeGroupDisabled(owner, admin,
groupIsInternal), false);
admin = false;
assert.equal(element._computeGroupDisabled(owner, admin,
groupIsInternal), true);
owner = true;
assert.equal(element._computeGroupDisabled(owner, admin,
groupIsInternal), false);
owner = false;
assert.equal(element._computeGroupDisabled(owner, admin,
groupIsInternal), true);
groupIsInternal = false;
assert.equal(element._computeGroupDisabled(owner, admin,
groupIsInternal), true);
admin = true;
assert.equal(element._computeGroupDisabled(owner, admin,
groupIsInternal), true);
});
test('_computeLoadingClass', () => {
assert.equal(element._computeLoadingClass(true), 'loading');
assert.equal(element._computeLoadingClass(false), '');
});
test('fires page-error', done => {
groupStub.restore();
element.groupId = 1;
const response = {status: 404};
sinon.stub(
element.$.restAPI, 'getGroupConfig').callsFake((group, errFn) => {
errFn(response);
});
element.addEventListener('page-error', e => {
assert.deepEqual(e.detail.response, response);
done();
});
element._loadGroup();
});
test('uuid', () => {
element._groupConfig = {
id: '6a1e70e1a88782771a91808c8af9bbb7a9871389',
};
assert.equal(element._groupConfig.id, element.$.uuid.text);
element._groupConfig = {
id: 'user%2Fgroup',
};
assert.equal('user/group', element.$.uuid.text);
});
});