diff --git a/ui/app/controllers/settings/tokens.js b/ui/app/controllers/settings/tokens.js
index 956268374fb6..541431fb463f 100644
--- a/ui/app/controllers/settings/tokens.js
+++ b/ui/app/controllers/settings/tokens.js
@@ -31,6 +31,8 @@ export default class Tokens extends Controller {
tokenIsValid: false,
tokenIsInvalid: false,
});
+ // Clear out all data to ensure only data the anonymous token is privileged to see is shown
+ this.system.reset();
this.resetStore();
this.token.reset();
}
@@ -44,8 +46,7 @@ export default class Tokens extends Controller {
TokenAdapter.findSelf().then(
() => {
- // Clear out all data to ensure only data the new token is privileged to
- // see is shown
+ // Clear out all data to ensure only data the new token is privileged to see is shown
this.system.reset();
this.resetStore();
diff --git a/ui/app/services/system.js b/ui/app/services/system.js
index 3b293d5c4bf7..1730777b5678 100644
--- a/ui/app/services/system.js
+++ b/ui/app/services/system.js
@@ -128,5 +128,6 @@ export default class SystemService extends Service {
reset() {
this.set('activeNamespace', null);
+ this.notifyPropertyChange('namespaces');
}
}
diff --git a/ui/app/templates/settings/tokens.hbs b/ui/app/templates/settings/tokens.hbs
index df600d93d5ba..ef429db2ee70 100644
--- a/ui/app/templates/settings/tokens.hbs
+++ b/ui/app/templates/settings/tokens.hbs
@@ -12,7 +12,7 @@
Tokens are stored client-side in local storage. This will persist your token across sessions. You can manually clear your token here.
-
+
diff --git a/ui/tests/acceptance/token-test.js b/ui/tests/acceptance/token-test.js
index cba90e6a2389..7109f5b72d90 100644
--- a/ui/tests/acceptance/token-test.js
+++ b/ui/tests/acceptance/token-test.js
@@ -141,6 +141,23 @@ module('Acceptance | tokens', function(hooks) {
assert.notOk(find('[data-test-job-row]'), 'No jobs found');
});
+ test('when namespaces are enabled, setting or clearing a token refetches namespaces available with new permissions', async function(assert) {
+ const { secretId } = clientToken;
+
+ server.createList('namespace', 2);
+ await Tokens.visit();
+
+ const requests = server.pretender.handledRequests;
+
+ assert.equal(requests.filter(req => req.url === '/v1/namespaces').length, 1);
+
+ await Tokens.secret(secretId).submit();
+ assert.equal(requests.filter(req => req.url === '/v1/namespaces').length, 2);
+
+ await Tokens.clear();
+ assert.equal(requests.filter(req => req.url === '/v1/namespaces').length, 3);
+ });
+
function getHeader({ requestHeaders }, name) {
// Headers are case-insensitive, but object property look up is not
return (
diff --git a/ui/tests/pages/settings/tokens.js b/ui/tests/pages/settings/tokens.js
index 925d739d8a89..998c7cd1fe22 100644
--- a/ui/tests/pages/settings/tokens.js
+++ b/ui/tests/pages/settings/tokens.js
@@ -13,6 +13,7 @@ export default create({
secret: fillable('[data-test-token-secret]'),
submit: clickable('[data-test-token-submit]'),
+ clear: clickable('[data-test-token-clear]'),
errorMessage: isVisible('[data-test-token-error]'),
successMessage: isVisible('[data-test-token-success]'),