From 1717968e5916466dee61dc9fd04391cea5b9ee5d Mon Sep 17 00:00:00 2001 From: Cameron Perera Date: Mon, 24 Apr 2023 12:10:17 -0500 Subject: [PATCH] Icu 9020 move connection channel sorting to model (#217) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * test: 💍 add tests for sorted connection and channels * feat: 🎸 Add sorted property for connections and channels ✅ Closes: ICU-9020 --- .../api/addon/models/connection-recording.js | 5 ++++ addons/api/addon/models/session-recording.js | 5 ++++ .../unit/models/connection-recording-test.js | 19 ++++++++++++++ .../unit/models/session-recording-test.js | 26 +++++++++++++++++++ .../session-recordings/session-recording.js | 14 ---------- .../session-recording/index.hbs | 9 ++++--- 6 files changed, 61 insertions(+), 17 deletions(-) diff --git a/addons/api/addon/models/connection-recording.js b/addons/api/addon/models/connection-recording.js index ae0022191..662df4bd6 100644 --- a/addons/api/addon/models/connection-recording.js +++ b/addons/api/addon/models/connection-recording.js @@ -1,7 +1,12 @@ import GeneratedConnectionRecordingModel from '../generated/models/connection-recording'; import { belongsTo, hasMany } from '@ember-data/model'; +import { sort } from '@ember/object/computed'; export default class ConnectionRecordingModel extends GeneratedConnectionRecordingModel { @belongsTo('session-recording', { async: false }) session_recording; @hasMany('channel-recording', { async: false }) channel_recordings; + + startTimeSortingDesc = ['start_time:desc']; + @sort('channel_recordings', 'startTimeSortingDesc') + sortedChannelsByStartTimeDesc; } diff --git a/addons/api/addon/models/session-recording.js b/addons/api/addon/models/session-recording.js index 666009455..f43b85ff4 100644 --- a/addons/api/addon/models/session-recording.js +++ b/addons/api/addon/models/session-recording.js @@ -1,6 +1,7 @@ import GeneratedSessionRecordingModel from '../generated/models/session-recording'; import { hasMany } from '@ember-data/model'; import { inject as service } from '@ember/service'; +import { sort } from '@ember/object/computed'; export const TYPE_SESSION_RECORDING_SSH = 'ssh'; export const TYPES_SESSION_RECORDING = Object.freeze([ @@ -12,6 +13,10 @@ export default class SessionRecordingModel extends GeneratedSessionRecordingMode @service store; + startTimeSortingDesc = ['start_time:desc']; + @sort('connection_recordings', 'startTimeSortingDesc') + sortedConnectionsByStartTimeDesc; + /** * True if the session recording type is `ssh`. * @type {boolean} diff --git a/addons/api/tests/unit/models/connection-recording-test.js b/addons/api/tests/unit/models/connection-recording-test.js index 30325bf4c..da0cf6209 100644 --- a/addons/api/tests/unit/models/connection-recording-test.js +++ b/addons/api/tests/unit/models/connection-recording-test.js @@ -20,4 +20,23 @@ module('Unit | Model | connection-recording', function (hooks) { const channel_recordings = await model.channel_recordings; assert.strictEqual(channel_recordings.length, 1); }); + + test('it has sortedChannelsByStartTimeDesc property and returns the expected values', async function (assert) { + assert.expect(3); + const store = this.owner.lookup('service:store'); + const newestChannel = store.createRecord('channel-recording', { + start_time: new Date('2023-01-02T00:00:00.999Z'), + }); + const oldestChannel = store.createRecord('channel-recording', { + start_time: new Date('2023-01-01T00:00:00.999Z'), + }); + const model = store.createRecord('connection-recording', { + channel_recordings: [oldestChannel, newestChannel], + }); + + const sortedChannels = await model.sortedChannelsByStartTimeDesc; + assert.strictEqual(sortedChannels.length, 2); + assert.strictEqual(sortedChannels[0].start_time, newestChannel.start_time); + assert.strictEqual(sortedChannels[1].start_time, oldestChannel.start_time); + }); }); diff --git a/addons/api/tests/unit/models/session-recording-test.js b/addons/api/tests/unit/models/session-recording-test.js index d65a3f1c2..fa020322d 100644 --- a/addons/api/tests/unit/models/session-recording-test.js +++ b/addons/api/tests/unit/models/session-recording-test.js @@ -51,6 +51,32 @@ module('Unit | Model | session-recording', function (hooks) { assert.strictEqual(connection_recordings.length, 1); }); + test('it has sortedConnectionsByStartTimeDesc property and returns the expected values', async function (assert) { + assert.expect(3); + const store = this.owner.lookup('service:store'); + const newestConnection = store.createRecord('connection-recording', { + start_time: new Date('2023-01-02T00:00:00.999Z'), + }); + const oldestConnection = store.createRecord('connection-recording', { + start_time: new Date('2023-01-01T00:00:00.999Z'), + }); + const model = store.createRecord('session-recording', { + type: TYPE_SESSION_RECORDING_SSH, + connection_recordings: [oldestConnection, newestConnection], + }); + + const sortedConnections = await model.sortedConnectionsByStartTimeDesc; + assert.strictEqual(sortedConnections.length, 2); + assert.strictEqual( + sortedConnections[0].start_time, + newestConnection.start_time + ); + assert.strictEqual( + sortedConnections[1].start_time, + oldestConnection.start_time + ); + }); + test('it has targetScopeDisplayName and returns the expected values', async function (assert) { assert.expect(2); const store = this.owner.lookup('service:store'); diff --git a/ui/admin/app/routes/scopes/scope/session-recordings/session-recording.js b/ui/admin/app/routes/scopes/scope/session-recordings/session-recording.js index 4e3664267..07d59ad0a 100644 --- a/ui/admin/app/routes/scopes/scope/session-recordings/session-recording.js +++ b/ui/admin/app/routes/scopes/scope/session-recordings/session-recording.js @@ -40,22 +40,8 @@ export default class ScopesScopeSessionRecordingsSessionRecordingRoute extends R // no op } - const sortedConnections = sessionRecording.connection_recordings - .sortBy('start_time') - .reverse() - .map((connection) => { - const sortedChannels = connection.channel_recordings - .sortBy('start_time') - .reverse(); - return { - connection, - channels: sortedChannels, - }; - }); - return { sessionRecording, - sortedConnections, storageBucket, }; } diff --git a/ui/admin/app/templates/scopes/scope/session-recordings/session-recording/index.hbs b/ui/admin/app/templates/scopes/scope/session-recordings/session-recording/index.hbs index 2f4321f40..06f68f3a8 100644 --- a/ui/admin/app/templates/scopes/scope/session-recordings/session-recording/index.hbs +++ b/ui/admin/app/templates/scopes/scope/session-recordings/session-recording/index.hbs @@ -11,15 +11,18 @@
- {{#each @model.sortedConnections as |connection|}} + {{#each + @model.sessionRecording.sortedConnectionsByStartTimeDesc + as |connection| + }}

{{t 'resources.session-recording.connection.title'}} - {{connection.connection.id}} + {{connection.id}}