Merge "Fixing issue with expired credentials"
diff --git a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.js b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.js
index 80c8480..c57a1eb 100644
--- a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.js
+++ b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.js
@@ -326,12 +326,12 @@
const isLoggedIn = !!this._cache.get('/accounts/self/detail');
if (isLoggedIn && err && err.message === FAILED_TO_FETCH_ERROR) {
this.checkCredentials();
- return;
- }
- if (req.errFn) {
- req.errFn.call(undefined, null, err);
} else {
- this.fire('network-error', {error: err});
+ if (req.errFn) {
+ req.errFn.call(undefined, null, err);
+ } else {
+ this.fire('network-error', {error: err});
+ }
}
throw err;
});
@@ -1127,11 +1127,15 @@
}).then(res => {
this._credentialCheck.checking = false;
if (res) {
- this._cache.delete('/accounts/self/detail');
+ this._cache.set('/accounts/self/detail', res);
}
return res;
}).catch(err => {
this._credentialCheck.checking = false;
+ if (err && err.message === FAILED_TO_FETCH_ERROR) {
+ this.fire('auth-error');
+ this._cache.delete('/accounts/self/detail');
+ }
});
},
diff --git a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface_test.html b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface_test.html
index d00e00d..4c35151 100644
--- a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface_test.html
+++ b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface_test.html
@@ -465,7 +465,26 @@
element.addEventListener('server-error', serverErrorStub);
const authErrorStub = sandbox.stub();
element.addEventListener('auth-error', authErrorStub);
- element._fetchJSON('/bar').then(r => {
+ element._fetchJSON('/bar').finally(r => {
+ flush(() => {
+ assert.isTrue(authErrorStub.called);
+ assert.isFalse(serverErrorStub.called);
+ assert.isFalse(element._cache.has('/accounts/self/detail'));
+ done();
+ });
+ });
+ });
+
+ test('auth failure - test all failed to fetch', done => {
+ window.fetch.returns(
+ Promise.reject(new Error('Failed to fetch')));
+ // Emulate logged in.
+ element._cache.set('/accounts/self/detail', {});
+ const serverErrorStub = sandbox.stub();
+ element.addEventListener('server-error', serverErrorStub);
+ const authErrorStub = sandbox.stub();
+ element.addEventListener('auth-error', authErrorStub);
+ element._fetchJSON('/bar').finally(r => {
flush(() => {
assert.isTrue(authErrorStub.called);
assert.isFalse(serverErrorStub.called);