summaryrefslogtreecommitdiffstats
path: root/polygerrit-ui/app/behaviors/gr-admin-nav-behavior/gr-admin-nav-behavior_test.html
diff options
context:
space:
mode:
Diffstat (limited to 'polygerrit-ui/app/behaviors/gr-admin-nav-behavior/gr-admin-nav-behavior_test.html')
-rw-r--r--polygerrit-ui/app/behaviors/gr-admin-nav-behavior/gr-admin-nav-behavior_test.html311
1 files changed, 311 insertions, 0 deletions
diff --git a/polygerrit-ui/app/behaviors/gr-admin-nav-behavior/gr-admin-nav-behavior_test.html b/polygerrit-ui/app/behaviors/gr-admin-nav-behavior/gr-admin-nav-behavior_test.html
new file mode 100644
index 0000000000..a1902cda5f
--- /dev/null
+++ b/polygerrit-ui/app/behaviors/gr-admin-nav-behavior/gr-admin-nav-behavior_test.html
@@ -0,0 +1,311 @@
+<!DOCTYPE html>
+<!--
+@license
+Copyright (C) 2018 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>keyboard-shortcut-behavior</title>
+
+<script src="../../bower_components/webcomponentsjs/webcomponents.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-nav-behavior.html">
+
+<test-fixture id="basic">
+ <template>
+ <test-element></test-element>
+ </template>
+</test-fixture>
+
+<script>
+ suite('gr-admin-nav-behavior tests', () => {
+ let element;
+ let sandbox;
+ let capabilityStub;
+ let menuLinkStub;
+
+ suiteSetup(() => {
+ // Define a Polymer element that uses this behavior.
+ Polymer({
+ is: 'test-element',
+ behaviors: [
+ Gerrit.AdminNavBehavior,
+ ],
+ });
+ });
+
+ setup(() => {
+ element = fixture('basic');
+ sandbox = sinon.sandbox.create();
+ capabilityStub = sinon.stub();
+ menuLinkStub = sinon.stub().returns([]);
+ });
+
+ teardown(() => {
+ sandbox.restore();
+ });
+
+ const testAdminLinks = (account, options, expected, done) => {
+ element.getAdminLinks(account,
+ capabilityStub,
+ menuLinkStub,
+ options)
+ .then(res => {
+ assert.equal(expected.totalLength, res.links.length);
+ assert.equal(res.links[0].name, 'Repositories');
+ // Repos
+ if (expected.groupListShown) {
+ assert.equal(res.links[1].name, 'Groups');
+ }
+
+ if (expected.pluginListShown) {
+ assert.equal(res.links[2].name, 'Plugins');
+ assert.isNotOk(res.links[2].subsection);
+ }
+
+ if (expected.projectPageShown) {
+ assert.isOk(res.links[0].subsection);
+ assert.equal(res.links[0].subsection.children.length, 5);
+ } else {
+ assert.isNotOk(res.links[0].subsection);
+ }
+ // Groups
+ if (expected.groupPageShown) {
+ assert.isOk(res.links[1].subsection);
+ assert.equal(res.links[1].subsection.children.length,
+ expected.groupSubpageLength);
+ } else if ( expected.totalLength > 1) {
+ assert.isNotOk(res.links[1].subsection);
+ }
+
+ if (expected.pluginGeneratedLinks) {
+ for (const link of expected.pluginGeneratedLinks) {
+ const linkMatch = res.links.find(l => {
+ return (l.url === link.url && l.name === link.text);
+ });
+ assert.isTrue(!!linkMatch);
+
+ // External links should open in new tab.
+ if (link.url[0] !== '/') {
+ assert.equal(linkMatch.target, '_blank');
+ } else {
+ assert.isNotOk(linkMatch.target);
+ }
+ }
+ }
+
+ // Current section
+ if (expected.projectPageShown || expected.groupPageShown) {
+ assert.isOk(res.expandedSection);
+ assert.isOk(res.expandedSection.children);
+ } else {
+ assert.isNotOk(res.expandedSection);
+ }
+ if (expected.projectPageShown) {
+ assert.equal(res.expandedSection.name, 'my-repo');
+ assert.equal(res.expandedSection.children.length, 5);
+ } else if (expected.groupPageShown) {
+ assert.equal(res.expandedSection.name, 'my-group');
+ assert.equal(res.expandedSection.children.length,
+ expected.groupSubpageLength);
+ }
+ done();
+ });
+ };
+
+ suite('logged out', () => {
+ let account;
+ let expected;
+
+ setup(() => {
+ expected = {
+ groupListShown: false,
+ groupPageShown: false,
+ pluginListShown: false,
+ };
+ });
+
+ test('without a specific repo or group', done => {
+ let options;
+ expected = Object.assign(expected, {
+ totalLength: 1,
+ projectPageShown: false,
+ });
+ testAdminLinks(account, options, expected, done);
+ });
+
+ test('with a repo', done => {
+ const options = {repoName: 'my-repo'};
+ expected = Object.assign(expected, {
+ totalLength: 1,
+ projectPageShown: true,
+ });
+ testAdminLinks(account, options, expected, done);
+ });
+
+ test('with plugin generated links', done => {
+ let options;
+ const generatedLinks = [
+ {text: 'internal link text', url: '/internal/link/url'},
+ {text: 'external link text', url: 'http://external/link/url'},
+ ];
+ menuLinkStub.returns(generatedLinks);
+ expected = Object.assign(expected, {
+ totalLength: 3,
+ projectPageShown: false,
+ pluginGeneratedLinks: generatedLinks,
+ });
+ testAdminLinks(account, options, expected, done);
+ });
+ });
+
+ suite('no plugin capability logged in', () => {
+ const account = {
+ name: 'test-user',
+ };
+ let expected;
+
+ setup(() => {
+ expected = {
+ totalLength: 2,
+ pluginListShown: false,
+ };
+ capabilityStub.returns(Promise.resolve({}));
+ });
+
+ test('without a specific project or group', done => {
+ let options;
+ expected = Object.assign(expected, {
+ projectPageShown: false,
+ groupListShown: true,
+ groupPageShown: false,
+ });
+ testAdminLinks(account, options, expected, done);
+ });
+
+ test('with a repo', done => {
+ const account = {
+ name: 'test-user',
+ };
+ const options = {repoName: 'my-repo'};
+ expected = Object.assign(expected, {
+ projectPageShown: true,
+ groupListShown: true,
+ groupPageShown: false,
+ });
+ testAdminLinks(account, options, expected, done);
+ });
+ });
+
+ suite('view plugin capability logged in', () => {
+ const account = {
+ name: 'test-user',
+ };
+ let expected;
+
+ setup(() => {
+ capabilityStub.returns(Promise.resolve({viewPlugins: true}));
+ expected = {
+ totalLength: 3,
+ groupListShown: true,
+ pluginListShown: true,
+ };
+ });
+
+ test('without a specific repo or group', done => {
+ let options;
+ expected = Object.assign(expected, {
+ projectPageShown: false,
+ groupPageShown: false,
+ });
+ testAdminLinks(account, options, expected, done);
+ });
+
+ test('with a repo', done => {
+ const options = {repoName: 'my-repo'};
+ expected = Object.assign(expected, {
+ projectPageShown: true,
+ groupPageShown: false,
+ });
+ testAdminLinks(account, options, expected, done);
+ });
+
+ test('admin with internal group', done => {
+ const options = {
+ groupId: 'a15262',
+ groupName: 'my-group',
+ groupIsInternal: true,
+ isAdmin: true,
+ groupOwner: false,
+ };
+ expected = Object.assign(expected, {
+ projectPageShown: false,
+ groupPageShown: true,
+ groupSubpageLength: 2,
+ });
+ testAdminLinks(account, options, expected, done);
+ });
+
+ test('group owner with internal group', done => {
+ const options = {
+ groupId: 'a15262',
+ groupName: 'my-group',
+ groupIsInternal: true,
+ isAdmin: false,
+ groupOwner: true,
+ };
+ expected = Object.assign(expected, {
+ projectPageShown: false,
+ groupPageShown: true,
+ groupSubpageLength: 2,
+ });
+ testAdminLinks(account, options, expected, done);
+ });
+
+ test('non owner or admin with internal group', done => {
+ const options = {
+ groupId: 'a15262',
+ groupName: 'my-group',
+ groupIsInternal: true,
+ isAdmin: false,
+ groupOwner: false,
+ };
+ expected = Object.assign(expected, {
+ projectPageShown: false,
+ groupPageShown: true,
+ groupSubpageLength: 1,
+ });
+ testAdminLinks(account, options, expected, done);
+ });
+
+ test('admin with external group', done => {
+ const options = {
+ groupId: 'a15262',
+ groupName: 'my-group',
+ groupIsInternal: false,
+ isAdmin: true,
+ groupOwner: true,
+ };
+ expected = Object.assign(expected, {
+ projectPageShown: false,
+ groupPageShown: true,
+ groupSubpageLength: 0,
+ });
+ testAdminLinks(account, options, expected, done);
+ });
+ });
+ });
+</script>