blob: 29cbb1a8ca8d56cc83b1947e8fc6ce71f9cbfe2c [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';
import './gr-list-view';
import {GrListView} from './gr-list-view';
import {page} from '../../../utils/page-wrapper-utils';
import {queryAndAssert, stubBaseUrl} from '../../../test/test-utils';
import {GrButton} from '../gr-button/gr-button';
import * as MockInteractions from '@polymer/iron-test-helpers/mock-interactions';
const basicFixture = fixtureFromElement('gr-list-view');
suite('gr-list-view tests', () => {
let element: GrListView;
setup(async () => {
element = basicFixture.instantiate();
await element.updateComplete;
});
test('computeNavLink', () => {
const offset = 25;
const projectsPerPage = 25;
let filter = 'test';
const path = '/admin/projects';
stubBaseUrl('');
assert.equal(
element.computeNavLink(offset, 1, projectsPerPage, filter, path),
'/admin/projects/q/filter:test,50'
);
assert.equal(
element.computeNavLink(offset, -1, projectsPerPage, filter, path),
'/admin/projects/q/filter:test'
);
assert.equal(
element.computeNavLink(offset, 1, projectsPerPage, undefined, path),
'/admin/projects,50'
);
assert.equal(
element.computeNavLink(offset, -1, projectsPerPage, undefined, path),
'/admin/projects'
);
filter = 'plugins/';
assert.equal(
element.computeNavLink(offset, 1, projectsPerPage, filter, path),
'/admin/projects/q/filter:plugins%252F,50'
);
});
test('_onValueChange', async () => {
let resolve: (url: string) => void;
const promise = new Promise(r => (resolve = r));
element.path = '/admin/projects';
sinon.stub(page, 'show').callsFake(r => resolve(r));
element.filter = 'test';
await element.updateComplete;
const url = await promise;
assert.equal(url, '/admin/projects/q/filter:test');
});
test('_filterChanged not reload when swap between falsy values', () => {
const debounceReloadStub = sinon.stub(element, 'debounceReload');
element.filter = undefined;
element.filter = '';
assert.isFalse(debounceReloadStub.called);
});
test('next button', async () => {
element.itemsPerPage = 25;
let projects = new Array(26);
await element.updateComplete;
let loading;
assert.isFalse(element.hideNextArrow(loading, projects));
loading = true;
assert.isTrue(element.hideNextArrow(loading, projects));
loading = false;
assert.isFalse(element.hideNextArrow(loading, projects));
projects = [];
assert.isTrue(element.hideNextArrow(loading, projects));
projects = new Array(4);
assert.isTrue(element.hideNextArrow(loading, projects));
});
test('prev button', async () => {
element.loading = true;
element.offset = 0;
await element.updateComplete;
assert.isTrue(
queryAndAssert<HTMLAnchorElement>(element, '#prevArrow').hasAttribute(
'hidden'
)
);
element.loading = false;
element.offset = 0;
await element.updateComplete;
assert.isTrue(
queryAndAssert<HTMLAnchorElement>(element, '#prevArrow').hasAttribute(
'hidden'
)
);
element.loading = false;
element.offset = 5;
await element.updateComplete;
assert.isFalse(
queryAndAssert<HTMLAnchorElement>(element, '#prevArrow').hasAttribute(
'hidden'
)
);
});
test('createNew link appears correctly', async () => {
assert.isFalse(
queryAndAssert<HTMLDivElement>(
element,
'#createNewContainer'
).classList.contains('show')
);
element.createNew = true;
await element.updateComplete;
assert.isTrue(
queryAndAssert<HTMLDivElement>(
element,
'#createNewContainer'
).classList.contains('show')
);
});
test('fires create clicked event when button tapped', async () => {
const clickHandler = sinon.stub();
element.addEventListener('create-clicked', clickHandler);
element.createNew = true;
await element.updateComplete;
MockInteractions.tap(queryAndAssert<GrButton>(element, '#createNew'));
assert.isTrue(clickHandler.called);
});
test('next/prev links change when path changes', async () => {
const BRANCHES_PATH = '/path/to/branches';
const TAGS_PATH = '/path/to/tags';
const computeNavLinkStub = sinon.stub(element, 'computeNavLink');
element.offset = 0;
element.itemsPerPage = 25;
element.filter = '';
element.path = BRANCHES_PATH;
await element.updateComplete;
assert.equal(computeNavLinkStub.lastCall.args[4], BRANCHES_PATH);
element.path = TAGS_PATH;
await element.updateComplete;
assert.equal(computeNavLinkStub.lastCall.args[4], TAGS_PATH);
});
test('computePage', () => {
assert.equal(element.computePage(0, 25), 1);
assert.equal(element.computePage(50, 25), 3);
});
});