diff --git a/addons/api/mirage/config.js b/addons/api/mirage/config.js index cbf0b574f..cc8712d4b 100644 --- a/addons/api/mirage/config.js +++ b/addons/api/mirage/config.js @@ -634,8 +634,7 @@ function routes() { this.patch('/managed-groups/:id'); this.del('/managed-groups/:id'); - // worker - + // workers this.get( '/workers', ({ workers }, { queryParams: { scope_id: scopeId } }) => { @@ -656,6 +655,30 @@ function routes() { return workers.create(newWorker.attrs); }); + // storage-buckets + this.get( + '/storage-buckets', + ({ storageBuckets }, { queryParams: { scope_id: scopeId } }) => { + return storageBuckets.where({ scopeId }); + } + ); + this.get('/storage-buckets/:id'); + this.del('/storage-buckets/:id'); + this.patch('/storage-buckets/:id'); + this.post( + '/storage-buckets', + ({ storageBuckets }, { queryParams: { plugin_name } }) => { + const attrs = this.normalizedRequestAttrs(); + if (plugin_name) { + attrs.type = 'plugin'; + attrs.plugin = { + name: plugin_name, + }; + } + return storageBuckets.create(attrs); + } + ); + /* Uncomment the following line and the Response import above * Then change the response code to simulate error responses. * this.get('/scopes', () => new Response(505)); diff --git a/addons/api/mirage/factories/scope.js b/addons/api/mirage/factories/scope.js index 1a73738ab..eb8cf99bd 100644 --- a/addons/api/mirage/factories/scope.js +++ b/addons/api/mirage/factories/scope.js @@ -30,6 +30,7 @@ export default factory.extend({ 'credential-stores': ['create', 'list'], 'auth-methods': ['create', 'list'], 'host-catalogs': ['create', 'list'], + 'storage-buckets': ['create', 'list'], }; // Worker permissions only available on the global scope diff --git a/addons/api/mirage/factories/storage-bucket.js b/addons/api/mirage/factories/storage-bucket.js new file mode 100644 index 000000000..2145f6ed1 --- /dev/null +++ b/addons/api/mirage/factories/storage-bucket.js @@ -0,0 +1,51 @@ +import factory from '../generated/factories/storage-bucket'; +import permissions from '../helpers/permissions'; +import { faker } from '@faker-js/faker'; +import generateId from '../helpers/id'; +import { + TYPES_STORAGE_BUCKET as types, + TYPES_STORAGE_BUCKET_PLUGIN, + TYPE_STORAGE_BUCKET_PLUGIN_AWS_S3, +} from 'api/models/storage-bucket'; + +// Represents known plugin types, except "foobar" which models the possibility +// of receiving an _unknown_ type, which the UI must handle gracefully. +const pluginTypes = [...TYPES_STORAGE_BUCKET_PLUGIN, 'foobar']; + +export default factory.extend({ + id: () => generateId('sb_'), + + // Cycle through available types + type: (i) => types[i % types.length], + + authorized_actions: () => + permissions.authorizedActionsFor('storage-bucket') || [ + 'no-op', + 'read', + 'update', + 'delete', + ], + + plugin: function (i) { + if (this.type === 'plugin') { + return { + id: `plugin-id-${i}`, + name: pluginTypes[i % pluginTypes.length], + description: faker.random.words(), + }; + } + }, + + attributes() { + switch (this.plugin?.name) { + case TYPE_STORAGE_BUCKET_PLUGIN_AWS_S3: + return { + region: `us-${faker.address.cardinalDirection()}-${faker.datatype.number( + { + max: 9, + } + )}`, + }; + } + }, +}); diff --git a/addons/api/mirage/generated/factories/storage-bucket.js b/addons/api/mirage/generated/factories/storage-bucket.js new file mode 100644 index 000000000..f8346f8c6 --- /dev/null +++ b/addons/api/mirage/generated/factories/storage-bucket.js @@ -0,0 +1,17 @@ +import { Factory } from 'miragejs'; +import { faker } from '@faker-js/faker'; + +/** + * GeneratedStorageBucketModelFactory + */ +export default Factory.extend({ + type: 'plugin', + name: () => faker.random.words(), + description: () => faker.random.words(), + created_time: () => faker.date.recent(), + updated_time: () => faker.date.recent(), + version: () => faker.datatype.number(), + bucket_name: () => faker.internet.domainWord(), + bucket_prefix: () => faker.system.directoryPath(), + worker_filter: () => faker.random.words(), +}); diff --git a/addons/api/mirage/models/storage-bucket.js b/addons/api/mirage/models/storage-bucket.js new file mode 100644 index 000000000..27d40334d --- /dev/null +++ b/addons/api/mirage/models/storage-bucket.js @@ -0,0 +1,5 @@ +import { belongsTo } from 'miragejs'; +import Model from './base'; +export default Model.extend({ + scope: belongsTo(), +}); diff --git a/addons/api/mirage/scenarios/default.js b/addons/api/mirage/scenarios/default.js index 17a4fd90c..eb8531c2f 100644 --- a/addons/api/mirage/scenarios/default.js +++ b/addons/api/mirage/scenarios/default.js @@ -109,4 +109,8 @@ export default function (server) { // Workers server.createList('worker', 3, { scope: globalScope }); + + // Session Recordings and Storage Buckets + server.createList('storage-bucket', 3, { scope: globalScope }); + server.createList('storage-bucket', 2, { scope: orgScope }); } diff --git a/addons/api/mirage/serializers/storage-bucket.js b/addons/api/mirage/serializers/storage-bucket.js new file mode 100644 index 000000000..7a5bc48df --- /dev/null +++ b/addons/api/mirage/serializers/storage-bucket.js @@ -0,0 +1,4 @@ +import ApplicationSerializer from './application'; +export default ApplicationSerializer.extend({ + modelName: 'storage-bucket', +});