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"