diff --git a/ui/admin/app/abilities/session-recording.js b/ui/admin/app/abilities/session-recording.js index ed0a53499..346c97dcd 100644 --- a/ui/admin/app/abilities/session-recording.js +++ b/ui/admin/app/abilities/session-recording.js @@ -20,7 +20,8 @@ export default class OverrideSessionRecordingAbility extends SessionRecordingAbi /** * This override ensures that session recordings can only be presented in the global scope - * and if the session-recording feature flag is enabled. */ + * and if the session-recording feature flag is enabled. + */ get canList() { return this.features.isEnabled('session-recording') ? this.hasAuthorizedCollectionAction('list') && this.model.isGlobal diff --git a/ui/admin/app/templates/scopes/scope.hbs b/ui/admin/app/templates/scopes/scope.hbs index 67694f447..64feeb900 100644 --- a/ui/admin/app/templates/scopes/scope.hbs +++ b/ui/admin/app/templates/scopes/scope.hbs @@ -27,10 +27,18 @@ {{t 'resources.org.title_plural'}} {{#if (feature-flag 'session-recording')}} - - - {{t 'resources.session-recording.title_plural'}} - + {{#if + (can + 'navigate session-recording' + @model + collection='session-recordings' + ) + }} + + + {{t 'resources.session-recording.title_plural'}} + + {{/if}} {{#if (can 'navigate storage-bucket' @model collection='storage-buckets' diff --git a/ui/admin/tests/acceptance/session-recordings/list-test.js b/ui/admin/tests/acceptance/session-recordings/list-test.js index f86374f8c..2c7587008 100644 --- a/ui/admin/tests/acceptance/session-recordings/list-test.js +++ b/ui/admin/tests/acceptance/session-recordings/list-test.js @@ -3,6 +3,7 @@ import { visit, currentURL, click } from '@ember/test-helpers'; import { setupApplicationTest } from 'admin/tests/helpers'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { authenticateSession } from 'ember-simple-auth/test-support'; +import { enableFeature } from 'ember-feature-flags/test-support'; module('Acceptance | session recordings | list', function (hooks) { setupApplicationTest(hooks); @@ -11,6 +12,7 @@ module('Acceptance | session recordings | list', function (hooks) { // Selectors const LIST_SESSION_RECORDING_BUTTON = 'table > tbody > tr > td:last-child > a'; + const SESSION_RECORDING_TITLE = 'Session Recordings'; // Instances const instances = { @@ -43,17 +45,45 @@ module('Acceptance | session recordings | list', function (hooks) { urls.globalScope = `/scopes/global`; urls.sessionRecordings = `${urls.globalScope}/session-recordings`; urls.sessionRecording = `${urls.sessionRecordings}/${instances.sessionRecording.id}`; + enableFeature('session-recording'); authenticateSession({}); }); - // TODO: When we add abilities to session-recordings this test will be refactor to account for it. - test('users can navigate to session-recordings', async function (assert) { - assert.expect(1); + test('users can navigate to session-recordings with proper authorization', async function (assert) { + assert.expect(4); + + await visit(urls.globalScope); + + assert.true( + instances.scopes.global.authorized_collection_actions[ + 'session-recordings' + ].includes('list') + ); + assert.dom(`[href="${urls.sessionRecordings}"]`).exists(); + assert.dom('[title="General"]').includesText(SESSION_RECORDING_TITLE); + // Visit session recordings - await visit(urls.sessionRecordings); + await click(`[href="${urls.sessionRecordings}"]`); assert.strictEqual(currentURL(), urls.sessionRecordings); }); + test('users cannot navigate to session-recordings without the list action', async function (assert) { + assert.expect(3); + instances.scopes.global.authorized_collection_actions[ + 'session-recordings' + ] = []; + + await visit(urls.globalScope); + + assert.false( + instances.scopes.global.authorized_collection_actions[ + 'session-recordings' + ].includes('list') + ); + assert.dom('[title="General"]').doesNotIncludeText(SESSION_RECORDING_TITLE); + assert.dom(`[href="${urls.sessionRecordings}"]`).doesNotExist(); + }); + // TODO: When we add abilities to session-recordings this test will be refactor to account for it. test('user can navigate to a session recording', async function (assert) { assert.expect(2);