
These tags are preserved by the Closure compiler and vulcanize in order to serve the license notices embedded in the outputs. In a standalone Gerrit server, these license are also covered in the LICENSES.txt served with the documentation. When serving PG assets from a CDN, it's less obvious what the corresponding LICENSES.txt file is, since the CDN is not directly linked to a running Gerrit server. Safer to embed the licenses in the assets themselves. Change-Id: Id1add1451fad1baa7916882a6bda02c326ccc988
228 lines
7.2 KiB
HTML
228 lines
7.2 KiB
HTML
<!DOCTYPE html>
|
|
<!--
|
|
@license
|
|
Copyright (C) 2016 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-change-list-view</title>
|
|
|
|
<script src="../../../bower_components/page/page.js"></script>
|
|
<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-change-list-view.html">
|
|
|
|
<script>void(0);</script>
|
|
|
|
<test-fixture id="basic">
|
|
<template>
|
|
<gr-change-list-view></gr-change-list-view>
|
|
</template>
|
|
</test-fixture>
|
|
|
|
<script>
|
|
const CHANGE_ID = 'IcA3dAB3edAB9f60B8dcdA6ef71A75980e4B7127';
|
|
const COMMIT_HASH = '12345678';
|
|
|
|
suite('gr-change-list-view tests', () => {
|
|
let element;
|
|
let sandbox;
|
|
|
|
setup(() => {
|
|
stub('gr-rest-api-interface', {
|
|
getLoggedIn() { return Promise.resolve(false); },
|
|
getChanges(num, query) {
|
|
return Promise.resolve([]);
|
|
},
|
|
getAccountDetails() { return Promise.resolve({}); },
|
|
getAccountStatus() { return Promise.resolve({}); },
|
|
});
|
|
element = fixture('basic');
|
|
sandbox = sinon.sandbox.create();
|
|
});
|
|
|
|
teardown(done => {
|
|
flush(() => {
|
|
sandbox.restore();
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('_computePage', () => {
|
|
assert.equal(element._computePage(0, 25), 1);
|
|
assert.equal(element._computePage(50, 25), 3);
|
|
});
|
|
|
|
test('_limitFor', () => {
|
|
const defaultLimit = 25;
|
|
const _limitFor = q => element._limitFor(q, defaultLimit);
|
|
assert.equal(_limitFor(''), defaultLimit);
|
|
assert.equal(_limitFor('limit:10'), 10);
|
|
assert.equal(_limitFor('xlimit:10'), defaultLimit);
|
|
assert.equal(_limitFor('x(limit:10'), 10);
|
|
});
|
|
|
|
test('_computeNavLink', () => {
|
|
const getUrlStub = sandbox.stub(Gerrit.Nav, 'getUrlForSearchQuery')
|
|
.returns('');
|
|
const query = 'status:open';
|
|
let offset = 0;
|
|
let direction = 1;
|
|
const changesPerPage = 5;
|
|
|
|
element._computeNavLink(query, offset, direction, changesPerPage);
|
|
assert.equal(getUrlStub.lastCall.args[1], 5);
|
|
|
|
direction = -1;
|
|
element._computeNavLink(query, offset, direction, changesPerPage);
|
|
assert.equal(getUrlStub.lastCall.args[1], 0);
|
|
|
|
offset = 5;
|
|
direction = 1;
|
|
element._computeNavLink(query, offset, direction, changesPerPage);
|
|
assert.equal(getUrlStub.lastCall.args[1], 10);
|
|
});
|
|
|
|
test('_computePrevArrowClass', () => {
|
|
let offset = 0;
|
|
assert.equal(element._computePrevArrowClass(offset), 'hide');
|
|
offset = 5;
|
|
assert.equal(element._computePrevArrowClass(offset), '');
|
|
});
|
|
|
|
test('_computeNextArrowClass', () => {
|
|
let changes = _.times(25, _.constant({_more_changes: true}));
|
|
assert.equal(element._computeNextArrowClass(changes), '');
|
|
changes = _.times(25, _.constant({}));
|
|
assert.equal(element._computeNextArrowClass(changes), 'hide');
|
|
});
|
|
|
|
test('_computeNavClass', () => {
|
|
let loading = true;
|
|
assert.equal(element._computeNavClass(loading), 'hide');
|
|
loading = false;
|
|
assert.equal(element._computeNavClass(loading), 'hide');
|
|
element._changes = [];
|
|
assert.equal(element._computeNavClass(loading), 'hide');
|
|
element._changes = _.times(5, _.constant({}));
|
|
assert.equal(element._computeNavClass(loading), '');
|
|
});
|
|
|
|
test('_handleNextPage', () => {
|
|
const showStub = sandbox.stub(page, 'show');
|
|
element.$.nextArrow.hidden = true;
|
|
element._handleNextPage();
|
|
assert.isFalse(showStub.called);
|
|
element.$.nextArrow.hidden = false;
|
|
element._handleNextPage();
|
|
assert.isTrue(showStub.called);
|
|
});
|
|
|
|
test('_handlePreviousPage', () => {
|
|
const showStub = sandbox.stub(page, 'show');
|
|
element.$.prevArrow.hidden = true;
|
|
element._handlePreviousPage();
|
|
assert.isFalse(showStub.called);
|
|
element.$.prevArrow.hidden = false;
|
|
element._handlePreviousPage();
|
|
assert.isTrue(showStub.called);
|
|
});
|
|
|
|
test('_userId query', done => {
|
|
assert.isNull(element._userId);
|
|
element._query = 'owner: foo@bar';
|
|
element._changes = [{owner: {email: 'foo@bar'}}];
|
|
flush(() => {
|
|
assert.equal(element._userId, 'foo@bar');
|
|
|
|
element._query = 'foo bar baz';
|
|
element._changes = [{owner: {email: 'foo@bar'}}];
|
|
assert.isNull(element._userId);
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
suite('query based navigation', () => {
|
|
setup(() => {
|
|
sandbox.stub(Gerrit.Nav, 'getUrlForChange', () => '/r/c/1');
|
|
});
|
|
|
|
teardown(done => {
|
|
flush(() => {
|
|
sandbox.restore();
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('Searching for a change ID redirects to change', done => {
|
|
sandbox.stub(element, '_getChanges')
|
|
.returns(Promise.resolve([{_number: 1}]));
|
|
sandbox.stub(element, '_replaceCurrentLocation', url => {
|
|
assert.equal(url, '/r/c/1');
|
|
done();
|
|
});
|
|
|
|
element.params = {view: Gerrit.Nav.View.SEARCH, query: CHANGE_ID};
|
|
});
|
|
|
|
test('Searching for a change num redirects to change', done => {
|
|
sandbox.stub(element, '_getChanges')
|
|
.returns(Promise.resolve([{_number: 1}]));
|
|
sandbox.stub(element, '_replaceCurrentLocation', url => {
|
|
assert.equal(url, '/r/c/1');
|
|
done();
|
|
});
|
|
|
|
element.params = {view: Gerrit.Nav.View.SEARCH, query: '1'};
|
|
});
|
|
|
|
test('Commit hash redirects to change', done => {
|
|
sandbox.stub(element, '_getChanges')
|
|
.returns(Promise.resolve([{_number: 1}]));
|
|
sandbox.stub(element, '_replaceCurrentLocation', url => {
|
|
assert.equal(url, '/r/c/1');
|
|
done();
|
|
});
|
|
|
|
element.params = {view: Gerrit.Nav.View.SEARCH, query: COMMIT_HASH};
|
|
});
|
|
|
|
test('Searching for an invalid change ID searches', () => {
|
|
sandbox.stub(element, '_getChanges')
|
|
.returns(Promise.resolve([]));
|
|
const stub = sandbox.stub(element, '_replaceCurrentLocation');
|
|
|
|
element.params = {view: Gerrit.Nav.View.SEARCH, query: CHANGE_ID};
|
|
flushAsynchronousOperations();
|
|
|
|
assert.isFalse(stub.called);
|
|
});
|
|
|
|
test('Change ID with multiple search results searches', () => {
|
|
sandbox.stub(element, '_getChanges')
|
|
.returns(Promise.resolve([{}, {}]));
|
|
const stub = sandbox.stub(element, '_replaceCurrentLocation');
|
|
|
|
element.params = {view: Gerrit.Nav.View.SEARCH, query: CHANGE_ID};
|
|
flushAsynchronousOperations();
|
|
|
|
assert.isFalse(stub.called);
|
|
});
|
|
});
|
|
});
|
|
</script>
|