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. Change-Id: I5783f54179f6046af40cb05f043eedae6749211d
diff --git a/README.md b/README.md index 70a02fb..4f07fec 100644 --- a/README.md +++ b/README.md
@@ -6,7 +6,7 @@ For running unit tests execute: - bazel test --test_output=all //plugins/automerger/web:karma_test + bazel test --test_output=all //plugins/automerger/web:web_test_runner For checking or fixing eslint formatter problems run:
diff --git a/web/BUILD b/web/BUILD index 0f8e233..f66edb2 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( @@ -51,10 +51,15 @@ entry_point = "_bazel_ts_out/plugin.js", ) -karma_test( - name = "karma_test", - srcs = ["karma_test.sh"], - data = [":automerger-ts-tests"], +web_test_runner( + name = "web_test_runner", + srcs = ["web_test_runner.sh"], + data = [ + ":tsconfig", + ":automerger-ts-tests", + "@plugins_npm//:node_modules", + "@ui_dev_npm//:node_modules", + ], ) plugin_eslint()
diff --git a/web/automerger_test.ts b/web/automerger_test.ts index 6e55bdb..11979a8 100644 --- a/web/automerger_test.ts +++ b/web/automerger_test.ts
@@ -26,9 +26,13 @@ ChangeId, Timestamp, ChangeInfoId, + PatchSetNumber, + CommitId, } from '@gerritcodereview/typescript-api/rest-api'; import {Automerger, ConfigMap, UIActionInfo} from './automerger'; import {queryAll, queryAndAssert, waitUntil} from './test/test-util'; +import {assert} from '@open-wc/testing'; +import sinon from 'sinon'; const change: ChangeInfo = { _number: 123 as NumericChangeId, @@ -44,6 +48,8 @@ status: ChangeStatus.NEW, subject: 'test-subject', updated: '2021-09-02 12:12:12.000000000' as Timestamp, + current_revision_number: 1 as PatchSetNumber, + current_revision: 'abc' as CommitId, }; const configMap: ConfigMap = { @@ -55,7 +61,8 @@ suite('automerger tests', () => { let automerger: Automerger; let callback: (() => void) | undefined; - let sendStub: sinon.SinonStub; + let fetchStub: sinon.SinonStub; + let getStub: sinon.SinonStub; let postStub: sinon.SinonStub; let reloadStub: sinon.SinonStub; let popup: HTMLElement | undefined; @@ -70,8 +77,10 @@ }; setup(async () => { - sendStub = sinon.stub(); - sendStub.returns(Promise.resolve({})); + fetchStub = sinon.stub(); + fetchStub.returns(Promise.resolve({})); + getStub = sinon.stub(); + getStub.returns(Promise.resolve({})); postStub = sinon.stub(); postStub.returns(Promise.resolve(configMap)); const fakePlugin = { @@ -90,7 +99,8 @@ }, restApi: () => { return { - send: sendStub, + fetch: fetchStub, + get: getStub, post: postStub, }; }, @@ -108,8 +118,8 @@ test('callback set, popup created', async () => { assert.isNotOk(callback); assert.isNotOk(popup); - automerger.onShowChange(change); + automerger.onShowRevision(); assert.isOk(callback, 'callback expected to be set'); if (callback) callback(); await waitUntil(() => popup !== undefined); @@ -118,6 +128,7 @@ test('popup contains 3 checkboxes', async () => { automerger.onShowChange(change); + automerger.onShowRevision(); await waitUntil(() => postStub.called); if (callback) callback(); await waitUntil(() => popup !== undefined); @@ -127,12 +138,13 @@ test('popup contains button, which triggers send', async () => { automerger.onShowChange(change); + automerger.onShowRevision(); await waitUntil(() => postStub.called); if (callback) callback(); await waitUntil(() => popup !== undefined); const button = queryAndAssert<HTMLElement>(popup, 'gr-button'); button.click(); - assert.isTrue(sendStub.called, 'expected send() to be called'); + assert.isTrue(getStub.called, 'expected send() to be called'); await waitUntil(() => reloadStub.called); }); });
diff --git a/web/karma_test.sh b/web/karma_test.sh deleted file mode 100755 index 9597611..0000000 --- a/web/karma_test.sh +++ /dev/null
@@ -1,6 +0,0 @@ -#!/bin/bash - -set -euo pipefail -./$1 start $2 --single-run \ - --root 'plugins/automerger/web/_bazel_ts_out_tests/' \ - --test-files '*_test.js'
diff --git a/web/plugin.ts b/web/plugin.ts index 03e107b..251088b 100644 --- a/web/plugin.ts +++ b/web/plugin.ts
@@ -19,7 +19,7 @@ import {ChangeInfo} from '@gerritcodereview/typescript-api/rest-api'; import {Automerger} from './automerger'; -window.Gerrit.install(plugin => { +window.Gerrit?.install(plugin => { const automerger = new Automerger(plugin); plugin.on(EventType.SHOW_CHANGE, (change: ChangeInfo) => automerger.onShowChange(change)
diff --git a/web/test/test-setup.ts b/web/test/test-setup.ts index 150be02..72d950c 100644 --- a/web/test/test-setup.ts +++ b/web/test/test-setup.ts
@@ -14,18 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import 'chai/chai'; + +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;
diff --git a/web/tsconfig.json b/web/tsconfig.json index dc7d0ac..136879e 100644 --- a/web/tsconfig.json +++ b/web/tsconfig.json
@@ -1,7 +1,7 @@ { "extends": "../../tsconfig-plugins-base.json", "compilerOptions": { - "outDir": "../../../.ts-out/plugins/automerger", /* overridden by bazel */ + "outDir": "../../../.ts-out/plugins/automerger" /* 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..2765d55 --- /dev/null +++ b/web/web_test_runner.sh
@@ -0,0 +1,7 @@ +#!/bin/bash + +set -euo pipefail +./$1 --config $2 \ + --dir 'plugins/automerger/web/_bazel_ts_out_tests' \ + --test-files 'plugins/automerger/web/_bazel_ts_out_tests/*_test.js' \ + --ts-config="plugins/automerger/web/tsconfig.json"