From 7faab01452eea49d46fe11135f529fbbaa2b3b69 Mon Sep 17 00:00:00 2001 From: Cameron Perera Date: Thu, 30 Mar 2023 11:11:40 -0500 Subject: [PATCH] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20add=20permission=20t?= =?UTF-8?q?o=20read=20a=20session=20recording=20(#167)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: 💡 add permission to read a session recording * test: 💍 remove a11yAudit from test temporarily * refactor: 💡 add aria-label to fix allyAudit violation (#168) * refactor: 💡 add aria-label to fix allyAudit violation * refactor: 💡 update standalone link to icon only button --- addons/core/translations/resources/en-us.yaml | 1 + .../scopes/scope/session-recordings/index.hbs | 21 ++++++---- .../session-recordings/list-test.js | 13 ------ ...session-recording-test.js => read-test.js} | 40 +++++++++++++++++-- 4 files changed, 50 insertions(+), 25 deletions(-) rename ui/admin/tests/acceptance/session-recordings/{session-recording/session-recording-test.js => read-test.js} (60%) diff --git a/addons/core/translations/resources/en-us.yaml b/addons/core/translations/resources/en-us.yaml index 680e5c0fa..010d964b8 100644 --- a/addons/core/translations/resources/en-us.yaml +++ b/addons/core/translations/resources/en-us.yaml @@ -216,6 +216,7 @@ session-recording: title_plural: Session Recordings details: Session details related: Related + button-aria-label: Go to session recording {id} connection: title: Connection title_plural: Connections diff --git a/ui/admin/app/templates/scopes/scope/session-recordings/index.hbs b/ui/admin/app/templates/scopes/scope/session-recordings/index.hbs index fd82545f3..95333b716 100644 --- a/ui/admin/app/templates/scopes/scope/session-recordings/index.hbs +++ b/ui/admin/app/templates/scopes/scope/session-recordings/index.hbs @@ -61,14 +61,19 @@ - + {{#if (can 'read session-recording' B.data)}} + + {{/if}} diff --git a/ui/admin/tests/acceptance/session-recordings/list-test.js b/ui/admin/tests/acceptance/session-recordings/list-test.js index 2c7587008..acd15f203 100644 --- a/ui/admin/tests/acceptance/session-recordings/list-test.js +++ b/ui/admin/tests/acceptance/session-recordings/list-test.js @@ -10,8 +10,6 @@ module('Acceptance | session recordings | list', function (hooks) { setupMirage(hooks); // Selectors - const LIST_SESSION_RECORDING_BUTTON = - 'table > tbody > tr > td:last-child > a'; const SESSION_RECORDING_TITLE = 'Session Recordings'; // Instances @@ -83,15 +81,4 @@ module('Acceptance | session recordings | list', function (hooks) { 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); - // Visit session recordings - await visit(urls.sessionRecordings); - assert.dom('table').hasClass('hds-table'); - // Click a session recording and check it navigates properly - await click(LIST_SESSION_RECORDING_BUTTON); - assert.strictEqual(currentURL(), urls.sessionRecording); - }); }); diff --git a/ui/admin/tests/acceptance/session-recordings/session-recording/session-recording-test.js b/ui/admin/tests/acceptance/session-recordings/read-test.js similarity index 60% rename from ui/admin/tests/acceptance/session-recordings/session-recording/session-recording-test.js rename to ui/admin/tests/acceptance/session-recordings/read-test.js index 0a91ad99d..8d5c60a9e 100644 --- a/ui/admin/tests/acceptance/session-recordings/session-recording/session-recording-test.js +++ b/ui/admin/tests/acceptance/session-recordings/read-test.js @@ -2,13 +2,16 @@ import { module, test } from 'qunit'; 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 a11yAudit from 'ember-a11y-testing/test-support/audit'; import { authenticateSession } from 'ember-simple-auth/test-support'; -module('Acceptance | session recordings | session recording', function (hooks) { +module('Acceptance | session recordings | read', function (hooks) { setupApplicationTest(hooks); setupMirage(hooks); // Selectors + const LIST_SESSION_RECORDING_BUTTON = + 'table > tbody > tr > td:last-child > a'; const LIST_CHANNEL_RECORDING_BUTTON = 'table > tbody > tr > td:last-child > a'; @@ -50,14 +53,43 @@ module('Acceptance | session recordings | session recording', function (hooks) { authenticateSession({}); }); - test('user can navigate to a session recording', async function (assert) { + test('visiting a session recording', async function (assert) { assert.expect(1); + // Visit session recordings + await visit(urls.sessionRecordings); + await a11yAudit(); + + // Click a session recording and check it navigates properly + await click(LIST_SESSION_RECORDING_BUTTON); + await a11yAudit(); - // Visit session recording - await visit(urls.sessionRecording); assert.strictEqual(currentURL(), urls.sessionRecording); }); + test('user can navigate to a session recording with proper authorization', async function (assert) { + assert.expect(3); + // Visit session recordings + await visit(urls.sessionRecordings); + + assert.true(instances.sessionRecording.authorized_actions.includes('read')); + assert.dom(`[href="${urls.sessionRecording}"]`).exists(); + // Click a session recording and check it navigates properly + await click(LIST_SESSION_RECORDING_BUTTON); + assert.strictEqual(currentURL(), urls.sessionRecording); + }); + + test('user cannot navigate to a session recording without the read action', async function (assert) { + assert.expect(1); + instances.sessionRecording.authorized_actions = + instances.sessionRecording.authorized_actions.filter( + (item) => item !== 'read' + ); + + // Visit session recordings + await visit(urls.sessionRecordings); + assert.dom(LIST_SESSION_RECORDING_BUTTON).doesNotExist(); + }); + test('user can navigate to a channel recording', async function (assert) { assert.expect(2);