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' ;
2019-03-13 00:04:16 +00:00
module ( 'Acceptance | regions (only one)' , function ( hooks ) {
setupApplicationTest ( hooks ) ;
2019-03-13 01:09:19 +00:00
setupMirage ( hooks ) ;
2019-03-13 00:04:16 +00:00
hooks . beforeEach ( function ( ) {
2018-08-10 18:20:44 +00:00
server . create ( 'agent' ) ;
server . create ( 'node' ) ;
2019-04-12 03:08:43 +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
2020-07-28 17:59:14 +00:00
test ( 'it passes an accessibility audit' , async function ( assert ) {
await JobsList . visit ( ) ;
2020-08-25 15:56:02 +00:00
await a11yAudit ( assert ) ;
2020-07-28 17:59:14 +00:00
} ) ;
2019-07-17 20:02:58 +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' ) ;
2019-07-17 20:02:58 +00:00
assert . equal ( document . title , 'Jobs - Nomad' ) ;
2018-08-10 18:20:44 +00:00
} ) ;
2019-03-14 06:44:53 +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
} ) ;
2019-03-14 06:44:53 +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 ( ) ;
2018-08-10 18:20:44 +00:00
assert . equal ( currentURL ( ) , ` /jobs/ ${ jobId } ` , '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' ) ;
} ) ;
2019-03-14 06:44:53 +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 ( ) ;
2018-08-10 18:20:44 +00:00
server . pretender . handledRequests . forEach ( req => {
assert . notOk ( req . url . includes ( 'region=' ) , req . url ) ;
} ) ;
} ) ;
} ) ;
2019-03-13 00:04:16 +00:00
module ( 'Acceptance | regions (many)' , function ( hooks ) {
setupApplicationTest ( hooks ) ;
2019-03-14 06:44:53 +00:00
setupMirage ( hooks ) ;
2019-03-13 00:04:16 +00:00
hooks . beforeEach ( function ( ) {
2018-08-10 18:20:44 +00:00
server . create ( 'agent' ) ;
server . create ( 'node' ) ;
2019-04-12 03:08:43 +00:00
server . createList ( 'job' , 2 , { createAllocations : false , noDeployments : true } ) ;
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
2019-07-17 20:02:58 +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
2020-12-10 17:51:22 +00:00
assert . ok ( Layout . navbar . regionSwitcher . isPresent , 'Region switcher is shown' ) ;
2019-07-17 20:02:58 +00:00
assert . equal ( document . title , 'Jobs - global - Nomad' ) ;
2018-08-10 18:20:44 +00:00
} ) ;
2019-03-14 06:44:53 +00:00
test ( 'when on the default region, pages do not include the region query param' , async function ( assert ) {
await JobsList . visit ( ) ;
2018-08-10 18:20:44 +00:00
assert . equal ( currentURL ( ) , '/jobs' , 'No region query param' ) ;
assert . equal ( window . localStorage . nomadActiveRegion , 'global' , 'Region in localStorage' ) ;
} ) ;
2019-03-14 06:44:53 +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'
) ;
assert . equal ( window . localStorage . nomadActiveRegion , newRegion , 'New region in localStorage' ) ;
} ) ;
2019-03-14 06:44:53 +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
2018-08-13 23:18:06 +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'
) ;
} ) ;
2019-03-14 06:44:53 +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' ) ;
} ) ;
2019-03-14 06:44:53 +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'
) ;
} ) ;
2020-10-26 06:25:28 +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 ( ) ;
2020-01-20 20:57:01 +00:00
const [
2020-12-10 17:51:22 +00:00
,
,
// License request
// Token/policies request
2020-01-20 20:57:01 +00:00
regionsRequest ,
defaultRegionRequest ,
... appRequests
] = server . pretender . handledRequests ;
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 (
defaultRegionRequest . url . includes ( 'region=' ) ,
'The default region request is made without a region qp'
) ;
appRequests . forEach ( req => {
2020-10-26 06:25:28 +00:00
if ( req . url === '/v1/agent/self' ) {
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
} ) ;
} ) ;
} ) ;