2023-04-10 15:36:59 +00:00
/ * *
* Copyright ( c ) HashiCorp , Inc .
* SPDX - License - Identifier : MPL - 2.0
* /
2021-12-28 19:30:38 +00:00
/* eslint-disable qunit/require-expect */
/* eslint-disable qunit/no-conditional-assertions */
2019-03-13 00:08:16 +00:00
import { currentURL } from '@ember/test-helpers' ;
2019-03-13 00:04:16 +00:00
import { module , test } from 'qunit' ;
import { setupApplicationTest } from 'ember-qunit' ;
2019-03-14 06:44:53 +00:00
import { selectChoose } from 'ember-power-select/test-support' ;
2019-09-26 18:47:07 +00:00
import { setupMirage } from 'ember-cli-mirage/test-support' ;
2020-07-28 17:59:14 +00:00
import a11yAudit from 'nomad-ui/tests/helpers/a11y-audit' ;
2018-08-10 18:20:44 +00:00
import JobsList from 'nomad-ui/tests/pages/jobs/list' ;
import ClientsList from 'nomad-ui/tests/pages/clients/list' ;
2020-12-10 17:51:22 +00:00
import Layout from 'nomad-ui/tests/pages/layout' ;
2018-08-10 18:20:44 +00:00
import Allocation from 'nomad-ui/tests/pages/allocations/detail' ;
2021-12-28 14:45:20 +00:00
module ( 'Acceptance | regions (only one)' , function ( hooks ) {
2019-03-13 00:04:16 +00:00
setupApplicationTest ( hooks ) ;
2019-03-13 01:09:19 +00:00
setupMirage ( hooks ) ;
2019-03-13 00:04:16 +00:00
2021-12-28 14:45:20 +00:00
hooks . beforeEach ( function ( ) {
2018-08-10 18:20:44 +00:00
server . create ( 'agent' ) ;
2023-06-22 17:11:44 +00:00
server . create ( 'node-pool' ) ;
2018-08-10 18:20:44 +00:00
server . create ( 'node' ) ;
2021-12-28 16:08:12 +00:00
server . createList ( 'job' , 2 , {
createAllocations : false ,
noDeployments : true ,
} ) ;
2019-03-13 00:04:16 +00:00
} ) ;
2018-08-10 18:20:44 +00:00
2021-12-28 14:45:20 +00:00
test ( 'it passes an accessibility audit' , async function ( assert ) {
2020-07-28 17:59:14 +00:00
await JobsList . visit ( ) ;
2020-08-25 15:56:02 +00:00
await a11yAudit ( assert ) ;
2020-07-28 17:59:14 +00:00
} ) ;
2021-12-28 14:45:20 +00:00
test ( 'when there is only one region, the region switcher is not shown in the nav bar and the region is not in the page title' , async function ( assert ) {
2019-03-13 00:04:16 +00:00
server . create ( 'region' , { id : 'global' } ) ;
2018-08-10 18:20:44 +00:00
2019-03-14 06:44:53 +00:00
await JobsList . visit ( ) ;
2018-08-10 18:20:44 +00:00
2020-12-10 17:51:22 +00:00
assert . notOk ( Layout . navbar . regionSwitcher . isPresent , 'No region switcher' ) ;
2023-06-22 14:38:17 +00:00
assert . ok ( document . title . includes ( 'Jobs' ) ) ;
2018-08-10 18:20:44 +00:00
} ) ;
2021-12-28 14:45:20 +00:00
test ( 'when the only region is not named "global", the region switcher still is not shown' , async function ( assert ) {
2019-03-13 00:04:16 +00:00
server . create ( 'region' , { id : 'some-region' } ) ;
2018-08-10 18:20:44 +00:00
2019-03-14 06:44:53 +00:00
await JobsList . visit ( ) ;
2018-08-10 18:20:44 +00:00
2020-12-10 17:51:22 +00:00
assert . notOk ( Layout . navbar . regionSwitcher . isPresent , 'No region switcher' ) ;
2018-08-10 18:20:44 +00:00
} ) ;
2021-12-28 14:45:20 +00:00
test ( 'pages do not include the region query param' , async function ( assert ) {
2019-03-13 00:04:16 +00:00
server . create ( 'region' , { id : 'global' } ) ;
2018-08-10 18:20:44 +00:00
2019-03-14 06:44:53 +00:00
await JobsList . visit ( ) ;
2018-08-10 18:20:44 +00:00
assert . equal ( currentURL ( ) , '/jobs' , 'No region query param' ) ;
2019-03-14 06:44:53 +00:00
const jobId = JobsList . jobs . objectAt ( 0 ) . id ;
await JobsList . jobs . objectAt ( 0 ) . clickRow ( ) ;
2022-05-13 21:01:27 +00:00
assert . equal (
currentURL ( ) ,
` /jobs/ ${ jobId } @default ` ,
'No region query param'
) ;
2019-03-14 06:44:53 +00:00
await ClientsList . visit ( ) ;
2018-08-10 18:20:44 +00:00
assert . equal ( currentURL ( ) , '/clients' , 'No region query param' ) ;
} ) ;
2021-12-28 14:45:20 +00:00
test ( 'api requests do not include the region query param' , async function ( assert ) {
2019-03-13 00:04:16 +00:00
server . create ( 'region' , { id : 'global' } ) ;
2018-08-10 18:20:44 +00:00
2019-03-14 06:44:53 +00:00
await JobsList . visit ( ) ;
await JobsList . jobs . objectAt ( 0 ) . clickRow ( ) ;
2020-12-10 17:51:22 +00:00
await Layout . gutter . visitClients ( ) ;
await Layout . gutter . visitServers ( ) ;
2021-12-28 14:45:20 +00:00
server . pretender . handledRequests . forEach ( ( req ) => {
2018-08-10 18:20:44 +00:00
assert . notOk ( req . url . includes ( 'region=' ) , req . url ) ;
} ) ;
} ) ;
} ) ;
2021-12-28 14:45:20 +00:00
module ( 'Acceptance | regions (many)' , function ( hooks ) {
2019-03-13 00:04:16 +00:00
setupApplicationTest ( hooks ) ;
2019-03-14 06:44:53 +00:00
setupMirage ( hooks ) ;
2019-03-13 00:04:16 +00:00
2021-12-28 14:45:20 +00:00
hooks . beforeEach ( function ( ) {
2018-08-10 18:20:44 +00:00
server . create ( 'agent' ) ;
2023-06-22 17:11:44 +00:00
server . create ( 'node-pool' ) ;
2018-08-10 18:20:44 +00:00
server . create ( 'node' ) ;
2021-12-28 16:08:12 +00:00
server . createList ( 'job' , 2 , {
createAllocations : false ,
noDeployments : true ,
} ) ;
2019-04-12 03:08:43 +00:00
server . create ( 'allocation' ) ;
2018-08-10 18:20:44 +00:00
server . create ( 'region' , { id : 'global' } ) ;
server . create ( 'region' , { id : 'region-2' } ) ;
2019-03-13 00:04:16 +00:00
} ) ;
2018-08-10 18:20:44 +00:00
2021-12-28 14:45:20 +00:00
test ( 'the region switcher is rendered in the nav bar and the region is in the page title' , async function ( assert ) {
2019-03-14 06:44:53 +00:00
await JobsList . visit ( ) ;
2018-08-10 18:20:44 +00:00
2021-12-28 16:08:12 +00:00
assert . ok (
Layout . navbar . regionSwitcher . isPresent ,
'Region switcher is shown'
) ;
2023-06-22 14:38:17 +00:00
assert . ok ( document . title . includes ( 'Jobs - global' ) ) ;
2018-08-10 18:20:44 +00:00
} ) ;
2021-12-28 14:45:20 +00:00
test ( 'when on the default region, pages do not include the region query param' , async function ( assert ) {
2019-03-14 06:44:53 +00:00
await JobsList . visit ( ) ;
2018-08-10 18:20:44 +00:00
assert . equal ( currentURL ( ) , '/jobs' , 'No region query param' ) ;
2021-12-28 16:08:12 +00:00
assert . equal (
window . localStorage . nomadActiveRegion ,
'global' ,
'Region in localStorage'
) ;
2018-08-10 18:20:44 +00:00
} ) ;
2021-12-28 14:45:20 +00:00
test ( 'switching regions sets localStorage and the region query param' , async function ( assert ) {
2019-03-13 00:04:16 +00:00
const newRegion = server . db . regions [ 1 ] . id ;
2018-08-10 18:20:44 +00:00
2019-03-14 06:44:53 +00:00
await JobsList . visit ( ) ;
2018-08-10 18:20:44 +00:00
2021-03-26 13:55:12 +00:00
await selectChoose ( '[data-test-region-switcher-parent]' , newRegion ) ;
2018-08-10 18:20:44 +00:00
assert . ok (
currentURL ( ) . includes ( ` region= ${ newRegion } ` ) ,
'New region is the region query param value'
) ;
2021-12-28 16:08:12 +00:00
assert . equal (
window . localStorage . nomadActiveRegion ,
newRegion ,
'New region in localStorage'
) ;
2018-08-10 18:20:44 +00:00
} ) ;
2021-12-28 14:45:20 +00:00
test ( 'switching regions to the default region, unsets the region query param' , async function ( assert ) {
2019-03-13 00:04:16 +00:00
const startingRegion = server . db . regions [ 1 ] . id ;
const defaultRegion = server . db . regions [ 0 ] . id ;
2018-08-10 18:20:44 +00:00
2019-03-14 06:44:53 +00:00
await JobsList . visit ( { region : startingRegion } ) ;
2018-08-10 18:20:44 +00:00
2021-03-26 13:55:12 +00:00
await selectChoose ( '[data-test-region-switcher-parent]' , defaultRegion ) ;
2018-08-10 18:20:44 +00:00
2021-12-28 16:08:12 +00:00
assert . notOk (
currentURL ( ) . includes ( 'region=' ) ,
'No region query param for the default region'
) ;
2018-08-10 18:20:44 +00:00
assert . equal (
window . localStorage . nomadActiveRegion ,
defaultRegion ,
'New region in localStorage'
) ;
} ) ;
2021-12-28 14:45:20 +00:00
test ( 'switching regions on deep pages redirects to the application root' , async function ( assert ) {
2019-03-13 00:04:16 +00:00
const newRegion = server . db . regions [ 1 ] . id ;
2018-08-10 18:20:44 +00:00
2019-03-14 06:44:53 +00:00
await Allocation . visit ( { id : server . db . allocations [ 0 ] . id } ) ;
2018-08-10 18:20:44 +00:00
2021-03-26 13:55:12 +00:00
await selectChoose ( '[data-test-region-switcher-parent]' , newRegion ) ;
2018-08-10 18:20:44 +00:00
assert . ok ( currentURL ( ) . includes ( '/jobs?' ) , 'Back at the jobs page' ) ;
} ) ;
2021-12-28 14:45:20 +00:00
test ( 'navigating directly to a page with the region query param sets the application to that region' , async function ( assert ) {
2019-03-13 00:04:16 +00:00
const allocation = server . db . allocations [ 0 ] ;
const region = server . db . regions [ 1 ] . id ;
2019-03-14 06:44:53 +00:00
await Allocation . visit ( { id : allocation . id , region } ) ;
2018-08-10 18:20:44 +00:00
assert . equal (
currentURL ( ) ,
` /allocations/ ${ allocation . id } ?region= ${ region } ` ,
'Region param is persisted when navigating straight to a detail page'
) ;
assert . equal (
window . localStorage . nomadActiveRegion ,
region ,
'Region is also set in localStorage from a detail page'
) ;
} ) ;
2021-12-28 14:45:20 +00:00
test ( 'when the region is not the default region, all api requests other than the agent/self request include the region query param' , async function ( assert ) {
2020-01-20 20:57:01 +00:00
window . localStorage . removeItem ( 'nomadTokenSecret' ) ;
2019-03-13 00:04:16 +00:00
const region = server . db . regions [ 1 ] . id ;
2018-08-10 18:20:44 +00:00
2019-03-14 06:44:53 +00:00
await JobsList . visit ( { region } ) ;
2018-08-10 18:20:44 +00:00
2019-03-14 06:44:53 +00:00
await JobsList . jobs . objectAt ( 0 ) . clickRow ( ) ;
2020-12-10 17:51:22 +00:00
await Layout . gutter . visitClients ( ) ;
await Layout . gutter . visitServers ( ) ;
[ui] ACL Roles in the UI, plus Role, Policy and Token management (#17770) (#18599)
* Rename pages to include roles
* Models and adapters
* [ui] Any policy checks in the UI now check for roles' policies as well as token policies (#18346)
* combinedPolicies as a concept
* Classic decorator on role adapter
* We added a new request for roles, so the test based on a specific order of requests got fickle fast
* Mirage roles cluster scaffolded
* Acceptance test for roles and policies on the login page
* Update mirage mock for nodes fetch to account for role policies / empty token.policies
* Roles-derived policies checks
* [ui] Access Control with Roles and Tokens (#18413)
* top level policies routes moved into access control
* A few more routes and name cleanup
* Delog and test fixes to account for new url prefix and document titles
* Overview page
* Tokens and Roles routes
* Tokens helios table
* Add a role
* Hacky role page and deletion
* New policy keyboard shortcut and roles breadcrumb nav
* If you leave New Role but havent made any changes, remove the newly-created record from store
* Roles index list and general role route crud
* Roles index actually links to roles now
* Helios button styles for new roles and policies
* Handle when you try to create a new role without having any policies
* Token editing generally
* Create Token functionality
* Cant delete self-token but management token editing and deleting is fine
* Upgrading helios caused codemirror to explode, shimmed
* Policies table fix
* without bang-element condition, modifier would refire over and over
* Token TTL or Time setting
* time will take you on
* Mirage hooks for create and list roles
* Ensure policy names only use allow characters in mirage mocks
* Mirage mocked roles and policies in the default cluster
* log and lintfix
* chromedriver to 2.1.2
* unused unit tests removed
* Nice profile dropdown
* With the HDS accordion, rename our internal component scss ref
* design revisions after discussion
* Tooltip on deleted-policy tokens
* Two-step button peripheral isDeleting gcode removed
* Never to null on token save
* copywrite headers added and empty routefiles removed
* acceptance test fixes for policies endpoint
* Route for updating a token
* Policies testfixes
* Ember on-click-outside modifier upgraded with general ember-modifier upgrade
* Test adjustments to account for new profile header dropdown
* Test adjustments for tokens via policy pages
* Removed an unused route
* Access Control index page tests
* a11y tests
* Tokens index acceptance tests generally
* Lintfix
* Token edit page tests
* Token editing tests
* New token expiration tests
* Roles Index tests
* Role editing policies tests
* A complete set of Access Control Roles tests
* Policies test
* Be more specific about which row to check for expiration time
* Nil check on expirationTime equality
* Management tokens shouldnt show No Roles/Policies, give them their own designation
* Route guard on selftoken, conditional columns, and afterModel at parent to prevent orphaned policies on tokens/roles from stopping a new save
* Policy unloading on delete and other todos plus autofocus conditionally re-enabled
* Invalid policies non-links now a concept for Roles index
* HDS style links to make job.variables.alert links look like links again
* Mirage finding looks weird so making model async in hash even though redundant
* Drop rsvp
* RSVP wasnt the problem, cached lookups were
* remove old todo comments
* de-log
2023-09-27 21:02:48 +00:00
const regionsRequest = server . pretender . handledRequests . find ( ( req ) =>
req . responseURL . includes ( '/v1/regions' )
) ;
const licenseRequest = server . pretender . handledRequests . find ( ( req ) =>
req . responseURL . includes ( '/v1/operator/license' )
) ;
const appRequests = server . pretender . handledRequests . filter (
( req ) =>
! req . responseURL . includes ( '/v1/regions' ) &&
! req . responseURL . includes ( '/v1/operator/license' )
) ;
2018-08-10 18:20:44 +00:00
assert . notOk (
regionsRequest . url . includes ( 'region=' ) ,
'The regions request is made without a region qp'
) ;
assert . notOk (
[ui] ACL Roles in the UI, plus Role, Policy and Token management (#17770) (#18599)
* Rename pages to include roles
* Models and adapters
* [ui] Any policy checks in the UI now check for roles' policies as well as token policies (#18346)
* combinedPolicies as a concept
* Classic decorator on role adapter
* We added a new request for roles, so the test based on a specific order of requests got fickle fast
* Mirage roles cluster scaffolded
* Acceptance test for roles and policies on the login page
* Update mirage mock for nodes fetch to account for role policies / empty token.policies
* Roles-derived policies checks
* [ui] Access Control with Roles and Tokens (#18413)
* top level policies routes moved into access control
* A few more routes and name cleanup
* Delog and test fixes to account for new url prefix and document titles
* Overview page
* Tokens and Roles routes
* Tokens helios table
* Add a role
* Hacky role page and deletion
* New policy keyboard shortcut and roles breadcrumb nav
* If you leave New Role but havent made any changes, remove the newly-created record from store
* Roles index list and general role route crud
* Roles index actually links to roles now
* Helios button styles for new roles and policies
* Handle when you try to create a new role without having any policies
* Token editing generally
* Create Token functionality
* Cant delete self-token but management token editing and deleting is fine
* Upgrading helios caused codemirror to explode, shimmed
* Policies table fix
* without bang-element condition, modifier would refire over and over
* Token TTL or Time setting
* time will take you on
* Mirage hooks for create and list roles
* Ensure policy names only use allow characters in mirage mocks
* Mirage mocked roles and policies in the default cluster
* log and lintfix
* chromedriver to 2.1.2
* unused unit tests removed
* Nice profile dropdown
* With the HDS accordion, rename our internal component scss ref
* design revisions after discussion
* Tooltip on deleted-policy tokens
* Two-step button peripheral isDeleting gcode removed
* Never to null on token save
* copywrite headers added and empty routefiles removed
* acceptance test fixes for policies endpoint
* Route for updating a token
* Policies testfixes
* Ember on-click-outside modifier upgraded with general ember-modifier upgrade
* Test adjustments to account for new profile header dropdown
* Test adjustments for tokens via policy pages
* Removed an unused route
* Access Control index page tests
* a11y tests
* Tokens index acceptance tests generally
* Lintfix
* Token edit page tests
* Token editing tests
* New token expiration tests
* Roles Index tests
* Role editing policies tests
* A complete set of Access Control Roles tests
* Policies test
* Be more specific about which row to check for expiration time
* Nil check on expirationTime equality
* Management tokens shouldnt show No Roles/Policies, give them their own designation
* Route guard on selftoken, conditional columns, and afterModel at parent to prevent orphaned policies on tokens/roles from stopping a new save
* Policy unloading on delete and other todos plus autofocus conditionally re-enabled
* Invalid policies non-links now a concept for Roles index
* HDS style links to make job.variables.alert links look like links again
* Mirage finding looks weird so making model async in hash even though redundant
* Drop rsvp
* RSVP wasnt the problem, cached lookups were
* remove old todo comments
* de-log
2023-09-27 21:02:48 +00:00
licenseRequest . url . includes ( 'region=' ) ,
2018-08-10 18:20:44 +00:00
'The default region request is made without a region qp'
) ;
2021-12-28 14:45:20 +00:00
appRequests . forEach ( ( req ) => {
[ui] ACL Roles in the UI, plus Role, Policy and Token management (#17770) (#18599)
* Rename pages to include roles
* Models and adapters
* [ui] Any policy checks in the UI now check for roles' policies as well as token policies (#18346)
* combinedPolicies as a concept
* Classic decorator on role adapter
* We added a new request for roles, so the test based on a specific order of requests got fickle fast
* Mirage roles cluster scaffolded
* Acceptance test for roles and policies on the login page
* Update mirage mock for nodes fetch to account for role policies / empty token.policies
* Roles-derived policies checks
* [ui] Access Control with Roles and Tokens (#18413)
* top level policies routes moved into access control
* A few more routes and name cleanup
* Delog and test fixes to account for new url prefix and document titles
* Overview page
* Tokens and Roles routes
* Tokens helios table
* Add a role
* Hacky role page and deletion
* New policy keyboard shortcut and roles breadcrumb nav
* If you leave New Role but havent made any changes, remove the newly-created record from store
* Roles index list and general role route crud
* Roles index actually links to roles now
* Helios button styles for new roles and policies
* Handle when you try to create a new role without having any policies
* Token editing generally
* Create Token functionality
* Cant delete self-token but management token editing and deleting is fine
* Upgrading helios caused codemirror to explode, shimmed
* Policies table fix
* without bang-element condition, modifier would refire over and over
* Token TTL or Time setting
* time will take you on
* Mirage hooks for create and list roles
* Ensure policy names only use allow characters in mirage mocks
* Mirage mocked roles and policies in the default cluster
* log and lintfix
* chromedriver to 2.1.2
* unused unit tests removed
* Nice profile dropdown
* With the HDS accordion, rename our internal component scss ref
* design revisions after discussion
* Tooltip on deleted-policy tokens
* Two-step button peripheral isDeleting gcode removed
* Never to null on token save
* copywrite headers added and empty routefiles removed
* acceptance test fixes for policies endpoint
* Route for updating a token
* Policies testfixes
* Ember on-click-outside modifier upgraded with general ember-modifier upgrade
* Test adjustments to account for new profile header dropdown
* Test adjustments for tokens via policy pages
* Removed an unused route
* Access Control index page tests
* a11y tests
* Tokens index acceptance tests generally
* Lintfix
* Token edit page tests
* Token editing tests
* New token expiration tests
* Roles Index tests
* Role editing policies tests
* A complete set of Access Control Roles tests
* Policies test
* Be more specific about which row to check for expiration time
* Nil check on expirationTime equality
* Management tokens shouldnt show No Roles/Policies, give them their own designation
* Route guard on selftoken, conditional columns, and afterModel at parent to prevent orphaned policies on tokens/roles from stopping a new save
* Policy unloading on delete and other todos plus autofocus conditionally re-enabled
* Invalid policies non-links now a concept for Roles index
* HDS style links to make job.variables.alert links look like links again
* Mirage finding looks weird so making model async in hash even though redundant
* Drop rsvp
* RSVP wasnt the problem, cached lookups were
* remove old todo comments
* de-log
2023-09-27 21:02:48 +00:00
if (
req . url === '/v1/agent/self' ||
req . url === '/v1/acl/token/self' ||
req . url === '/v1/agent/members'
) {
2020-10-26 06:25:28 +00:00
assert . notOk ( req . url . includes ( 'region=' ) , ` (no region) ${ req . url } ` ) ;
} else {
assert . ok ( req . url . includes ( ` region= ${ region } ` ) , req . url ) ;
}
2018-08-10 18:20:44 +00:00
} ) ;
} ) ;
} ) ;