Migrate from karma to web-test-runner We want to get rid of the final remnants of karma from gerrit core. The recommended way to run tests is with web-test-runner. Depends-On: I4e9134e04475d7375d7a09d618892edbe0b555bc Change-Id: I2da2603951304361ba9e47ca968316c5fb29c8b1
diff --git a/web/BUILD b/web/BUILD index 5490c23..e0a9c78 100644 --- a/web/BUILD +++ b/web/BUILD
@@ -1,5 +1,5 @@ load("//tools/js:eslint.bzl", "plugin_eslint") -load("//tools/bzl:js.bzl", "gerrit_js_bundle", "karma_test") +load("//tools/bzl:js.bzl", "gerrit_js_bundle", "web_test_runner") load("@npm//@bazel/typescript:index.bzl", "ts_config", "ts_project") package_group( @@ -52,10 +52,15 @@ entry_point = "_bazel_ts_out/plugin.js", ) -karma_test( - name = "karma_test", - srcs = ["karma_test.sh"], - data = [":delete-project-ts-tests"], +web_test_runner( + name = "web_test_runner", + srcs = ["web_test_runner.sh"], + data = [ + ":tsconfig", + ":delete-project-ts-tests", + "@plugins_npm//:node_modules", + "@ui_dev_npm//:node_modules", + ], ) plugin_eslint()
diff --git a/web/gr-delete-repo.ts b/web/gr-delete-repo.ts index ff4e0d6..91c3649 100644 --- a/web/gr-delete-repo.ts +++ b/web/gr-delete-repo.ts
@@ -60,8 +60,8 @@ static override get styles() { return [ - window.Gerrit.styles.font as CSSResult, - window.Gerrit.styles.modal as CSSResult, + window.Gerrit?.styles.font as CSSResult, + window.Gerrit?.styles.modal as CSSResult, css` :host { display: block; @@ -80,7 +80,7 @@ } get action(): ActionInfo | undefined { - return this.config.actions?.[this.actionId]; + return this.config?.actions?.[this.actionId]; } get actionId(): string {
diff --git a/web/gr-delete-repo_test.ts b/web/gr-delete-repo_test.ts index 2da6b2b..45ed9ce 100644 --- a/web/gr-delete-repo_test.ts +++ b/web/gr-delete-repo_test.ts
@@ -24,16 +24,18 @@ HttpMethod, RepoName, } from '@gerritcodereview/typescript-api/rest-api'; +import {fixture, html, assert} from '@open-wc/testing'; +import sinon from 'sinon'; suite('gr-delete-repo tests', () => { let element: GrDeleteRepo; - let sendStub: sinon.SinonStub; + let fetchStub: sinon.SinonStub; setup(async () => { - sendStub = sinon.stub(); - sendStub.returns(Promise.resolve({})); + fetchStub = sinon.stub(); + fetchStub.returns(Promise.resolve({})); - element = document.createElement('gr-delete-repo'); + element = await fixture(html`<gr-delete-repo></gr-delete-repo>`); element.repoName = 'test-repo-name' as RepoName; element.config = { actions: { @@ -49,26 +51,21 @@ getPluginName: () => 'delete-project', restApi: () => { return { - send: sendStub, + fetch: fetchStub, invalidateReposCache: () => {}, }; }, } as unknown as PluginApi; - document.body.appendChild(element); await element.updateComplete; }); - teardown(() => { - document.body.removeChild(element); - }); - test('confirm and send', () => { const dialog = queryAndAssert<HTMLElement>(element, '#deleteRepoDialog'); dialog.dispatchEvent(new CustomEvent('confirm')); - assert.isTrue(sendStub.called); - const method = sendStub.firstCall.args[0] as HttpMethod; - const endpoint = sendStub.firstCall.args[1] as string; - const json = sendStub.firstCall.args[2]; + assert.isTrue(fetchStub.called); + const method = fetchStub.firstCall.args[0] as HttpMethod; + const endpoint = fetchStub.firstCall.args[1] as string; + const json = fetchStub.firstCall.args[2]; assert.equal(method, HttpMethod.DELETE); assert.equal(endpoint, '/projects/test-repo-name/delete-project~delete'); assert.deepEqual(json, {force: false, preserve: false});
diff --git a/web/karma_test.sh b/web/karma_test.sh deleted file mode 100755 index 35430ad..0000000 --- a/web/karma_test.sh +++ /dev/null
@@ -1,6 +0,0 @@ -#!/bin/bash - -set -euo pipefail -./$1 start $2 --single-run \ - --root 'plugins/delete-project/web/_bazel_ts_out_tests/' \ - --test-files '*_test.js'
diff --git a/web/plugin.ts b/web/plugin.ts index 7355b50..f2e845c 100644 --- a/web/plugin.ts +++ b/web/plugin.ts
@@ -17,6 +17,6 @@ import '@gerritcodereview/typescript-api/gerrit'; import './gr-delete-repo'; -window.Gerrit.install(plugin => { +window.Gerrit?.install(plugin => { plugin.registerCustomComponent('repo-command', 'gr-delete-repo'); });
diff --git a/web/test/test-setup.ts b/web/test/test-setup.ts index 2196ebc..4f113a1 100644 --- a/web/test/test-setup.ts +++ b/web/test/test-setup.ts
@@ -14,30 +14,28 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import 'chai/chai.js'; import '@gerritcodereview/typescript-api/gerrit'; import {css} from 'lit'; +import sinon from 'sinon'; declare global { interface Window { - assert: typeof chai.assert; - expect: typeof chai.expect; sinon: typeof sinon; } - let assert: typeof chai.assert; - let expect: typeof chai.expect; let sinon: typeof sinon; } -window.assert = chai.assert; -window.expect = chai.expect; window.sinon = sinon; window.Gerrit = { install: () => {}, styles: { + font: css``, form: css``, + icon: css``, menuPage: css``, + spinner: css``, subPage: css``, table: css``, + modal: css``, }, };
diff --git a/web/tsconfig.json b/web/tsconfig.json index d12f85e..de5b7f9 100644 --- a/web/tsconfig.json +++ b/web/tsconfig.json
@@ -1,7 +1,7 @@ { "extends": "../../tsconfig-plugins-base.json", "compilerOptions": { - "outDir": "../../../.ts-out/plugins/delete-project", /* overridden by bazel */ + "outDir": "../../../.ts-out/plugins/delete-project" /* overridden by bazel */ }, "include": [ "**/*.ts"
diff --git a/web/web_test_runner.sh b/web/web_test_runner.sh new file mode 100755 index 0000000..60c35ba --- /dev/null +++ b/web/web_test_runner.sh
@@ -0,0 +1,7 @@ +#!/bin/bash + +set -euo pipefail +./$1 --config $2 \ + --dir 'plugins/delete-project/web/_bazel_ts_out_tests' \ + --test-files 'plugins/delete-project/web/_bazel_ts_out_tests/*_test.js' \ + --type-config="plugins/delete-project/web/tsconfig.json"