From 27a676774c4e44a7b66feec9d3b856be338bd1ca Mon Sep 17 00:00:00 2001 From: lisbet-alvarez <107949262+lisbet-alvarez@users.noreply.github.com> Date: Thu, 21 Jul 2022 13:48:16 -0700 Subject: [PATCH] Icu 5232 credential mirage mocks (#1204) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 🎸 Add mirage mocks for credential ✅ Closes: ICU-5232 * chore: 🤖 Update Credential Store factory to handle credentials ✅ Closes: ICU-5232 * feat: 🎸 Added mirage mocks for credential ✅ Closes: ICU-5232 Co-authored-by: Cameron Perera --- .../api/mirage/factories/credential-store.js | 36 ++++++++++++++----- addons/api/mirage/factories/credential.js | 21 +++++++++++ .../mirage/generated/factories/credential.js | 13 +++++++ addons/api/mirage/models/credential.js | 7 ++++ addons/api/mirage/serializers/credential.js | 19 ++++++++++ 5 files changed, 87 insertions(+), 9 deletions(-) create mode 100644 addons/api/mirage/factories/credential.js create mode 100644 addons/api/mirage/generated/factories/credential.js create mode 100644 addons/api/mirage/models/credential.js create mode 100644 addons/api/mirage/serializers/credential.js diff --git a/addons/api/mirage/factories/credential-store.js b/addons/api/mirage/factories/credential-store.js index 55ecf4f85..2472c23fe 100644 --- a/addons/api/mirage/factories/credential-store.js +++ b/addons/api/mirage/factories/credential-store.js @@ -14,10 +14,18 @@ export default factory.extend({ 'update', 'delete', ], - authorized_collection_actions: () => { - return { - 'credential-libraries': ['create', 'list'], - }; + authorized_collection_actions() { + switch (this.type) { + case 'vault': + return { + 'credential-libraries': ['create', 'list'], + }; + case 'static': + default: + return { + 'credentials': ['create', 'list'], + }; + } }, id: () => generateId('cs_'), type: (i) => types[i % types.length], @@ -40,11 +48,21 @@ export default factory.extend({ withAssociations: trait({ afterCreate(credentialStore, server) { - const { scope } = credentialStore; - server.createList('credential-library', 2, { - scope, - credentialStore, - }); + const { scope, type } = credentialStore; + switch (type) { + case 'vault': + server.createList('credential-library', 2, { + scope, + credentialStore, + }); + break; + case 'static': + default: + server.createList('credential', 2, { + scope, + credentialStore, + }); + } }, }), }); diff --git a/addons/api/mirage/factories/credential.js b/addons/api/mirage/factories/credential.js new file mode 100644 index 000000000..4d9dc1a18 --- /dev/null +++ b/addons/api/mirage/factories/credential.js @@ -0,0 +1,21 @@ +import factory from '../generated/factories/credential'; +import { random } from 'faker'; +import permissions from '../helpers/permissions'; +import generatedId from '../helpers/id'; + +export default factory.extend({ + id: () => generatedId('cred_'), + type: 'username_password', + authorized_actions: () => + permissions.authorizedActionsFor('credential') || [ + 'no-op', + 'read', + 'update', + 'delete', + ], + attributes() { + return { + username: random.word(), + }; + }, +}); \ No newline at end of file diff --git a/addons/api/mirage/generated/factories/credential.js b/addons/api/mirage/generated/factories/credential.js new file mode 100644 index 000000000..1df2627e3 --- /dev/null +++ b/addons/api/mirage/generated/factories/credential.js @@ -0,0 +1,13 @@ +import { Factory } from 'ember-cli-mirage'; +import { random, date, datatype } from 'faker'; + +/** + * GeneratedCredentialModelFactory + */ +export default Factory.extend({ + name: () => random.words(), + description: () => random.words(), + created_time: () => date.recent(), + updated_time: () => date.recent(), + version: () => datatype.number(), +}); diff --git a/addons/api/mirage/models/credential.js b/addons/api/mirage/models/credential.js new file mode 100644 index 000000000..83ad9f912 --- /dev/null +++ b/addons/api/mirage/models/credential.js @@ -0,0 +1,7 @@ +import { belongsTo } from 'ember-cli-mirage'; +import Model from './base'; + +export default Model.extend({ + scope: belongsTo(), + credentialStore: belongsTo(), +}); diff --git a/addons/api/mirage/serializers/credential.js b/addons/api/mirage/serializers/credential.js new file mode 100644 index 000000000..7afcc7965 --- /dev/null +++ b/addons/api/mirage/serializers/credential.js @@ -0,0 +1,19 @@ +import ApplicationSerializer from './application'; + +export default ApplicationSerializer.extend({ + modelName: 'credential', + + _hashForModel(model) { + const json = ApplicationSerializer.prototype._hashForModel.apply( + this, + arguments + ); + json.credential_store_id = model.credentialStoreId; + + // in a real API, the following field is set-only and returned + // as an associated HMAC field + delete json.attributes?.password_hmac; + + return json; + }, +});