From 24f630f0847767559abc7a7bc827b07e678a20ea Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Fri, 3 Jun 2022 13:25:53 -0400 Subject: [PATCH] Chore onboarding routing logic (#1123) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: 🤖 stub out onboarding routes * chore: initial onboarding routing logic * chore: initial routing logic and resource creation * chore: route "manual" to new org * Update en-us.yaml * fix: linting Co-authored-by: Dharini Jeeva --- addons/core/translations/errors/en-us.yaml | 2 + ui/admin/app/router.js | 9 ++ .../onboarding/quick-setup/choose-path.js | 3 - .../quick-setup/create-resources.js | 3 - .../routes/onboarding/quick-setup/success.js | 3 - .../onboarding/quick-setup/choose-path.js | 26 ++++++ .../quick-setup/create-resources.js | 93 +++++++++++++++++++ .../quick-setup/create-resources/success.js | 11 +++ ui/admin/app/styles/app.scss | 4 +- .../onboarding/quick-setup/choose-path.hbs | 0 .../quick-setup/create-resources.hbs | 0 .../quick-setup/create-resources/index.hbs | 3 + .../quick-setup/create-resources}/success.hbs | 0 .../quick-setup/choose-path-test.js | 11 --- .../onboarding/quick-setup/success-test.js | 11 --- .../quick-setup/choose-path-test.js} | 4 +- .../quick-setup/create-resources-test.js | 16 ++++ .../create-resources/success-test.js | 16 ++++ 18 files changed, 181 insertions(+), 34 deletions(-) delete mode 100644 ui/admin/app/routes/onboarding/quick-setup/choose-path.js delete mode 100644 ui/admin/app/routes/onboarding/quick-setup/create-resources.js delete mode 100644 ui/admin/app/routes/onboarding/quick-setup/success.js create mode 100644 ui/admin/app/routes/scopes/scope/onboarding/quick-setup/choose-path.js create mode 100644 ui/admin/app/routes/scopes/scope/onboarding/quick-setup/create-resources.js create mode 100644 ui/admin/app/routes/scopes/scope/onboarding/quick-setup/create-resources/success.js rename ui/admin/app/templates/{ => scopes/scope}/onboarding/quick-setup/choose-path.hbs (100%) rename ui/admin/app/templates/{ => scopes/scope}/onboarding/quick-setup/create-resources.hbs (100%) create mode 100644 ui/admin/app/templates/scopes/scope/onboarding/quick-setup/create-resources/index.hbs rename ui/admin/app/templates/{onboarding/quick-setup => scopes/scope/onboarding/quick-setup/create-resources}/success.hbs (100%) delete mode 100644 ui/admin/tests/unit/routes/onboarding/quick-setup/choose-path-test.js delete mode 100644 ui/admin/tests/unit/routes/onboarding/quick-setup/success-test.js rename ui/admin/tests/unit/routes/{onboarding/quick-setup/create-resources-test.js => scopes/scope/onboarding/quick-setup/choose-path-test.js} (66%) create mode 100644 ui/admin/tests/unit/routes/scopes/scope/onboarding/quick-setup/create-resources-test.js create mode 100644 ui/admin/tests/unit/routes/scopes/scope/onboarding/quick-setup/create-resources/success-test.js diff --git a/addons/core/translations/errors/en-us.yaml b/addons/core/translations/errors/en-us.yaml index eaaac2f20..b1eee3c1e 100644 --- a/addons/core/translations/errors/en-us.yaml +++ b/addons/core/translations/errors/en-us.yaml @@ -19,3 +19,5 @@ authentication-failed: title: Authentication Failed origin-verification-failed: description: Unable to connect to the specified origin. Please check the URL and try again. +quick-setup-failed: + description: We're sorry, quick setup was unable to generate all resources. diff --git a/ui/admin/app/router.js b/ui/admin/app/router.js index 043daaee6..4248e5ce6 100644 --- a/ui/admin/app/router.js +++ b/ui/admin/app/router.js @@ -18,6 +18,15 @@ Router.map(function () { }); }); + this.route('onboarding', function () { + this.route('quick-setup', function () { + this.route('choose-path'); + this.route('create-resources', function () { + this.route('success'); + }); + }); + }); + this.route('scopes', function () {}); this.route('edit'); this.route('new'); diff --git a/ui/admin/app/routes/onboarding/quick-setup/choose-path.js b/ui/admin/app/routes/onboarding/quick-setup/choose-path.js deleted file mode 100644 index 226e4e781..000000000 --- a/ui/admin/app/routes/onboarding/quick-setup/choose-path.js +++ /dev/null @@ -1,3 +0,0 @@ -import Route from '@ember/routing/route'; - -export default class OnboardingQuickSetupChoosePathRoute extends Route {} diff --git a/ui/admin/app/routes/onboarding/quick-setup/create-resources.js b/ui/admin/app/routes/onboarding/quick-setup/create-resources.js deleted file mode 100644 index f380d447c..000000000 --- a/ui/admin/app/routes/onboarding/quick-setup/create-resources.js +++ /dev/null @@ -1,3 +0,0 @@ -import Route from '@ember/routing/route'; - -export default class OnboardingQuickSetupCreateResourcesRoute extends Route {} diff --git a/ui/admin/app/routes/onboarding/quick-setup/success.js b/ui/admin/app/routes/onboarding/quick-setup/success.js deleted file mode 100644 index 70dc6b4a6..000000000 --- a/ui/admin/app/routes/onboarding/quick-setup/success.js +++ /dev/null @@ -1,3 +0,0 @@ -import Route from '@ember/routing/route'; - -export default class OnboardingQuickSetupSuccessRoute extends Route {} diff --git a/ui/admin/app/routes/scopes/scope/onboarding/quick-setup/choose-path.js b/ui/admin/app/routes/scopes/scope/onboarding/quick-setup/choose-path.js new file mode 100644 index 000000000..1d8c04385 --- /dev/null +++ b/ui/admin/app/routes/scopes/scope/onboarding/quick-setup/choose-path.js @@ -0,0 +1,26 @@ +import Route from '@ember/routing/route'; +import { inject as service } from '@ember/service'; +import { action } from '@ember/object'; + +export default class ScopesScopeOnboardingQuickSetupChoosePathRoute extends Route { + // =services + + @service router; + + // =actions + + @action + choosePath(path = 'guided') { + switch (path) { + case 'guided': + this.router.transitionTo( + 'scopes.scope.onboarding.quick-setup.create-resources' + ); + break; + case 'manual': + default: + this.router.transitionTo('scopes.scope.new', 'global'); + break; + } + } +} diff --git a/ui/admin/app/routes/scopes/scope/onboarding/quick-setup/create-resources.js b/ui/admin/app/routes/scopes/scope/onboarding/quick-setup/create-resources.js new file mode 100644 index 000000000..478a57045 --- /dev/null +++ b/ui/admin/app/routes/scopes/scope/onboarding/quick-setup/create-resources.js @@ -0,0 +1,93 @@ +import Route from '@ember/routing/route'; +import { inject as service } from '@ember/service'; +import { action } from '@ember/object'; +import { loading } from 'ember-loading'; +import { notifyError } from 'core/decorators/notify'; + +export default class ScopesScopeOnboardingQuickSetupCreateResourcesRoute extends Route { + // =services + + @service router; + @service intl; + + // =methods + + async model() { + return { + org: this.store.createRecord('scope', { + type: 'org', + scopeID: 'global', + name: 'Marketing Department', + description: 'Sample org created by quick setup', + }), + project: this.store.createRecord('scope', { + type: 'project', + name: 'New widget ad campaign', + description: 'Sample project created by quick setup', + }), + hostCatalog: this.store.createRecord('host-catalog', { + name: 'All Databases', + description: 'Sample host catalog created by quick setup', + }), + hostSet: this.store.createRecord('host-set', { + name: 'QA Databases', + description: 'Sample host set created by quick setup', + }), + host: this.store.createRecord('host', { + name: 'CRM Database', + description: 'Sample host created by quick setup', + }), + target: this.store.createRecord('target', { + name: 'CRM Database target', + description: 'Sample target created by quick setup', + }), + }; + } + + // =actions + + @action + @loading + @notifyError(({ message }) => message) + async submit(event, hostAddress = '1234', targetPort = '42') { + try { + await this.createOnboardingResourcesAndRedirect(hostAddress, targetPort); + } catch (e) { + const message = this.intl.t('errors.quick-setup-failed.description'); + this.router.replaceWith('scopes.scope', 'global'); + throw new Error(message); + } + } + + async createOnboardingResourcesAndRedirect(hostAddress, targetPort) { + const { org, project, hostCatalog, hostSet, host, target } = + this.currentModel; + // The Procedure + await org.save(); + project.scopeID = org.id; + await project.save(); + hostCatalog.scopeID = project.id; + await hostCatalog.save(); + hostSet.host_catalog_id = hostCatalog.id; + await hostSet.save(); + host.host_catalog_id = hostCatalog.id; + if (hostAddress) { + host.address = hostAddress; + await host.save(); + await hostSet.addHosts([host.id]); + target.scopeID = project.id; + target.default_port = targetPort; + await target.save(); + await target.addHostSources([hostSet.id]); + this.router.transitionTo( + 'scopes.scope.onboarding.quick-setup.create-resources.success' + ); + } else { + this.router.transitionTo( + 'scopes.scope.host-catalogs.host-catalog.hosts', + org.id, + hostCatalog.id + ); + } + } +} diff --git a/ui/admin/app/routes/scopes/scope/onboarding/quick-setup/create-resources/success.js b/ui/admin/app/routes/scopes/scope/onboarding/quick-setup/create-resources/success.js new file mode 100644 index 000000000..e673c582d --- /dev/null +++ b/ui/admin/app/routes/scopes/scope/onboarding/quick-setup/create-resources/success.js @@ -0,0 +1,11 @@ +import Route from '@ember/routing/route'; + +export default class ScopesScopeOnboardingQuickSetupCreateResourcesSuccessRoute extends Route { + // =methods + + model() { + return this.modelFor( + 'scopes.scope.onboarding.quick-setup.create-resources' + ); + } +} diff --git a/ui/admin/app/styles/app.scss b/ui/admin/app/styles/app.scss index c54c5e73a..11a275581 100644 --- a/ui/admin/app/styles/app.scss +++ b/ui/admin/app/styles/app.scss @@ -223,7 +223,9 @@ .is-loading { .rose-icon { @keyframes hds-flight-icon-animation-rotation { - to {transform: rotate(360deg);} + to { + transform: rotate(360deg); + } } > svg { diff --git a/ui/admin/app/templates/onboarding/quick-setup/choose-path.hbs b/ui/admin/app/templates/scopes/scope/onboarding/quick-setup/choose-path.hbs similarity index 100% rename from ui/admin/app/templates/onboarding/quick-setup/choose-path.hbs rename to ui/admin/app/templates/scopes/scope/onboarding/quick-setup/choose-path.hbs diff --git a/ui/admin/app/templates/onboarding/quick-setup/create-resources.hbs b/ui/admin/app/templates/scopes/scope/onboarding/quick-setup/create-resources.hbs similarity index 100% rename from ui/admin/app/templates/onboarding/quick-setup/create-resources.hbs rename to ui/admin/app/templates/scopes/scope/onboarding/quick-setup/create-resources.hbs diff --git a/ui/admin/app/templates/scopes/scope/onboarding/quick-setup/create-resources/index.hbs b/ui/admin/app/templates/scopes/scope/onboarding/quick-setup/create-resources/index.hbs new file mode 100644 index 000000000..cbcd28dee --- /dev/null +++ b/ui/admin/app/templates/scopes/scope/onboarding/quick-setup/create-resources/index.hbs @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/ui/admin/app/templates/onboarding/quick-setup/success.hbs b/ui/admin/app/templates/scopes/scope/onboarding/quick-setup/create-resources/success.hbs similarity index 100% rename from ui/admin/app/templates/onboarding/quick-setup/success.hbs rename to ui/admin/app/templates/scopes/scope/onboarding/quick-setup/create-resources/success.hbs diff --git a/ui/admin/tests/unit/routes/onboarding/quick-setup/choose-path-test.js b/ui/admin/tests/unit/routes/onboarding/quick-setup/choose-path-test.js deleted file mode 100644 index 1d66e331c..000000000 --- a/ui/admin/tests/unit/routes/onboarding/quick-setup/choose-path-test.js +++ /dev/null @@ -1,11 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Route | onboarding/quick-setup/choose-path', function (hooks) { - setupTest(hooks); - - test('it exists', function (assert) { - let route = this.owner.lookup('route:onboarding/quick-setup/choose-path'); - assert.ok(route); - }); -}); diff --git a/ui/admin/tests/unit/routes/onboarding/quick-setup/success-test.js b/ui/admin/tests/unit/routes/onboarding/quick-setup/success-test.js deleted file mode 100644 index 95708d915..000000000 --- a/ui/admin/tests/unit/routes/onboarding/quick-setup/success-test.js +++ /dev/null @@ -1,11 +0,0 @@ -import { module, test } from 'qunit'; -import { setupTest } from 'ember-qunit'; - -module('Unit | Route | onboarding/quick-setup/success', function (hooks) { - setupTest(hooks); - - test('it exists', function (assert) { - let route = this.owner.lookup('route:onboarding/quick-setup/success'); - assert.ok(route); - }); -}); diff --git a/ui/admin/tests/unit/routes/onboarding/quick-setup/create-resources-test.js b/ui/admin/tests/unit/routes/scopes/scope/onboarding/quick-setup/choose-path-test.js similarity index 66% rename from ui/admin/tests/unit/routes/onboarding/quick-setup/create-resources-test.js rename to ui/admin/tests/unit/routes/scopes/scope/onboarding/quick-setup/choose-path-test.js index ddec86774..742594ecb 100644 --- a/ui/admin/tests/unit/routes/onboarding/quick-setup/create-resources-test.js +++ b/ui/admin/tests/unit/routes/scopes/scope/onboarding/quick-setup/choose-path-test.js @@ -2,13 +2,13 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; module( - 'Unit | Route | onboarding/quick-setup/create-resources', + 'Unit | Route | scopes/scope/onboarding/quick-setup/choose-path', function (hooks) { setupTest(hooks); test('it exists', function (assert) { let route = this.owner.lookup( - 'route:onboarding/quick-setup/create-resources' + 'route:scopes/scope/onboarding/quick-setup/choose-path' ); assert.ok(route); }); diff --git a/ui/admin/tests/unit/routes/scopes/scope/onboarding/quick-setup/create-resources-test.js b/ui/admin/tests/unit/routes/scopes/scope/onboarding/quick-setup/create-resources-test.js new file mode 100644 index 000000000..5abe21e32 --- /dev/null +++ b/ui/admin/tests/unit/routes/scopes/scope/onboarding/quick-setup/create-resources-test.js @@ -0,0 +1,16 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module( + 'Unit | Route | scopes/scope/onboarding/quick-setup/create-resources', + function (hooks) { + setupTest(hooks); + + test('it exists', function (assert) { + let route = this.owner.lookup( + 'route:scopes/scope/onboarding/quick-setup/create-resources' + ); + assert.ok(route); + }); + } +); diff --git a/ui/admin/tests/unit/routes/scopes/scope/onboarding/quick-setup/create-resources/success-test.js b/ui/admin/tests/unit/routes/scopes/scope/onboarding/quick-setup/create-resources/success-test.js new file mode 100644 index 000000000..eb7e3598a --- /dev/null +++ b/ui/admin/tests/unit/routes/scopes/scope/onboarding/quick-setup/create-resources/success-test.js @@ -0,0 +1,16 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module( + 'Unit | Route | scopes/scope/onboarding/quick-setup/create-resources/success', + function (hooks) { + setupTest(hooks); + + test('it exists', function (assert) { + let route = this.owner.lookup( + 'route:scopes/scope/onboarding/quick-setup/create-resources/success' + ); + assert.ok(route); + }); + } +);