-
Notifications
You must be signed in to change notification settings - Fork 4.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
clear namespaces on logout and properly render nested namespaces in the namepace picker #7186
Changes from all commits
397f9b7
8c27a3c
cac2906
ed7784b
86e0991
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,18 @@ | ||
{{#link-to "vault.cluster.secrets" (query-params namespace=normalizedNamespace) | ||
class=(concat "is-block " class) | ||
}} | ||
<LinkTo | ||
@params={{array "vault.cluster.secrets" (query-params namespace=this.normalizedNamespace)}} | ||
class={{concat "is-block " class}} | ||
data-test-namespace-link={{this.normalizedNamespace}} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why do we need the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's not required, but it's helpful to clarify what's state on the component, what's an argument to a component ( |
||
> | ||
{{#if (has-block)}} | ||
{{yield}} | ||
{{else}} | ||
<div class="level is-mobile"> | ||
<span class="level-left">{{namespaceDisplay}}</span> | ||
<span class="level-left">{{this.namespaceDisplay}}</span> | ||
<span class="level-right"> | ||
<button type="button" class="button is-ghost icon"> | ||
<Chevron @isButton={{true}} class="has-text-grey" /> | ||
</button> | ||
</span> | ||
</div> | ||
{{/if}} | ||
{{/link-to}} | ||
</LinkTo> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
import { click, currentRouteName, currentURL, visit } from '@ember/test-helpers'; | ||
import { module, test } from 'qunit'; | ||
import { setupApplicationTest } from 'ember-qunit'; | ||
import { create } from 'ember-cli-page-object'; | ||
|
||
import consoleClass from 'vault/tests/pages/components/console/ui-panel'; | ||
import authPage from 'vault/tests/pages/auth'; | ||
import logout from 'vault/tests/pages/logout'; | ||
|
||
const shell = create(consoleClass); | ||
|
||
const createNS = async name => { | ||
await shell.runCommands(`write sys/namespaces/${name} -force`); | ||
}; | ||
|
||
const switchToNS = async name => { | ||
await click('[data-test-namespace-toggle]'); | ||
await click(`[data-test-namespace-link="${name}"]`); | ||
await click('[data-test-namespace-toggle]'); | ||
}; | ||
|
||
module('Acceptance | Enterprise | namespaces', function(hooks) { | ||
setupApplicationTest(hooks); | ||
|
||
hooks.beforeEach(function() { | ||
return authPage.login(); | ||
}); | ||
|
||
test('it clears namespaces when you log out', async function(assert) { | ||
let ns = 'foo'; | ||
await createNS(ns); | ||
await shell.runCommands(`write -field=client_token auth/token/create policies=default`); | ||
let token = shell.lastLogOutput; | ||
await logout.visit(); | ||
await authPage.login(token); | ||
assert.dom('[data-test-namespace-toggle]').doesNotExist('does not show the namespace picker'); | ||
await logout.visit(); | ||
}); | ||
|
||
test('it shows nested namespaces if you log in with a namspace starting with a /', async function(assert) { | ||
let nses = ['beep', 'boop', 'bop']; | ||
for (let [i, ns] of nses.entries()) { | ||
await createNS(ns); | ||
// this is usually triggered when creating a ns in the form, here we'll trigger a reload of the | ||
// namespaces manually | ||
await this.owner.lookup('service:namespace').findNamespacesForUser.perform(); | ||
if (i === nses.length - 1) { | ||
break; | ||
} | ||
// the namespace path will include all of the namespaces up to this point | ||
let targetNamespace = nses.slice(0, i + 1).join('/'); | ||
await switchToNS(targetNamespace); | ||
} | ||
await logout.visit(); | ||
await authPage.visit({ with: 'token', namespace: '/beep/boop' }); | ||
await authPage.tokenInput('root').submit(); | ||
await click('[data-test-namespace-toggle]'); | ||
assert.dom('[data-test-current-namespace]').hasText('/beep/boop/', 'current namespace begins with a /'); | ||
assert | ||
.dom('[data-test-namespace-link="beep/boop/bop"]') | ||
.exists('renders the link to the nested namespace'); | ||
}); | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💅 💅 💅