Files
threshold-ui/addons/api/mirage/factories/host-catalog.js
T

89 lines
2.4 KiB
JavaScript
Raw Normal View History

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
2020-06-04 16:53:37 -04:00
import factory from '../generated/factories/host-catalog';
2023-01-09 08:48:49 -08:00
import { trait } from 'miragejs';
2021-08-19 16:06:47 -07:00
import permissions from '../helpers/permissions';
import { faker } from '@faker-js/faker';
2022-06-01 14:02:18 -04:00
import generateId from '../helpers/id';
const types = ['static', 'plugin'];
// Represents known plugin types, except "foobar" which models the possibility
// of receiving an _unknown_ type, which the UI must handle gracefully.
const pluginTypes = ['aws', 'azure', 'foobar'];
let pluginTypeCounter = 1;
2020-06-04 16:53:37 -04:00
export default factory.extend({
2022-06-01 14:02:18 -04:00
id: () => generateId('hc_'),
// Cycle through available types
type: (i) => types[i % types.length],
2021-08-19 16:06:47 -07:00
authorized_actions: () =>
permissions.authorizedActionsFor('host-catalog') || [
'no-op',
'read',
'update',
'delete',
],
authorized_collection_actions: function () {
const isStatic = this.type === 'static';
2021-09-02 15:28:40 -07:00
return {
// only static catalogs allow host create at this time
hosts: isStatic ? ['create', 'list'] : ['list'],
2021-09-02 13:01:58 -07:00
'host-sets': ['create', 'list'],
2021-09-02 15:28:40 -07:00
};
},
plugin: function (i) {
if (this.type === 'plugin') {
return {
id: `plugin-id-${i}`,
name: pluginTypes[pluginTypeCounter++ % pluginTypes.length],
description: faker.random.words(),
};
}
},
2022-01-21 14:45:21 -08:00
attributes() {
switch (this.plugin?.name) {
case 'aws':
2022-02-08 14:44:15 -08:00
return {
disable_credential_rotation: faker.datatype.boolean(),
region: faker.address.state(),
2022-02-08 14:44:15 -08:00
};
case 'azure':
return {
disable_credential_rotation: faker.datatype.boolean(),
tenant_id: faker.datatype.hexadecimal(6),
client_id: faker.datatype.hexadecimal(6),
subscription_id: faker.datatype.hexadecimal(8),
};
2022-02-08 14:44:15 -08:00
}
},
secrets() {
switch (this.plugin?.name) {
case 'aws':
return {
access_key_id: faker.datatype.hexadecimal(8),
secret_access_key: faker.datatype.string(12),
};
2022-02-08 14:44:15 -08:00
case 'azure':
return {
secret_id: faker.datatype.hexadecimal(6),
secret_value: faker.datatype.string(12),
2022-02-08 14:44:15 -08:00
};
2022-01-21 14:45:21 -08:00
}
},
withChildren: trait({
afterCreate(hostCatalog, server) {
const { scope, type } = hostCatalog;
const hosts = server.createList('host', 10, { scope, hostCatalog, type });
server.createList('host-set', 3, { scope, hostCatalog, hosts, type });
2021-03-04 15:47:38 -05:00
},
}),
});