
This also includes backwards compatibility with the old /projects/ url. This only renames it for the admin interface. It does not rename it for changes or anything else. Bug: Issue 7754 Change-Id: Ia31d3f26871556729fb3c5b5b28ceca12da1ec7c
362 lines
11 KiB
HTML
362 lines
11 KiB
HTML
<!DOCTYPE html>
|
|
<!--
|
|
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.
|
|
-->
|
|
|
|
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
|
|
<title>gr-admin-view</title>
|
|
|
|
<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
|
|
<script src="../../../bower_components/web-component-tester/browser.js"></script>
|
|
<link rel="import" href="../../../test/common-test-setup.html"/>
|
|
<link rel="import" href="gr-admin-view.html">
|
|
|
|
<script>void(0);</script>
|
|
|
|
<test-fixture id="basic">
|
|
<template>
|
|
<gr-admin-view></gr-admin-view>
|
|
</template>
|
|
</test-fixture>
|
|
|
|
<script>
|
|
suite('gr-admin-view tests', () => {
|
|
let element;
|
|
let sandbox;
|
|
|
|
setup(() => {
|
|
sandbox = sinon.sandbox.create();
|
|
element = fixture('basic');
|
|
stub('gr-rest-api-interface', {
|
|
getProjectConfig() {
|
|
return Promise.resolve({});
|
|
},
|
|
});
|
|
});
|
|
|
|
teardown(() => {
|
|
sandbox.restore();
|
|
});
|
|
|
|
test('_computeURLHelper', () => {
|
|
const path = '/test';
|
|
const host = 'http://www.testsite.com';
|
|
const computedPath = element._computeURLHelper(host, path);
|
|
assert.equal(computedPath, '//http://www.testsite.com/test');
|
|
});
|
|
|
|
test('link URLs', () => {
|
|
assert.equal(
|
|
element._computeLinkURL({url: '/test', noBaseUrl: true}),
|
|
'//' + window.location.host + '/test');
|
|
|
|
sandbox.stub(element, 'getBaseUrl').returns('/foo');
|
|
assert.equal(
|
|
element._computeLinkURL({url: '/test', noBaseUrl: true}),
|
|
'//' + window.location.host + '/foo/test');
|
|
assert.equal(element._computeLinkURL({url: '/test'}), '/test');
|
|
assert.equal(
|
|
element._computeLinkURL({url: '/test', target: '_blank'}),
|
|
'/test');
|
|
});
|
|
|
|
test('current page gets selected and is displayed', () => {
|
|
element._filteredLinks = [{
|
|
name: 'Repositories',
|
|
url: '/admin/repos',
|
|
view: 'gr-repo-list',
|
|
children: [],
|
|
}];
|
|
|
|
element.params = {
|
|
view: 'admin',
|
|
adminView: 'gr-repo-list',
|
|
};
|
|
|
|
flushAsynchronousOperations();
|
|
assert.equal(Polymer.dom(element.root).querySelectorAll(
|
|
'.selected').length, 1);
|
|
assert.ok(element.$$('gr-repo-list'));
|
|
assert.isNotOk(element.$$('gr-admin-create-repo'));
|
|
});
|
|
|
|
test('_filteredLinks admin', done => {
|
|
sandbox.stub(element.$.restAPI, 'getAccountCapabilities', () => {
|
|
return Promise.resolve({
|
|
createGroup: true,
|
|
createProject: true,
|
|
viewPlugins: true,
|
|
});
|
|
});
|
|
element._loadAccountCapabilities().then(() => {
|
|
assert.equal(element._filteredLinks.length, 3);
|
|
|
|
// Repos
|
|
assert.equal(element._filteredLinks[0].children.length, 0);
|
|
assert.isNotOk(element._filteredLinks[0].subsection);
|
|
|
|
// Groups
|
|
assert.equal(element._filteredLinks[1].children.length, 0);
|
|
|
|
// Plugins
|
|
assert.equal(element._filteredLinks[2].children.length, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('_filteredLinks non admin authenticated', done => {
|
|
sandbox.stub(element.$.restAPI, 'getAccountCapabilities', () => {
|
|
return Promise.resolve({});
|
|
});
|
|
element._loadAccountCapabilities().then(() => {
|
|
assert.equal(element._filteredLinks.length, 2);
|
|
|
|
// Repos
|
|
assert.equal(element._filteredLinks[0].children.length, 0);
|
|
assert.isNotOk(element._filteredLinks[0].subsection);
|
|
|
|
// Groups
|
|
assert.equal(element._filteredLinks[1].children.length, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('_filteredLinks non admin unathenticated', done => {
|
|
element.reload().then(() => {
|
|
assert.equal(element._filteredLinks.length, 1);
|
|
|
|
// Repos
|
|
assert.equal(element._filteredLinks[0].children.length, 0);
|
|
assert.isNotOk(element._filteredLinks[0].subsection);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('Repo shows up in nav', done => {
|
|
element._repoName = 'Test Repo';
|
|
sandbox.stub(element.$.restAPI, 'getAccountCapabilities', () => {
|
|
return Promise.resolve({
|
|
createGroup: true,
|
|
createProject: true,
|
|
viewPlugins: true,
|
|
});
|
|
});
|
|
element._loadAccountCapabilities().then(() => {
|
|
assert.equal(element._filteredLinks.length, 3);
|
|
|
|
// Repos
|
|
assert.equal(element._filteredLinks[0].children.length, 0);
|
|
assert.equal(element._filteredLinks[0].subsection.name, 'Test Repo');
|
|
|
|
// Groups
|
|
assert.equal(element._filteredLinks[1].children.length, 0);
|
|
|
|
// Plugins
|
|
assert.equal(element._filteredLinks[2].children.length, 0);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('Nav is reloaded when repo changes', () => {
|
|
sandbox.stub(element.$.restAPI, 'getAccountCapabilities', () => {
|
|
return Promise.resolve({
|
|
createGroup: true,
|
|
createProject: true,
|
|
viewPlugins: true,
|
|
});
|
|
});
|
|
sandbox.stub(element.$.restAPI, 'getAccount', () => {
|
|
return Promise.resolve({_id: 1});
|
|
});
|
|
sandbox.stub(element, 'reload');
|
|
element.params = {repo: 'Test Repo', adminView: 'gr-repo'};
|
|
assert.equal(element.reload.callCount, 1);
|
|
element.params = {repo: 'Test Repo 2',
|
|
adminView: 'gr-repo'};
|
|
assert.equal(element.reload.callCount, 2);
|
|
});
|
|
|
|
test('Nav is reloaded when group changes', () => {
|
|
sandbox.stub(element, '_computeGroupName');
|
|
sandbox.stub(element.$.restAPI, 'getAccountCapabilities', () => {
|
|
return Promise.resolve({
|
|
createGroup: true,
|
|
createProject: true,
|
|
viewPlugins: true,
|
|
});
|
|
});
|
|
sandbox.stub(element.$.restAPI, 'getAccount', () => {
|
|
return Promise.resolve({_id: 1});
|
|
});
|
|
sandbox.stub(element, 'reload');
|
|
element.params = {groupId: '1', adminView: 'gr-group'};
|
|
assert.equal(element.reload.callCount, 1);
|
|
});
|
|
|
|
test('Nav is reloaded when group name changes', done => {
|
|
const newName = 'newName';
|
|
sandbox.stub(element, '_computeGroupName');
|
|
sandbox.stub(element, 'reload', () => {
|
|
assert.equal(element._groupName, newName);
|
|
assert.isTrue(element.reload.called);
|
|
done();
|
|
});
|
|
element.params = {group: 1, view: Gerrit.Nav.View.GROUP};
|
|
element._groupName = 'oldName';
|
|
flushAsynchronousOperations();
|
|
element.$$('gr-group').fire('name-changed', {name: newName});
|
|
});
|
|
|
|
suite('_computeSelectedClass', () => {
|
|
setup(() => {
|
|
sandbox.stub(element.$.restAPI, 'getAccountCapabilities', () => {
|
|
return Promise.resolve({
|
|
createGroup: true,
|
|
createProject: true,
|
|
viewPlugins: true,
|
|
});
|
|
});
|
|
sandbox.stub(element.$.restAPI, 'getAccount', () => {
|
|
return Promise.resolve({_id: 1});
|
|
});
|
|
|
|
return element.reload();
|
|
});
|
|
|
|
suite('repos', () => {
|
|
setup(() => {
|
|
stub('gr-repo-access', {
|
|
_repoChanged: () => {},
|
|
});
|
|
});
|
|
|
|
test('repo list', done => {
|
|
element.params = {
|
|
view: Gerrit.Nav.View.ADMIN,
|
|
adminView: 'gr-repo-list',
|
|
openCreateModal: false,
|
|
};
|
|
flush(() => {
|
|
const selected = element.$$('gr-page-nav .selected');
|
|
assert.isOk(selected);
|
|
assert.equal(selected.textContent.trim(), 'Repositories');
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('repo', done => {
|
|
element.params = {
|
|
view: Gerrit.Nav.View.ADMIN,
|
|
project: 'foo',
|
|
adminView: 'gr-repo',
|
|
};
|
|
element._repoName = 'foo';
|
|
element.reload().then(() => {
|
|
flush(() => {
|
|
const selected = element.$$('gr-page-nav .selected');
|
|
assert.isOk(selected);
|
|
assert.equal(selected.textContent.trim(), 'foo');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
test('repo access', done => {
|
|
element.params = {
|
|
view: Gerrit.Nav.View.ADMIN,
|
|
adminView: 'gr-repo-access',
|
|
detailType: 'access',
|
|
repo: 'foo',
|
|
};
|
|
element._repoName = 'foo';
|
|
element.reload().then(() => {
|
|
flush(() => {
|
|
const selected = element.$$('gr-page-nav .selected');
|
|
assert.isOk(selected);
|
|
assert.equal(selected.textContent.trim(), 'Access');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
suite('groups', () => {
|
|
setup(() => {
|
|
stub('gr-group', {
|
|
_loadGroup: () => Promise.resolve({}),
|
|
});
|
|
stub('gr-group-members', {
|
|
_loadGroupDetails: () => {},
|
|
});
|
|
|
|
sandbox.stub(element.$.restAPI, 'getGroupConfig')
|
|
.returns(Promise.resolve({
|
|
name: 'foo',
|
|
}));
|
|
sandbox.stub(element.$.restAPI, 'getIsGroupOwner')
|
|
.returns(Promise.resolve(true));
|
|
});
|
|
|
|
test('group list', done => {
|
|
element.params = {
|
|
view: Gerrit.Nav.View.ADMIN,
|
|
adminView: 'gr-admin-group-list',
|
|
openCreateModal: false,
|
|
};
|
|
flush(() => {
|
|
const selected = element.$$('gr-page-nav .selected');
|
|
assert.isOk(selected);
|
|
assert.equal(selected.textContent.trim(), 'Groups');
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('group', done => {
|
|
element.params = {
|
|
view: Gerrit.Nav.View.GROUP,
|
|
groupId: 1234,
|
|
};
|
|
element._groupName = 'foo';
|
|
element.reload().then(() => {
|
|
flush(() => {
|
|
const selected = element.$$('gr-page-nav .selected');
|
|
assert.isOk(selected);
|
|
assert.equal(selected.textContent.trim(), 'foo');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
test('group members', done => {
|
|
element.params = {
|
|
view: Gerrit.Nav.View.GROUP,
|
|
detail: Gerrit.Nav.GroupDetailView.MEMBERS,
|
|
groupId: 1234,
|
|
};
|
|
element._groupName = 'foo';
|
|
element.reload().then(() => {
|
|
flush(() => {
|
|
const selected = element.$$('gr-page-nav .selected');
|
|
assert.isOk(selected);
|
|
assert.equal(selected.textContent.trim(), 'Members');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
</script>
|