From 0f6214d0ce4953b89d056e3f66fe86cc854d4f21 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Wed, 20 Jun 2018 14:38:54 +0100 Subject: [PATCH] Make sure token is set to blank if nothing is typed in settings --- ui-v2/app/services/settings.js | 6 +++++- ui-v2/tests/acceptance/settings/update.feature | 15 +++++++++++++++ .../acceptance/steps/settings/update-steps.js | 10 ++++++++++ ui-v2/tests/acceptance/token-header.feature | 2 +- ui-v2/tests/steps.js | 9 +++++++++ 5 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 ui-v2/tests/acceptance/settings/update.feature create mode 100644 ui-v2/tests/acceptance/steps/settings/update-steps.js diff --git a/ui-v2/app/services/settings.js b/ui-v2/app/services/settings.js index cc3d8021e4..2e51de89a9 100644 --- a/ui-v2/app/services/settings.js +++ b/ui-v2/app/services/settings.js @@ -16,14 +16,18 @@ export default Service.extend({ }; }, findAll: function(key) { - return Promise.resolve({ token: get(this, 'storage').getItem('token') }); + const token = get(this, 'storage').getItem('token'); + return Promise.resolve({ token: token === null ? '' : token }); }, findBySlug: function(slug) { + // TODO: Force localStorage to always be strings... + // const value = get(this, 'storage').getItem(slug); return Promise.resolve(get(this, 'storage').getItem(slug)); }, persist: function(obj) { const storage = get(this, 'storage'); Object.keys(obj).forEach((item, i) => { + // TODO: ...everywhere storage.setItem(item, obj[item]); }); return Promise.resolve(obj); diff --git a/ui-v2/tests/acceptance/settings/update.feature b/ui-v2/tests/acceptance/settings/update.feature new file mode 100644 index 0000000000..98ac584d0b --- /dev/null +++ b/ui-v2/tests/acceptance/settings/update.feature @@ -0,0 +1,15 @@ +@setupApplicationTest +Feature: settings / update: Update Settings + In order to authenticate with an ACL token + As a user + I need to be able to add my token via the UI + Scenario: I click Save without actually typing anything + Given 1 datacenter model with the value "datacenter" + When I visit the settings page + Then the url should be /settings + And I submit + Then I have settings like yaml + --- + token: '' + --- + diff --git a/ui-v2/tests/acceptance/steps/settings/update-steps.js b/ui-v2/tests/acceptance/steps/settings/update-steps.js new file mode 100644 index 0000000000..960cdf533d --- /dev/null +++ b/ui-v2/tests/acceptance/steps/settings/update-steps.js @@ -0,0 +1,10 @@ +import steps from '../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff --git a/ui-v2/tests/acceptance/token-header.feature b/ui-v2/tests/acceptance/token-header.feature index a1c35b80ad..750a3fe745 100644 --- a/ui-v2/tests/acceptance/token-header.feature +++ b/ui-v2/tests/acceptance/token-header.feature @@ -12,7 +12,7 @@ Feature: token headers headers: X-Consul-Token: '' --- - Scenario: Set a token and then navigate to the index page + Scenario: Set the token to [Token] and then navigate to the index page Given 1 datacenter model with the value "datacenter" When I visit the settings page Then the url should be /settings diff --git a/ui-v2/tests/steps.js b/ui-v2/tests/steps.js index 4f8b3db00a..459d8fd951 100644 --- a/ui-v2/tests/steps.js +++ b/ui-v2/tests/steps.js @@ -242,6 +242,15 @@ export default function(assert) { `Expected ${num} ${model}s with ${property} set to "${value}", saw ${len}` ); }) + .then('I have settings like yaml\n$yaml', function(data) { + // TODO: Inject this + const settings = window.localStorage; + Object.keys(data).forEach(function(prop) { + const actual = settings.getItem(prop); + const expected = data[prop]; + assert.strictEqual(actual, expected, `Expected settings to be ${expected} was ${actual}`); + }); + }) .then('I see $property on the $component like yaml\n$yaml', function( property, component,