Merge "Fix failing tests"
diff --git a/gr-checks/gr-checks-item_test.html b/gr-checks/gr-checks-item_test.html
index dc155dc..826f99d 100644
--- a/gr-checks/gr-checks-item_test.html
+++ b/gr-checks/gr-checks-item_test.html
@@ -43,18 +43,18 @@
     teardown(() => { sandbox.restore(); });
 
     test('renders the status', () => {
-      const status = element.$$('td:nth-child(3) > gr-checks-status');
+      const status = element.$$('td:nth-child(4) > gr-checks-status');
       assert.exists(status);
     });
 
     test('renders the run time', () => {
-      const name = element.$$('td:nth-child(5)');
+      const name = element.$$('td:nth-child(6)');
       assert.equal(name .textContent.trim(), "11:25:19 PM");
     });
 
     suite('duration', () => {
       test('renders the run duration', () => {
-        const name = element.$$('td:nth-child(6)');
+        const name = element.$$('td:nth-child(7)');
         assert.equal(name .textContent.trim(), "25 sec");
       });
 
@@ -65,13 +65,13 @@
           started: "2019-02-06T22:25:19.269Z",
           finished: "2019-02-06T22:25:19.269Z",
         };
-        const name = element.$$('td:nth-child(6)');
+        const name = element.$$('td:nth-child(7)');
         assert.equal(name .textContent.trim(), "0 sec");
       });
     });
 
     test('renders a link to the log', () => {
-      const logLink = element.$$('td:nth-child(7) > a');
+      const logLink = element.$$('td:nth-child(8) > a');
       assert.equal(logLink.getAttribute('href'), "http://example.com/test-log-url");
       assert.equal(logLink.textContent.trim(), "View log");
     });
diff --git a/gr-checks/gr-checks-status_test.html b/gr-checks/gr-checks-status_test.html
index 24b00d0..bc59777 100644
--- a/gr-checks/gr-checks-status_test.html
+++ b/gr-checks/gr-checks-status_test.html
@@ -59,7 +59,8 @@
 
     testStatus('successful', 'Successful', ['SUCCESSFUL']);
     testStatus('failed', 'Failed', ['FAILED']);
-    testStatus('running', 'In progress', ['RUNNING', 'SCHEDULED']);
+    testStatus('running', 'Running', ['RUNNING']);
+    testStatus('running', 'Scheduled', ['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 d26045e..0e133df 100644
--- a/gr-checks/gr-checks-view_test.html
+++ b/gr-checks/gr-checks-view_test.html
@@ -15,6 +15,7 @@
       revision="[[revision]]"
       get-checks="[[getChecks]]"
       is-configured="[[isConfigured]]"
+      plugin="[[plugin]]"
       retry-check="[[retryCheck]]">
     </gr-checks-view>
   </template>
@@ -26,6 +27,7 @@
     logUrl: 'http://example.com/test-log-url',
     startTime: "2019-02-06T22:25:19.269Z",
     finishTime: "2019-02-06T22:25:44.574Z",
+    checker_name: "test checker"
   };
 const REVISION = {
   "kind": "REWORK",
@@ -51,6 +53,10 @@
   let retryCheckSpy;
   let isConfiguredSpy;
   let isConfiguredResolve;
+  let getAccountSpy, getAccountPromise, getAccountResolve;
+  let fetchJSONSpy, fetchJSONPromise, fetchJSONResolve;
+  let getAccountCapabilitiesSpy, getAccountCapabilitiesPromise,
+    getAccountCapabilitiesResolve;
 
   setup((done) => {
     sandbox = sinon.sandbox.create();
@@ -70,6 +76,31 @@
     retryCheckSpy = sinon.stub();
     retryCheckSpy.returns(Promise.resolve());
 
+    const plugin = {};
+    getAccountSpy = sinon.stub();
+    const getAccountPromise = new Promise((resolve, reject) => {
+      getAccountResolve = resolve;
+    })
+    getAccountSpy.returns(getAccountPromise);
+
+    fetchJSONSpy = sinon.stub();
+    const fetchJSONPromise = new Promise((resolve, reject) => {
+      fetchJSONResolve = resolve;
+    })
+    fetchJSONSpy.returns(fetchJSONPromise)
+
+    getAccountCapabilitiesSpy = sinon.stub();
+    const getAccountCapabilitiesPromise = new Promise((resolve, reject) => {
+      getAccountCapabilitiesResolve = resolve;
+    })
+    getAccountCapabilitiesSpy.returns(getAccountCapabilitiesPromise);
+
+    plugin.restApi = () => ({
+      getAccount: getAccountSpy,
+      fetchJSON: fetchJSONSpy,
+      getAccountCapabilities: getAccountCapabilitiesSpy
+    });
+
     element = fixture('basic', {
       retryCheck: retryCheckSpy,
       getChecks: getChecksSpy,
@@ -80,8 +111,9 @@
         'revisions': {
           'first-sha': "test-revision",
           'second-sha': REVISION,
-        }
+        },
       },
+      plugin: plugin,
       revision: REVISION,
     });
     flush(done);
@@ -90,7 +122,8 @@
   teardown(() => { sandbox.restore(); });
 
   test('renders loading', () => {
-    assert.equal(element.textContent.trim(), 'Loading...');
+    // Element also contains the hidden gr-overlay hence use includes
+    assert(element.textContent.trim().includes('Loading...'));
   });
 
   test('queries the checks', () => {
@@ -109,6 +142,10 @@
       assert.isTrue(isConfiguredSpy.calledWith('test-repository'));
     });
 
+    test('no configure button renders', () => {
+      assert(!element.$$('gr-button'));
+    })
+
     suite('not configured', () => {
       setup((done) => {
         isConfiguredResolve(false);
@@ -119,6 +156,29 @@
         const header = element.$$('h2');
         assert.equal(header.textContent.trim(), 'Code review checks not configured');
       });
+
+      suite('create checker capability false', () => {
+        setup((done) => {
+          getAccountResolve(true);
+          getAccountCapabilitiesResolve({'checks-administrateCheckers': false});
+          flush(done);
+        });
+        test('checker button does not render', () => {
+          assert(!element.$$('gr-button'));
+        });
+      });
+
+      suite('create checker capability true', () => {
+        setup((done) => {
+          getAccountResolve(true);
+          getAccountCapabilitiesResolve({'checks-administrateCheckers': true});
+          flush(done);
+        });
+        test('checker button renders', () => {
+          assert(element.$$('gr-button'));
+        });
+      });
+
     });
 
     suite('no checks ran', () => {
@@ -153,6 +213,29 @@
       const tbody = element.$$('table > tbody');
       assert.lengthOf(tbody.querySelectorAll('gr-checks-item'), 3)
     });
+
+    suite('create checker capability false', () => {
+        setup((done) => {
+          getAccountResolve(true);
+          getAccountCapabilitiesResolve({'checks-administrateCheckers': false});
+          flush(done);
+        });
+        test('checker button does not render', () => {
+          assert(!element.$$('gr-button'));
+        });
+      });
+
+      suite('create checker capability true', () => {
+        setup((done) => {
+          getAccountResolve(true);
+          getAccountCapabilitiesResolve({'checks-administrateCheckers': true});
+          flush(done);
+        });
+        test('checker button renders', () => {
+          assert(element.$$('gr-button'));
+        });
+      });
+
   });
 });
 </script>