2023-03-01 09:39:41 -06:00
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
2021-08-16 10:18:46 -07:00
import { module , test } from 'qunit' ;
2022-11-09 10:13:17 -08:00
import { visit , currentURL , click } from '@ember/test-helpers' ;
2021-08-16 10:18:46 -07:00
import { setupApplicationTest } from 'ember-qunit' ;
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage' ;
import a11yAudit from 'ember-a11y-testing/test-support/audit' ;
import {
authenticateSession ,
// These are left here intentionally for future reference.
//currentSession,
//invalidateSession,
} from 'ember-simple-auth/test-support' ;
2022-12-20 12:07:52 -05:00
import { TYPE_TARGET_TCP , TYPE_TARGET_SSH } from 'api/models/target' ;
2021-08-16 10:18:46 -07:00
2021-08-16 16:58:07 -07:00
module ( 'Acceptance | targets | read' , function ( hooks ) {
2021-08-16 10:18:46 -07:00
setupApplicationTest ( hooks );
setupMirage ( hooks );
2023-01-11 15:46:47 -06:00
let featuresService ;
2023-04-06 10:45:19 -07:00
2021-08-16 10:18:46 -07:00
const instances = {
scopes : {
global : null ,
org : null ,
project : null ,
},
2022-11-09 10:13:17 -08:00
sshTarget : null ,
tcpTarget : null ,
2021-08-16 10:18:46 -07:00
};
const urls = {
globalScope : null ,
orgScope : null ,
projectScope : null ,
targets : null ,
2022-11-09 10:13:17 -08:00
sshTarget : null ,
tcpTarget : null ,
2021-08-16 10:18:46 -07:00
};
hooks . beforeEach ( function () {
2023-01-11 15:46:47 -06:00
featuresService = this . owner . lookup ( 'service:features' );
2021-08-16 10:18:46 -07:00
// Generate resources
instances . scopes . global = this . server . create ( 'scope' , { id : 'global' });
instances . scopes . org = this . server . create ( 'scope' , {
type : 'org' ,
scope : { id : 'global' , type : 'global' },
});
instances . scopes . project = this . server . create ( 'scope' , {
type : 'project' ,
scope : { id : instances . scopes . org . id , type : 'org' },
});
2022-11-09 10:13:17 -08:00
instances . sshTarget = this . server . create ( 'target' , {
2022-12-20 12:07:52 -05:00
type : TYPE_TARGET_SSH ,
2022-11-09 10:13:17 -08:00
scope : instances . scopes . project ,
});
instances . tcpTarget = this . server . create ( 'target' , {
2022-12-20 12:07:52 -05:00
type : TYPE_TARGET_TCP ,
2021-08-16 10:18:46 -07:00
scope : instances . scopes . project ,
});
2023-04-07 11:56:28 -07:00
2021-08-16 10:18:46 -07:00
// Generate route URLs for resources
urls . globalScope = `/scopes/global/scopes` ;
urls . orgScope = `/scopes/ ${ instances . scopes . org . id } /scopes` ;
urls . projectScope = `/scopes/ ${ instances . scopes . project . id } ` ;
urls . targets = ` ${ urls . projectScope } /targets` ;
2022-11-09 10:13:17 -08:00
urls . sshTarget = ` ${ urls . targets } / ${ instances . sshTarget . id } ` ;
urls . tcpTarget = ` ${ urls . targets } / ${ instances . tcpTarget . id } ` ;
2021-08-16 10:18:46 -07:00
urls . unknownTarget = ` ${ urls . targets } /foo` ;
2022-11-09 10:13:17 -08:00
2021-08-16 10:18:46 -07:00
authenticateSession ({});
});
2022-11-09 10:13:17 -08:00
test ( 'visiting ssh target' , async function ( assert ) {
2021-08-16 10:18:46 -07:00
assert . expect ( 2 );
2023-04-03 20:28:31 -07:00
featuresService . enable ( 'ssh-target' );
2021-08-16 10:18:46 -07:00
await visit ( urls . targets );
await a11yAudit ();
2022-07-07 11:18:51 -07:00
assert . strictEqual ( currentURL (), urls . targets );
2022-11-09 10:13:17 -08:00
await click ( `[href=" ${ urls . sshTarget } "]` );
2021-08-16 10:18:46 -07:00
await a11yAudit ();
2022-11-09 10:13:17 -08:00
assert . strictEqual ( currentURL (), urls . sshTarget );
2021-08-16 10:18:46 -07:00
});
2022-11-09 10:13:17 -08:00
test ( 'visiting tcp target' , async function ( assert ) {
assert . expect ( 2 );
await visit ( urls . targets );
assert . strictEqual ( currentURL (), urls . targets );
await click ( `[href=" ${ urls . tcpTarget } "]` );
await a11yAudit ();
assert . strictEqual ( currentURL (), urls . tcpTarget );
});
2023-01-11 15:46:47 -06:00
test ( 'visiting an ssh target shows the worker_filter deprecation message when worker_filter has value and "target-worker-filters-v2" is enabled' , async function ( assert ) {
featuresService . enable ( 'target-worker-filters-v2' );
assert . expect ( 1 );
instances . sshTarget . worker_filter = 'worker filter present' ;
await visit ( urls . sshTarget );
assert . dom ( '.hds-alert' ). isVisible ();
});
test ( 'visiting a tcp target shows the worker_filter deprecation message when worker_filter has value and "target-worker-filters-v2" is enabled' , async function ( assert ) {
featuresService . enable ( 'target-worker-filters-v2' );
assert . expect ( 1 );
instances . tcpTarget . worker_filter = 'worker filter present' ;
await visit ( urls . tcpTarget );
assert . dom ( '.hds-alert' ). isVisible ();
});
test ( 'visiting an ssh target does not show the worker_filter deprecation message when worker_filter has no value and "target-worker-filters-v2" is enabled' , async function ( assert ) {
featuresService . enable ( 'target-worker-filters-v2' );
assert . expect ( 1 );
instances . sshTarget . worker_filter = null ;
await visit ( urls . sshTarget );
assert . dom ( '.hds-alert' ). doesNotExist ();
});
test ( 'visiting a tcp target does not show the worker_filter deprecation message when worker_filter has no value and "target-worker-filters-v2" is enabled' , async function ( assert ) {
featuresService . enable ( 'target-worker-filters-v2' );
assert . expect ( 1 );
instances . tcpTarget . worker_filter = null ;
await visit ( urls . tcpTarget );
assert . dom ( '.hds-alert' ). doesNotExist ();
});
test ( 'visiting an ssh target does not show the worker_filter deprecation message when "target-worker-filters-v2" is disabled' , async function ( assert ) {
2023-04-03 20:28:31 -07:00
assert . expect ( 2 );
2023-01-11 15:46:47 -06:00
await visit ( urls . sshTarget );
2023-04-03 20:28:31 -07:00
assert . false ( featuresService . isEnabled ( 'target-worker-filters-v2' ));
2023-01-11 15:46:47 -06:00
assert . dom ( '.hds-alert' ). doesNotExist ();
});
test ( 'visiting a tcp target does not show the worker_filter deprecation message when "target-worker-filters-v2" is disabled' , async function ( assert ) {
2023-04-03 20:28:31 -07:00
assert . expect ( 2 );
2023-01-11 15:46:47 -06:00
await visit ( urls . tcpTarget );
2023-04-03 20:28:31 -07:00
assert . false ( featuresService . isEnabled ( 'target-worker-filters-v2' ));
2023-01-11 15:46:47 -06:00
assert . dom ( '.hds-alert' ). doesNotExist ();
});
2023-04-03 20:28:31 -07:00
test ( 'cannot navigate to an ssh target form without proper authorization' , async function ( assert ) {
2022-11-09 10:13:17 -08:00
assert . expect ( 2 );
2023-04-03 20:28:31 -07:00
featuresService . enable ( 'ssh-target' );
2022-11-09 10:13:17 -08:00
await visit ( urls . projectScope );
instances . sshTarget . authorized_actions =
instances . sshTarget . authorized_actions . filter (( item ) => item !== 'read' );
await click ( `[href=" ${ urls . targets } "]` );
2022-11-28 14:44:34 -08:00
assert . dom ( '.rose-table-body tr:first-child a' ). doesNotExist ();
2022-11-09 10:13:17 -08:00
assert . dom ( `[href=" ${ urls . tcpTarget } "]` ). exists ();
});
test ( 'cannot navigate to a tcp target form without proper authorization' , async function ( assert ) {
assert . expect ( 2 );
2023-04-03 20:28:31 -07:00
featuresService . enable ( 'ssh-target' );
2022-11-09 10:13:17 -08:00
await visit ( urls . projectScope );
instances . tcpTarget . authorized_actions =
instances . tcpTarget . authorized_actions . filter (( item ) => item !== 'read' );
await click ( `[href=" ${ urls . targets } "]` );
2022-11-28 14:44:34 -08:00
assert . dom ( '.rose-table-body tr:nth-child(2) a' ). doesNotExist ();
2022-11-09 10:13:17 -08:00
assert . dom ( `[href=" ${ urls . sshTarget } "]` ). exists ();
2021-08-16 10:18:46 -07:00
});
test ( 'visiting an unknown target displays 404 message' , async function ( assert ) {
2022-11-28 14:44:34 -08:00
assert . expect ( 1 );
2022-11-09 10:13:17 -08:00
2021-08-16 10:18:46 -07:00
await visit ( urls . unknownTarget );
await a11yAudit ();
2022-11-09 10:13:17 -08:00
assert . dom ( '.rose-message-subtitle' ). hasText ( 'Error 404' );
});
test ( 'users can link to docs page for target' , async function ( assert ) {
assert . expect ( 1 );
await visit ( urls . projectScope );
await click ( `[href=" ${ urls . targets } "]` );
assert
. dom ( `[href="https://boundaryproject.io/help/admin-ui/targets"]` )
. exists ();
2021-08-16 10:18:46 -07:00
});
});