diff options
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.html | 311 |
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> |