Convert gr-repo-list_test.js to typescript Change-Id: Ia70dfc0686faad26192794381f7bc2f40bd305cf
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.js b/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.js deleted file mode 100644 index 8fef4d0..0000000 --- a/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.js +++ /dev/null
@@ -1,189 +0,0 @@ -/** - * @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.js'; -import './gr-repo-list.js'; -import {page} from '../../../utils/page-wrapper-utils.js'; -import 'lodash/lodash.js'; -import {stubRestApi} from '../../../test/test-utils.js'; - -const basicFixture = fixtureFromElement('gr-repo-list'); - -function createRepo(name, counter) { - return { - id: `${name}${counter}`, - name: `${name}`, - state: 'ACTIVE', - web_links: [ - { - name: 'diffusion', - url: `https://phabricator.example.org/r/project/${name}${counter}`, - }, - ], - }; -} - -let counter; -const repoGenerator = () => createRepo('test', ++counter); - -suite('gr-repo-list tests', () => { - let element; - let repos; - - let value; - - setup(() => { - sinon.stub(page, 'show'); - element = basicFixture.instantiate(); - counter = 0; - }); - - suite('list with repos', () => { - setup(async () => { - repos = _.times(26, repoGenerator); - stubRestApi('getRepos').returns(Promise.resolve(repos)); - await element._paramsChanged(value); - await flush(); - }); - - test('test for test repo in the list', async () => { - await flush(); - assert.equal(element._repos[1].id, 'test2'); - }); - - test('_shownRepos', () => { - assert.equal(element._shownRepos.length, 25); - }); - - test('_maybeOpenCreateOverlay', () => { - const overlayOpen = sinon.stub(element.$.createOverlay, 'open'); - element._maybeOpenCreateOverlay(); - assert.isFalse(overlayOpen.called); - const params = {}; - element._maybeOpenCreateOverlay(params); - assert.isFalse(overlayOpen.called); - params.openCreateModal = true; - element._maybeOpenCreateOverlay(params); - assert.isTrue(overlayOpen.called); - }); - }); - - suite('list with less then 25 repos', () => { - setup(async () => { - repos = _.times(25, repoGenerator); - stubRestApi('getRepos').returns(Promise.resolve(repos)); - await element._paramsChanged(value); - await flush(); - }); - - test('_shownRepos', () => { - assert.equal(element._shownRepos.length, 25); - }); - }); - - suite('filter', () => { - let reposFiltered; - setup(() => { - repos = _.times(25, repoGenerator); - reposFiltered = _.times(1, repoGenerator); - }); - - test('_paramsChanged', async () => { - const repoStub = stubRestApi('getRepos'); - repoStub.returns(Promise.resolve(repos)); - const value = { - filter: 'test', - offset: 25, - }; - await element._paramsChanged(value); - assert.isTrue(repoStub.lastCall.calledWithExactly('test', 25, 25)); - }); - - test('latest repos requested are always set', async () => { - const repoStub = stubRestApi('getRepos'); - repoStub.withArgs('test').returns(Promise.resolve(repos)); - repoStub.withArgs('filter').returns(Promise.resolve(reposFiltered)); - element._filter = 'test'; - - // Repos are not set because the element._filter differs. - await element._getRepos('filter', 25, 0); - assert.deepEqual(element._repos, []); - }); - - test('filter is case insensitive', async () => { - const repoStub = stubRestApi('getRepos'); - const repos = [createRepo('aSDf', 0)]; - repoStub.withArgs('asdf').returns(Promise.resolve(repos)); - element._filter = 'asdf'; - await element._getRepos('asdf', 25, 0); - assert.equal(element._repos.length, 1); - }); - }); - - suite('loading', () => { - test('correct contents are displayed', () => { - assert.isTrue(element._loading); - assert.equal(element.computeLoadingClass(element._loading), 'loading'); - assert.equal(getComputedStyle(element.$.loading).display, 'block'); - - element._loading = false; - element._repos = _.times(25, repoGenerator); - - flush(); - assert.equal(element.computeLoadingClass(element._loading), ''); - assert.equal(getComputedStyle(element.$.loading).display, 'none'); - }); - }); - - suite('create new', () => { - test('_handleCreateClicked called when create-click fired', () => { - sinon.stub(element, '_handleCreateClicked'); - element.shadowRoot - .querySelector('gr-list-view').dispatchEvent( - new CustomEvent('create-clicked', { - composed: true, bubbles: true, - })); - assert.isTrue(element._handleCreateClicked.called); - }); - - test('_handleCreateClicked opens modal', () => { - const openStub = sinon.stub(element.$.createOverlay, 'open').returns( - Promise.resolve()); - element._handleCreateClicked(); - assert.isTrue(openStub.called); - }); - - test('_handleCreateRepo called when confirm fired', () => { - sinon.stub(element, '_handleCreateRepo'); - element.$.createDialog.dispatchEvent( - new CustomEvent('confirm', { - composed: true, bubbles: true, - })); - assert.isTrue(element._handleCreateRepo.called); - }); - - test('_handleCloseCreate called when cancel fired', () => { - sinon.stub(element, '_handleCloseCreate'); - element.$.createDialog.dispatchEvent( - new CustomEvent('cancel', { - composed: true, bubbles: true, - })); - assert.isTrue(element._handleCloseCreate.called); - }); - }); -}); -
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.ts b/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.ts new file mode 100644 index 0000000..7f7b0cf --- /dev/null +++ b/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.ts
@@ -0,0 +1,233 @@ +/** + * @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-repo-list'; +import {GrRepoList} from './gr-repo-list'; +import {page} from '../../../utils/page-wrapper-utils'; +import {queryAndAssert, stubRestApi} from '../../../test/test-utils'; +import { + UrlEncodedRepoName, + ProjectInfoWithName, + RepoName, +} from '../../../types/common'; +import {AppElementAdminParams} from '../../gr-app-types'; +import {ProjectState} from '../../../constants/constants'; +import {GerritView} from '../../../services/router/router-model'; +import {GrOverlay} from '../../shared/gr-overlay/gr-overlay'; +import {GrDialog} from '../../shared/gr-dialog/gr-dialog'; +import {GrListView} from '../../shared/gr-list-view/gr-list-view'; + +const basicFixture = fixtureFromElement('gr-repo-list'); + +function createRepo(name: string, counter: number) { + return { + id: `${name}${counter}` as UrlEncodedRepoName, + name: `${name}` as RepoName, + state: 'ACTIVE' as ProjectState, + web_links: [ + { + name: 'diffusion', + url: `https://phabricator.example.org/r/project/${name}${counter}`, + }, + ], + }; +} + +function createRepoList(name: string, n: number) { + const repos = []; + for (let i = 0; i < n; ++i) { + repos.push(createRepo(name, i)); + } + return repos; +} + +suite('gr-repo-list tests', () => { + let element: GrRepoList; + let repos: ProjectInfoWithName[]; + + const value: AppElementAdminParams = {view: GerritView.ADMIN, adminView: ''}; + + setup(() => { + sinon.stub(page, 'show'); + element = basicFixture.instantiate(); + }); + + suite('list with repos', () => { + setup(async () => { + repos = createRepoList('test', 26); + stubRestApi('getRepos').returns(Promise.resolve(repos)); + await element._paramsChanged(value); + await flush(); + }); + + test('test for test repo in the list', async () => { + await flush(); + assert.equal(element._repos[0].id, 'test0'); + assert.equal(element._repos[1].id, 'test1'); + assert.equal(element._repos[2].id, 'test2'); + }); + + test('_shownRepos', () => { + assert.equal(element._shownRepos.length, 25); + }); + + test('_maybeOpenCreateOverlay', () => { + const overlayOpen = sinon.stub( + queryAndAssert<GrOverlay>(element, '#createOverlay'), + 'open' + ); + element._maybeOpenCreateOverlay(); + assert.isFalse(overlayOpen.called); + element._maybeOpenCreateOverlay(undefined); + assert.isFalse(overlayOpen.called); + const params: AppElementAdminParams = { + view: GerritView.ADMIN, + adminView: '', + openCreateModal: true, + }; + element._maybeOpenCreateOverlay(params); + assert.isTrue(overlayOpen.called); + }); + }); + + suite('list with less then 25 repos', () => { + setup(async () => { + repos = createRepoList('test', 25); + stubRestApi('getRepos').returns(Promise.resolve(repos)); + await element._paramsChanged(value); + await flush(); + }); + + test('_shownRepos', () => { + assert.equal(element._shownRepos.length, 25); + }); + }); + + suite('filter', () => { + let reposFiltered: ProjectInfoWithName[]; + + setup(() => { + repos = createRepoList('test', 25); + reposFiltered = createRepoList('filter', 1); + }); + + test('_paramsChanged', async () => { + const repoStub = stubRestApi('getRepos'); + repoStub.returns(Promise.resolve(repos)); + const value: AppElementAdminParams = { + view: GerritView.ADMIN, + adminView: '', + filter: 'test', + offset: 25, + }; + await element._paramsChanged(value); + assert.isTrue(repoStub.lastCall.calledWithExactly('test', 25, 25)); + }); + + test('latest repos requested are always set', async () => { + const repoStub = stubRestApi('getRepos'); + repoStub.withArgs('test', 25).returns(Promise.resolve(repos)); + repoStub.withArgs('filter', 25).returns(Promise.resolve(reposFiltered)); + element._filter = 'test'; + + // Repos are not set because the element._filter differs. + await element._getRepos('filter', 25, 0); + assert.deepEqual(element._repos, []); + }); + + test('filter is case insensitive', async () => { + const repoStub = stubRestApi('getRepos'); + const repos = [createRepo('aSDf', 0)]; + repoStub.withArgs('asdf', 25).returns(Promise.resolve(repos)); + element._filter = 'asdf'; + await element._getRepos('asdf', 25, 0); + assert.equal(element._repos.length, 1); + }); + }); + + suite('loading', () => { + test('correct contents are displayed', () => { + assert.isTrue(element._loading); + assert.equal(element.computeLoadingClass(element._loading), 'loading'); + assert.equal( + getComputedStyle( + queryAndAssert<HTMLTableRowElement>(element, '#loading') + ).display, + 'block' + ); + + element._loading = false; + element._repos = createRepoList('test', 25); + + flush(); + assert.equal(element.computeLoadingClass(element._loading), ''); + assert.equal( + getComputedStyle( + queryAndAssert<HTMLTableRowElement>(element, '#loading') + ).display, + 'none' + ); + }); + }); + + suite('create new', () => { + test('_handleCreateClicked called when create-click fired', () => { + const handleCreateClickedStub = sinon.stub( + element, + '_handleCreateClicked' + ); + queryAndAssert<GrListView>(element, 'gr-list-view').dispatchEvent( + new CustomEvent('create-clicked', { + composed: true, + bubbles: true, + }) + ); + assert.isTrue(handleCreateClickedStub.called); + }); + + test('_handleCreateClicked opens modal', () => { + const openStub = sinon + .stub(queryAndAssert<GrOverlay>(element, '#createOverlay'), 'open') + .returns(Promise.resolve()); + element._handleCreateClicked(); + assert.isTrue(openStub.called); + }); + + test('_handleCreateRepo called when confirm fired', () => { + const handleCreateRepoStub = sinon.stub(element, '_handleCreateRepo'); + queryAndAssert<GrDialog>(element, '#createDialog').dispatchEvent( + new CustomEvent('confirm', { + composed: true, + bubbles: true, + }) + ); + assert.isTrue(handleCreateRepoStub.called); + }); + + test('_handleCloseCreate called when cancel fired', () => { + const handleCloseCreateStub = sinon.stub(element, '_handleCloseCreate'); + queryAndAssert<GrDialog>(element, '#createDialog').dispatchEvent( + new CustomEvent('cancel', { + composed: true, + bubbles: true, + }) + ); + assert.isTrue(handleCloseCreateStub.called); + }); + }); +});