Merge "Refresh checks table automatically"
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..24636d6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+bower_components
+.vscode
+web-component-tester
\ No newline at end of file
diff --git a/README.md b/README.md
index ec00a50..f8b7169 100644
--- a/README.md
+++ b/README.md
@@ -2,3 +2,8 @@
This plugin provides a unified experience for checkers (CI systems, static
analyzers, etc.) to integrate with Gerrit Code Review.
+
+This plugin uses [polymer-cli](https://www.polymer-project.org/1.0/docs/tools/polymer-cli#install) to test.
+
+After `bower install`, running `polymer test -l chrome` will run all tests in Chrome, and running `polymer serve` and navigating to http://127.0.0.1:8081/components/checks/gr-checks/gr-checks-view_test.html allows for manual debugging.
+
diff --git a/bower.json b/bower.json
new file mode 100644
index 0000000..69b6458
--- /dev/null
+++ b/bower.json
@@ -0,0 +1,23 @@
+{
+ "name": "checks",
+ "authors": [
+ "dhruvsri@google.com"
+ ],
+ "license": "http://www.apache.org/licenses/LICENSE-2.0",
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "codemirror-minified": "^5.37.0",
+ "chai": "^4.0.0"
+ },
+ "devDependencies": {
+ "web-component-tester": "Polymer/web-component-tester#^6.0.0",
+ "iron-test-helpers": "^2.0.0",
+ "chai": "^4.0.0",
+ "moment": "^2.24.0"
+ },
+ "private": true,
+ "resolutions": {
+ "chai": "^4.0.0"
+ }
+}
diff --git a/gr-checks/gr-checks-change-list-header-view_test.html b/gr-checks/gr-checks-change-list-header-view_test.html
index d9113f5..b6aa3be 100644
--- a/gr-checks/gr-checks-change-list-header-view_test.html
+++ b/gr-checks/gr-checks-change-list-header-view_test.html
@@ -1,11 +1,12 @@
<!DOCTYPE html>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-<script src="imports.js"></script>
-<script src="webcomponentsjs/webcomponents-lite.js"></script>
-<link rel="import" href="polymer/polymer.html">
+<script src="/bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+<script src="/bower_components/web-component-tester/browser.js"></script>
+
+<link rel="import" href="/bower_components/polymer/polymer.html">
<title>gr-checks-change-list-header-view</title>
-<link rel="import" href="webcomponent_lib/gr-checks-change-list-header-view.html">
+<link rel="import" href="gr-checks-change-list-header-view.html">
<test-fixture id="basic">
<template is="dom-template">
diff --git a/gr-checks/gr-checks-change-list-item-cell-view_test.html b/gr-checks/gr-checks-change-list-item-cell-view_test.html
index c50f7e6..24d5f6b 100644
--- a/gr-checks/gr-checks-change-list-item-cell-view_test.html
+++ b/gr-checks/gr-checks-change-list-item-cell-view_test.html
@@ -1,11 +1,12 @@
<!DOCTYPE html>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-<script src="imports.js"></script>
-<script src="webcomponentsjs/webcomponents-lite.js"></script>
-<link rel="import" href="polymer/polymer.html">
+<script src="/bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+<script src="/bower_components/web-component-tester/browser.js"></script>
+
+<link rel="import" href="/bower_components/polymer/polymer.html">
<title>gr-checks-change-list-item-cell-view</title>
-<link rel="import" href="webcomponent_lib/gr-checks-change-list-item-cell-view.html">
+<link rel="import" href="gr-checks-change-list-item-cell-view.html">
<test-fixture id="basic">
<template is="dom-template">
diff --git a/gr-checks/gr-checks-change-view-tab-header-view_test.html b/gr-checks/gr-checks-change-view-tab-header-view_test.html
index 9915502..79fb0a9 100644
--- a/gr-checks/gr-checks-change-view-tab-header-view_test.html
+++ b/gr-checks/gr-checks-change-view-tab-header-view_test.html
@@ -1,11 +1,13 @@
<!DOCTYPE html>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-<script src="imports.js"></script>
-<script src="webcomponentsjs/webcomponents-lite.js"></script>
-<link rel="import" href="polymer/polymer.html">
+
+<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+<script src="/bower_components/web-component-tester/browser.js"></script>
+
+<link rel="import" href="/bower_components/polymer/polymer.html">
<title>gr-checks-change-view-tab-header-view</title>
-<link rel="import" href="webcomponent_lib/gr-checks-change-view-tab-header-view.html">
+<link rel="import" href="gr-checks-change-view-tab-header-view.html">
<test-fixture id="basic">
<template is="dom-template">
diff --git a/gr-checks/gr-checks-chip-view.js b/gr-checks/gr-checks-chip-view.js
index 3ed66e1..5e8d6c9 100644
--- a/gr-checks/gr-checks-chip-view.js
+++ b/gr-checks/gr-checks-chip-view.js
@@ -23,6 +23,8 @@
FAILED: 'failed',
};
+ const CHECKS_POLL_INTERVAL_MS = 60 * 1000;
+
const Defs = {};
/**
* @typedef {{
@@ -81,11 +83,13 @@
_downgradeFailureToWarning: {
type: Boolean,
value: false
- }
+ },
+ pollChecksInterval: Object,
+ visibilityChangeListener: Object
},
observers: [
- '_fetchChecks(change, revision, getChecks)',
+ '_pollChecksRegularly(change, revision, getChecks)',
],
listeners: {
@@ -115,13 +119,35 @@
getChecks(change._number, revision._number).then(checks => {
this.set('_hasChecks', checks.length > 0);
if (checks.length > 0) {
- this.set(
- '_checkStatuses', computeCheckStatuses(checks));
+ this.set('_checkStatuses', computeCheckStatuses(checks));
this.set('_downgradeFailureToWarning', downgradeFailureToWarning(checks));
}
});
},
+ onVisibililityChange() {
+ if (document.hidden) {
+ clearInterval(this.pollChecksInterval);
+ return;
+ }
+ this._pollChecksRegularly(this.change, this.revision, this.getChecks);
+ },
+
+ _pollChecksRegularly(change, revision, getChecks) {
+ if (this.pollChecksInterval) {
+ clearInterval(this.pollChecksInterval);
+ }
+ const poll = () => this._fetchChecks(change, revision, getChecks);
+ poll();
+ this.pollChecksInterval = setInterval(poll, CHECKS_POLL_INTERVAL_MS);
+ if (!this.visibilityChangeListener) {
+ this.visibilityChangeListener = document.addEventListener(
+ 'visibilitychange',
+ this.onVisibililityChange.bind(this)
+ );
+ }
+ },
+
/**
* @param {!Object} checkStatuses The number of checks in each status.
* @return {string}
diff --git a/gr-checks/gr-checks-chip-view_test.html b/gr-checks/gr-checks-chip-view_test.html
index e8decce..b13a855 100644
--- a/gr-checks/gr-checks-chip-view_test.html
+++ b/gr-checks/gr-checks-chip-view_test.html
@@ -1,33 +1,34 @@
<!DOCTYPE html>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-<script src="imports.js"></script>
-<script src="webcomponentsjs/webcomponents-lite.js"></script>
-<link rel="import" href="polymer/polymer.html">
+<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+<script src="/bower_components/web-component-tester/browser.js"></script>
+
+<link rel="import" href="/bower_components/polymer/polymer.html">
<title>gr-checks-chip-view</title>
-<link rel="import" href="webcomponent_lib/gr-checks-chip-view.html">
+<link rel="import" href="gr-checks-chip-view.html">
<test-fixture id="basic">
<template is="dom-template">
- <gr-checks-chip-view change="[[change]]" revision="[[revision]]" get-gr-checks="[[getChecks]]"></gr-checks-chip-view>
+ <gr-checks-chip-view change="[[change]]" revision="[[revision]]" get-checks="[[getChecks]]"></gr-checks-chip-view>
</template>
</test-fixture>
<script>
const CHECK1 = {
checkId: 'test-check-id',
- logUrl: 'http://example.com/test-log-url',
- startTime: "2019-02-06T22:25:19.269Z",
- finishTime: "2019-02-06T22:25:44.574Z",
- status: 'SUCCESSFUL',
+ log: 'http://example.com/test-log-url',
+ started: "2019-02-06T22:25:19.269Z",
+ finished: "2019-02-06T22:25:44.574Z",
+ state: 'SUCCESSFUL',
};
const CHECK2 = {
checkId: 'test-check-id-2',
- logUrl: 'http://example.com/test-log-url',
- startTime: "2019-02-06T22:25:19.269Z",
- finishTime: "2019-02-06T22:25:44.574Z",
- status: 'FAILED',
+ log: 'http://example.com/test-log-url',
+ started: "2019-02-06T22:25:19.269Z",
+ finished: "2019-02-06T22:25:44.574Z",
+ state: 'FAILED',
};
suite('gr-checks-chip-view tests', () => {
diff --git a/gr-checks/gr-checks-item_test.html b/gr-checks/gr-checks-item_test.html
index ef133aa..dc155dc 100644
--- a/gr-checks/gr-checks-item_test.html
+++ b/gr-checks/gr-checks-item_test.html
@@ -1,11 +1,12 @@
<!DOCTYPE html>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-<script src="imports.js"></script>
-<script src="webcomponentsjs/webcomponents-lite.js"></script>
-<link rel="import" href="polymer/polymer.html">
+<script src="../../../bower_components/webcomponentsjs/webcomponents.js"></script>
+<script src="/bower_components/web-component-tester/browser.js"></script>
+<script src="../../../bower_components/moment/min/moment.min.js"></script>
+<link rel="import" href="/bower_components/polymer/polymer.html">
<title>gr-checks-item</title>
-<link rel="import" href="webcomponent_lib/gr-checks-item.html">
+<link rel="import" href="gr-checks-item.html">
<test-fixture id="basic">
<template is="dom-template">
@@ -31,9 +32,9 @@
retryCheck: retryCheckSpy,
check: {
checkId: 'test-check-id',
- logUrl: 'http://example.com/test-log-url',
- startTime: "2019-02-06T22:25:19.269Z",
- finishTime: "2019-02-06T22:25:44.574Z",
+ url: 'http://example.com/test-log-url',
+ started: "2019-02-06T22:25:19.269Z",
+ finished: "2019-02-06T22:25:44.574Z",
},
});
flush(done);
@@ -46,14 +47,9 @@
assert.exists(status);
});
- test('renders the checking system', () => {
- const checkingSystem = element.$$('td:nth-child(4)');
- assert.equal(checkingSystem .textContent.trim(), "Check System");
- });
-
- test('renders the run date', () => {
+ test('renders the run time', () => {
const name = element.$$('td:nth-child(5)');
- assert.equal(name .textContent.trim(), "2/6/2019");
+ assert.equal(name .textContent.trim(), "11:25:19 PM");
});
suite('duration', () => {
@@ -65,9 +61,9 @@
test('renders 0 sec when the start and end time are the same', () => {
element.check = {
checkId: 'test-check-id',
- logUrl: 'http://example.com/test-log-url',
- startTime: "2019-02-06T22:25:19.269Z",
- finishTime: "2019-02-06T22:25:19.269Z",
+ url: 'http://example.com/test-log-url',
+ started: "2019-02-06T22:25:19.269Z",
+ finished: "2019-02-06T22:25:19.269Z",
};
const name = element.$$('td:nth-child(6)');
assert.equal(name .textContent.trim(), "0 sec");
@@ -80,22 +76,24 @@
assert.equal(logLink.textContent.trim(), "View log");
});
- suite('retryCheck', () => {
- let retryCheckLink;
+ // pausing this check until retry api is available from backend
+ // suite('retryCheck', () => {
+ // let retryCheckLink;
- setup(() => {
- retryCheckLink = element.$$('td:nth-child(7) > gr-button');
- });
+ // setup(() => {
+ // retryCheckLink = element.$$('td:nth-child(7) > gr-button');
+ // });
- test('shows a link to the log url', () => {
- assert.equal(retryCheckLink.textContent.trim(), "Re-run");
- });
+ // test('shows a link to the retry button', () => {
+ // assert.equal(retryCheckLink.textContent.trim(), "Re-run");
+ // });
- test('clicking on the link calls the retryCheck property', () => {
- assert.isFalse(retryCheckSpy.called);
- retryCheckLink.click();
- assert.isTrue(retryCheckSpy.called);
- });
- });
+ // test('clicking on the link calls the retryCheck property', () => {
+ // assert.isFalse(retryCheckSpy.called);
+ // retryCheckLink.click();
+ // assert.isTrue(retryCheckSpy.called);
+ // });
+ // });
+
});
</script>
diff --git a/gr-checks/gr-checks-status.html b/gr-checks/gr-checks-status.html
index a1072bd..591d228 100644
--- a/gr-checks/gr-checks-status.html
+++ b/gr-checks/gr-checks-status.html
@@ -19,7 +19,7 @@
vertical-align: middle;
}
</style>
- <span class$="[[_className]]">
+ <span>
<template is="dom-if" if="[[_isUnevaluated(status)]]">
<svg width="18" height="18" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fill-rule="evenodd">
diff --git a/gr-checks/gr-checks-status_test.html b/gr-checks/gr-checks-status_test.html
index 6f6a98c..24b00d0 100644
--- a/gr-checks/gr-checks-status_test.html
+++ b/gr-checks/gr-checks-status_test.html
@@ -1,11 +1,12 @@
<!DOCTYPE html>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-<script src="imports.js"></script>
-<script src="webcomponentsjs/webcomponents-lite.js"></script>
-<link rel="import" href="polymer/polymer.html">
+<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+<script src="/bower_components/web-component-tester/browser.js"></script>
+
+<link rel="import" href="/bower_components/polymer/polymer.html">
<title>gr-checks-item</title>
-<link rel="import" href="webcomponent_lib/gr-checks-status.html">
+<link rel="import" href="gr-checks-status.html">
<test-fixture id="basic">
<template is="dom-template">
@@ -35,8 +36,8 @@
});
flush(() => {
- const icon = element.$$(`span.${expectedStatusClass} i`);
- assert.exists(icon);
+ const svg = element.$$(`span svg`);
+ assert.exists(svg);
done();
});
});
@@ -47,7 +48,7 @@
});
flush(() => {
- const text = element.$$(`span.${expectedStatusClass} span`);
+ const text = element.$$(`span span`);
assert.equal(text.textContent.trim(), statusText);
done();
});
@@ -58,6 +59,7 @@
testStatus('successful', 'Successful', ['SUCCESSFUL']);
testStatus('failed', 'Failed', ['FAILED']);
- testStatus('in-progress', 'In progress', ['NOT_STARTED', 'SCHEDULED', 'RUNNING']);
+ testStatus('running', 'In progress', ['RUNNING', 'SCHEDULED']);
+ testStatus('unevaluated', 'Unevaluated', ['NOT_STARTED']);
});
</script>
diff --git a/gr-checks/gr-checks-view_test.html b/gr-checks/gr-checks-view_test.html
index 6607e66..d26045e 100644
--- a/gr-checks/gr-checks-view_test.html
+++ b/gr-checks/gr-checks-view_test.html
@@ -1,11 +1,12 @@
<!DOCTYPE html>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
-<script src="imports.js"></script>
-<script src="webcomponentsjs/webcomponents-lite.js"></script>
-<link rel="import" href="polymer/polymer.html">
+<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+<script src="/bower_components/web-component-tester/browser.js"></script>
+
+<link rel="import" href="/bower_components/polymer/polymer.html">
<title>gr-checks-item</title>
-<link rel="import" href="webcomponent_lib/gr-checks-view.html">
+<link rel="import" href="gr-checks-view.html">
<test-fixture id="basic">
<template is="dom-template">
@@ -75,6 +76,7 @@
isConfigured: isConfiguredSpy,
change: {
'project': 'test-repository',
+ '_number': 2,
'revisions': {
'first-sha': "test-revision",
'second-sha': REVISION,
@@ -93,7 +95,7 @@
test('queries the checks', () => {
assert.isTrue(getChecksSpy.called);
- assert.isTrue(getChecksSpy.calledWith('test-repository', 'second-sha'));
+ assert.isTrue(getChecksSpy.calledWith(2, 3));
});
suite('no checks returned', () => {
diff --git a/test/index.html b/test/index.html
new file mode 100644
index 0000000..b1ffd08
--- /dev/null
+++ b/test/index.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!--
+@license
+Copyright (C) 2018 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.
+-->
+
+<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+<title>Test Runner</title>
+<meta charset="utf-8">
+<script src="../bower_components/webcomponentsjs/webcomponents.min.js"></script>
+<script src="../bower_components/web-component-tester/browser.js"></script>
+<script>
+ WCT.loadSuites([
+ '../gr-checks/gr-checks-change-list-header-view_test.html',
+ '../gr-checks/gr-checks-change-list-item-cell-view_test.html',
+ '../gr-checks/gr-checks-change-view-tab-header-view_test.html',
+ '../gr-checks/gr-checks-chip-view_test.html',
+ '../gr-checks/gr-checks-item_test.html',
+ '../gr-checks/gr-checks-status_test.html',
+ '../gr-checks/gr-checks-view_test.html'
+ ]);
+</script>
\ No newline at end of file