104 lines
3.0 KiB
JavaScript
104 lines
3.0 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: MPL-2.0
|
|
*/
|
|
|
|
import factory from '../generated/factories/session-recording';
|
|
import permissions from '../helpers/permissions';
|
|
import generateId from '../helpers/id';
|
|
import { faker } from '@faker-js/faker';
|
|
import { trait } from 'miragejs';
|
|
import {
|
|
TYPES_SESSION_RECORDING as types,
|
|
STATE_SESSION_RECORDING_STARTED,
|
|
STATE_SESSION_RECORDING_AVAILABLE,
|
|
STATE_SESSION_RECORDING_UNKNOWN,
|
|
} from 'api/models/session-recording';
|
|
|
|
const states = [
|
|
STATE_SESSION_RECORDING_AVAILABLE,
|
|
STATE_SESSION_RECORDING_STARTED,
|
|
STATE_SESSION_RECORDING_UNKNOWN,
|
|
];
|
|
const pickRandomElement = (arr) => faker.helpers.arrayElement(arr);
|
|
export default factory.extend({
|
|
id: () => generateId('sr_'),
|
|
|
|
// Cycle through available types
|
|
type: (i) => types[i % types.length],
|
|
state: (i) => states[i % states.length],
|
|
start_time() {
|
|
return this.state === STATE_SESSION_RECORDING_AVAILABLE
|
|
? faker.date.recent(3, this.end_time)
|
|
: null;
|
|
},
|
|
end_time() {
|
|
return this.state === STATE_SESSION_RECORDING_AVAILABLE
|
|
? faker.date.recent(1, this.updated_time)
|
|
: null;
|
|
},
|
|
duration() {
|
|
return this.state === STATE_SESSION_RECORDING_AVAILABLE
|
|
? `${faker.datatype.number()}s`
|
|
: null;
|
|
},
|
|
|
|
authorized_actions: () =>
|
|
permissions.authorizedActionsFor('session-recording') || [
|
|
'no-op',
|
|
'read',
|
|
'download',
|
|
],
|
|
|
|
withNonExistingUserAndTarget: trait({
|
|
afterCreate(sessionRecording, server) {
|
|
const user = pickRandomElement(server.schema.users.all().models);
|
|
user.id = 'deleted_user';
|
|
const session = pickRandomElement(server.schema.sessions.all().models);
|
|
session.id = 'deleted_session';
|
|
const target = pickRandomElement(
|
|
server.schema.targets.where((target) => target.storage_bucket_id).models
|
|
);
|
|
target.id = 'deleted_target';
|
|
|
|
sessionRecording.update({
|
|
sessionId: session.id,
|
|
storage_bucket_id: target.storage_bucket_id,
|
|
create_time_values: {
|
|
user: user.attrs,
|
|
target: target.attrs,
|
|
},
|
|
});
|
|
},
|
|
}),
|
|
|
|
withExistingUserAndTarget: trait({
|
|
afterCreate(sessionRecording, server) {
|
|
const user = pickRandomElement(server.schema.users.all().models);
|
|
const session = pickRandomElement(server.schema.sessions.all().models);
|
|
const target = pickRandomElement(
|
|
server.schema.targets.where((target) => target.storage_bucket_id).models
|
|
);
|
|
|
|
sessionRecording.update({
|
|
sessionId: session.id,
|
|
storage_bucket_id: target.storage_bucket_id,
|
|
create_time_values: {
|
|
user: user.attrs,
|
|
target: target.attrs,
|
|
},
|
|
});
|
|
},
|
|
}),
|
|
|
|
withConnectionAndChannels: trait({
|
|
afterCreate(session_recording, server) {
|
|
server
|
|
.createList('connection-recording', 3, { session_recording })
|
|
.forEach((connection_recording) => {
|
|
server.createList('channel-recording', 3, { connection_recording });
|
|
});
|
|
},
|
|
}),
|
|
});
|