From a54aecee070eb35d39fd569000955aa955865b1c Mon Sep 17 00:00:00 2001
From: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
Date: Thu, 7 Mar 2024 09:24:28 -0800
Subject: [PATCH] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20remove=20route-actio?=
=?UTF-8?q?n=20usage=20in=20accounts=20(#2134)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* refactor: 💡 remove route-action usage in accounts
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-12616
---
.../accounts/account/actions/index.hbs | 2 +-
.../controllers/account/change-password.js | 36 +++++++++
.../auth-method/accounts/account/index.js | 5 ++
.../accounts/account/set-password.js | 33 ++++++++
.../auth-method/accounts/index.js | 77 +++++++++++++++++++
.../auth-methods/auth-method/accounts/new.js | 5 ++
.../app/routes/account/change-password.js | 31 --------
.../auth-methods/auth-method/accounts.js | 69 -----------------
.../accounts/account/set-password.js | 30 +-------
.../app/templates/account/change-password.hbs | 4 +-
.../auth-method/accounts/account/index.hbs | 9 ++-
.../accounts/account/set-password.hbs | 9 ++-
.../auth-methods/auth-method/accounts/new.hbs | 4 +-
.../accounts/account/index-test.js | 16 ++++
.../accounts/account/set-password-test.js | 16 ++++
.../auth-method/accounts/index-test.js | 16 ++++
.../auth-method/accounts/new-test.js | 16 ++++
.../scopes/scope/auth-methods/index-test.js | 1 -
18 files changed, 238 insertions(+), 141 deletions(-)
create mode 100644 ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/account/index.js
create mode 100644 ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js
create mode 100644 ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/index.js
create mode 100644 ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/new.js
create mode 100644 ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/account/index-test.js
create mode 100644 ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/account/set-password-test.js
create mode 100644 ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/index-test.js
create mode 100644 ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/new-test.js
diff --git a/ui/admin/app/components/auth-methods/auth-method/accounts/account/actions/index.hbs b/ui/admin/app/components/auth-methods/auth-method/accounts/account/actions/index.hbs
index e98e75aa7..e9085ea4a 100644
--- a/ui/admin/app/components/auth-methods/auth-method/accounts/account/actions/index.hbs
+++ b/ui/admin/app/components/auth-methods/auth-method/accounts/account/actions/index.hbs
@@ -12,7 +12,7 @@
{{t 'resources.account.actions.delete'}}
diff --git a/ui/admin/app/controllers/account/change-password.js b/ui/admin/app/controllers/account/change-password.js
index 9a9d59ffa..1c78659f3 100644
--- a/ui/admin/app/controllers/account/change-password.js
+++ b/ui/admin/app/controllers/account/change-password.js
@@ -5,9 +5,45 @@
import Controller from '@ember/controller';
import { inject as service } from '@ember/service';
+import { action } from '@ember/object';
+import { notifySuccess, notifyError } from 'core/decorators/notify';
export default class AccountChangePasswordController extends Controller {
// =services
@service session;
+ @service router;
+
+ // =actions
+
+ /**
+ * Changes the password on the account and then redirects to the index route.
+ * @param {AccountModel} account
+ * @param {string} currentPassword
+ * @param {string} newPassword
+ */
+ @action
+ @notifyError(({ message }) => message, { catch: true })
+ @notifySuccess('notifications.save-success')
+ async changePassword(account, currentPassword, newPassword) {
+ await account.changePassword(currentPassword, newPassword);
+ // Transition to index after success. We ignore errors in the transition,
+ // since the index route is responsible for additional
+ // redirects depending on the authentication context. These additional
+ // redirects may abort this initial transition, resulting in a
+ // TransitionAborted error, which we do not want to show to the user.
+ try {
+ await this.router.replaceWith('index');
+ } catch (e) {
+ // no-op
+ }
+ }
+
+ /**
+ * On cancel, redirects to index route for further processing.
+ */
+ @action
+ cancel() {
+ this.router.replaceWith('index');
+ }
}
diff --git a/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/account/index.js b/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/account/index.js
new file mode 100644
index 000000000..98d0e428f
--- /dev/null
+++ b/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/account/index.js
@@ -0,0 +1,5 @@
+import Controller, { inject as controller } from '@ember/controller';
+
+export default class ScopesScopeAuthMethodsAuthMethodAccountsAccountIndexController extends Controller {
+ @controller('scopes/scope/auth-methods/auth-method/accounts/index') accounts;
+}
diff --git a/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js b/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js
new file mode 100644
index 000000000..84b1e27af
--- /dev/null
+++ b/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js
@@ -0,0 +1,33 @@
+import Controller, { inject as controller } from '@ember/controller';
+import { action } from '@ember/object';
+import { inject as service } from '@ember/service';
+import { loading } from 'ember-loading';
+import { notifySuccess, notifyError } from 'core/decorators/notify';
+
+export default class ScopesScopeAuthMethodsAuthMethodAccountsAccountSetPasswordController extends Controller {
+ // =controllers
+
+ @controller('scopes/scope/auth-methods/auth-method/accounts/index') accounts;
+
+ // =services
+
+ @service router;
+
+ // =actions
+
+ /**
+ * Set password for the specified account.
+ * @param {AccountModel} account
+ * @param {string} password
+ */
+ @action
+ @loading
+ @notifyError(({ message }) => message, { catch: true })
+ @notifySuccess('notifications.save-success')
+ async setPassword(account, password) {
+ await account.setPassword(password);
+ await this.router.replaceWith(
+ 'scopes.scope.auth-methods.auth-method.accounts.account.set-password',
+ );
+ }
+}
diff --git a/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/index.js b/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/index.js
new file mode 100644
index 000000000..4859c027a
--- /dev/null
+++ b/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/index.js
@@ -0,0 +1,77 @@
+import Controller from '@ember/controller';
+import { action } from '@ember/object';
+import { inject as service } from '@ember/service';
+import { loading } from 'ember-loading';
+import { confirm } from 'core/decorators/confirm';
+import { notifySuccess, notifyError } from 'core/decorators/notify';
+
+export default class ScopesScopeAuthMethodsAuthMethodAccountsIndexController extends Controller {
+ // =services
+
+ @service can;
+ @service router;
+
+ // =actions
+
+ /**
+ * Rollback changes on an account.
+ * @param {AccountModel} account
+ */
+ @action
+ async cancel(account) {
+ const { isNew } = account;
+ account.rollbackAttributes();
+ if (isNew) {
+ await this.router.transitionTo(
+ 'scopes.scope.auth-methods.auth-method.accounts',
+ );
+ }
+ }
+
+ /**
+ * Save an account in current scope.
+ * @param {AccountModel} account
+ */
+ @action
+ @loading
+ @notifyError(({ message }) => message)
+ @notifySuccess(({ isNew }) =>
+ isNew ? 'notifications.create-success' : 'notifications.save-success',
+ )
+ async save(account, password) {
+ const { isNew } = account;
+ const adapterOptions = {};
+ if (isNew) {
+ adapterOptions.password = password;
+ }
+ await account.save({ adapterOptions });
+ if (this.can.can('read model', account)) {
+ await this.router.transitionTo(
+ 'scopes.scope.auth-methods.auth-method.accounts.account',
+ account,
+ );
+ } else {
+ await this.router.transitionTo(
+ 'scopes.scope.auth-methods.auth-method.accounts',
+ );
+ }
+ await this.router.refresh();
+ }
+
+ /**
+ * Delete an account in current scope and redirect to index
+ * @param {AccountModel} account
+ */
+ @action
+ @loading
+ @confirm('questions.delete-confirm')
+ @notifyError(({ message }) => message, { catch: true })
+ @notifySuccess('notifications.delete-success')
+ async delete(account) {
+ await account.destroyRecord();
+ await this.router.replaceWith(
+ 'scopes.scope.auth-methods.auth-method.accounts',
+ );
+ await this.router.refresh();
+ }
+}
diff --git a/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/new.js b/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/new.js
new file mode 100644
index 000000000..7410b9a95
--- /dev/null
+++ b/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/new.js
@@ -0,0 +1,5 @@
+import Controller, { inject as controller } from '@ember/controller';
+
+export default class ScopesScopeAuthMethodsAuthMethodAccountsNewController extends Controller {
+ @controller('scopes/scope/auth-methods/auth-method/accounts/index') accounts;
+}
diff --git a/ui/admin/app/routes/account/change-password.js b/ui/admin/app/routes/account/change-password.js
index d64ce54f7..4de493392 100644
--- a/ui/admin/app/routes/account/change-password.js
+++ b/ui/admin/app/routes/account/change-password.js
@@ -5,8 +5,6 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
-import { action } from '@ember/object';
-import { notifySuccess, notifyError } from 'core/decorators/notify';
/**
* The change password flow is associated only with password-type auth methods.
@@ -30,33 +28,4 @@ export default class AccountChangePasswordRoute extends Route {
const account_id = this.session?.data?.authenticated?.account_id;
return this.store.findRecord('account', account_id);
}
-
- // =actions
-
- /**
- * Changes the password on the account and then redirects to the index route.
- * @param {AccountModel} account
- * @param {string} currentPassword
- * @param {string} newPassword
- */
- @action
- @notifyError(({ message }) => message, { catch: true })
- @notifySuccess('notifications.save-success')
- async changePassword(account, currentPassword, newPassword) {
- await account.changePassword(currentPassword, newPassword);
- // Transition to index after success. We ignore errors in the transition,
- // since the index route is responsible for additional
- // redirects depending on the authentication context. These additional
- // redirects may abort this initial transition, resulting in a
- // TransitionAborted error, which we do not want to show to the user.
- await this.router.replaceWith('index').catch(() => {});
- }
-
- /**
- * On cancel, redirects to index route for further processing.
- */
- @action
- cancel() {
- this.router.replaceWith('index');
- }
}
diff --git a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts.js b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts.js
index fe394631f..de66a33dd 100644
--- a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts.js
+++ b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts.js
@@ -4,19 +4,13 @@
*/
import Route from '@ember/routing/route';
-import { action } from '@ember/object';
import { inject as service } from '@ember/service';
-import { loading } from 'ember-loading';
-import { confirm } from 'core/decorators/confirm';
-import { notifySuccess, notifyError } from 'core/decorators/notify';
export default class ScopesScopeAuthMethodsAuthMethodAccountsRoute extends Route {
// =services
@service store;
- @service intl;
@service can;
- @service router;
// =methods
@@ -42,67 +36,4 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsRoute extends Route
accounts,
};
}
-
- // =actions
-
- /**
- * Rollback changes on an account.
- * @param {AccountModel} account
- */
- @action
- cancel(account) {
- const { isNew } = account;
- account.rollbackAttributes();
- if (isNew)
- this.router.transitionTo(
- 'scopes.scope.auth-methods.auth-method.accounts',
- );
- }
-
- /**
- * Save an account in current scope.
- * @param {AccountModel} account
- */
- @action
- @loading
- @notifyError(({ message }) => message)
- @notifySuccess(({ isNew }) =>
- isNew ? 'notifications.create-success' : 'notifications.save-success',
- )
- async save(account, password) {
- const { isNew } = account;
- const adapterOptions = {};
- if (isNew) {
- adapterOptions.password = password;
- }
- await account.save({ adapterOptions });
- if (this.can.can('read model', account)) {
- await this.router.transitionTo(
- 'scopes.scope.auth-methods.auth-method.accounts.account',
- account,
- );
- } else {
- await this.router.transitionTo(
- 'scopes.scope.auth-methods.auth-method.accounts',
- );
- }
- this.refresh();
- }
-
- /**
- * Delete an account in current scope and redirect to index
- * @param {AccountModel} account
- */
- @action
- @loading
- @confirm('questions.delete-confirm')
- @notifyError(({ message }) => message, { catch: true })
- @notifySuccess('notifications.delete-success')
- async deleteAccount(account) {
- await account.destroyRecord();
- await this.router.replaceWith(
- 'scopes.scope.auth-methods.auth-method.accounts',
- );
- this.refresh();
- }
}
diff --git a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js
index dcf4794e7..bba25ef9f 100644
--- a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js
+++ b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js
@@ -4,33 +4,5 @@
*/
import Route from '@ember/routing/route';
-import { action } from '@ember/object';
-import { inject as service } from '@ember/service';
-import { loading } from 'ember-loading';
-import { notifySuccess, notifyError } from 'core/decorators/notify';
-export default class ScopesScopeAuthMethodsAuthMethodAccountsAccountSettingsRoute extends Route {
- // =services
-
- @service intl;
-
- @service router;
-
- // =actions
-
- /**
- * Set password for the specified account.
- * @param {AccountModel} account
- * @param {string} password
- */
- @action
- @loading
- @notifyError(({ message }) => message, { catch: true })
- @notifySuccess('notifications.save-success')
- async setPassword(account, password) {
- await account.setPassword(password);
- await this.router.replaceWith(
- 'scopes.scope.auth-methods.auth-method.accounts.account.set-password',
- );
- }
-}
+export default class ScopesScopeAuthMethodsAuthMethodAccountsAccountSetPasswordRoute extends Route {}
diff --git a/ui/admin/app/templates/account/change-password.hbs b/ui/admin/app/templates/account/change-password.hbs
index fb49dcb78..80fe9c6db 100644
--- a/ui/admin/app/templates/account/change-password.hbs
+++ b/ui/admin/app/templates/account/change-password.hbs
@@ -18,8 +18,8 @@
diff --git a/ui/admin/app/templates/scopes/scope/auth-methods/auth-method/accounts/account/index.hbs b/ui/admin/app/templates/scopes/scope/auth-methods/auth-method/accounts/account/index.hbs
index 3144ed0d7..ff312d944 100644
--- a/ui/admin/app/templates/scopes/scope/auth-methods/auth-method/accounts/account/index.hbs
+++ b/ui/admin/app/templates/scopes/scope/auth-methods/auth-method/accounts/account/index.hbs
@@ -18,14 +18,17 @@
-
+
diff --git a/ui/admin/app/templates/scopes/scope/auth-methods/auth-method/accounts/account/set-password.hbs b/ui/admin/app/templates/scopes/scope/auth-methods/auth-method/accounts/account/set-password.hbs
index 33dd16ca2..2439a64ee 100644
--- a/ui/admin/app/templates/scopes/scope/auth-methods/auth-method/accounts/account/set-password.hbs
+++ b/ui/admin/app/templates/scopes/scope/auth-methods/auth-method/accounts/account/set-password.hbs
@@ -26,14 +26,17 @@
-
+
diff --git a/ui/admin/app/templates/scopes/scope/auth-methods/auth-method/accounts/new.hbs b/ui/admin/app/templates/scopes/scope/auth-methods/auth-method/accounts/new.hbs
index 7a3d4f8d9..53f40dd4a 100644
--- a/ui/admin/app/templates/scopes/scope/auth-methods/auth-method/accounts/new.hbs
+++ b/ui/admin/app/templates/scopes/scope/auth-methods/auth-method/accounts/new.hbs
@@ -26,8 +26,8 @@
diff --git a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/account/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/account/index-test.js
new file mode 100644
index 000000000..342268824
--- /dev/null
+++ b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/account/index-test.js
@@ -0,0 +1,16 @@
+import { module, test } from 'qunit';
+import { setupTest } from 'admin/tests/helpers';
+
+module(
+ 'Unit | Controller | scopes/scope/auth-methods/auth-method/accounts/account/index',
+ function (hooks) {
+ setupTest(hooks);
+
+ test('it exists', function (assert) {
+ let controller = this.owner.lookup(
+ 'controller:scopes/scope/auth-methods/auth-method/accounts/account/index',
+ );
+ assert.ok(controller);
+ });
+ },
+);
diff --git a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/account/set-password-test.js b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/account/set-password-test.js
new file mode 100644
index 000000000..4146edc48
--- /dev/null
+++ b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/account/set-password-test.js
@@ -0,0 +1,16 @@
+import { module, test } from 'qunit';
+import { setupTest } from 'admin/tests/helpers';
+
+module(
+ 'Unit | Controller | scopes/scope/auth-methods/auth-method/accounts/account/set-password',
+ function (hooks) {
+ setupTest(hooks);
+
+ test('it exists', function (assert) {
+ let controller = this.owner.lookup(
+ 'controller:scopes/scope/auth-methods/auth-method/accounts/account/set-password',
+ );
+ assert.ok(controller);
+ });
+ },
+);
diff --git a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/index-test.js
new file mode 100644
index 000000000..9eeb22aa8
--- /dev/null
+++ b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/index-test.js
@@ -0,0 +1,16 @@
+import { module, test } from 'qunit';
+import { setupTest } from 'admin/tests/helpers';
+
+module(
+ 'Unit | Controller | scopes/scope/auth-methods/auth-method/accounts/index',
+ function (hooks) {
+ setupTest(hooks);
+
+ test('it exists', function (assert) {
+ let controller = this.owner.lookup(
+ 'controller:scopes/scope/auth-methods/auth-method/accounts/index',
+ );
+ assert.ok(controller);
+ });
+ },
+);
diff --git a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/new-test.js b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/new-test.js
new file mode 100644
index 000000000..407a910ea
--- /dev/null
+++ b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/new-test.js
@@ -0,0 +1,16 @@
+import { module, test } from 'qunit';
+import { setupTest } from 'admin/tests/helpers';
+
+module(
+ 'Unit | Controller | scopes/scope/auth-methods/auth-method/accounts/new',
+ function (hooks) {
+ setupTest(hooks);
+
+ test('it exists', function (assert) {
+ let controller = this.owner.lookup(
+ 'controller:scopes/scope/auth-methods/auth-method/accounts/new',
+ );
+ assert.ok(controller);
+ });
+ },
+);
diff --git a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/index-test.js
index 09c044a24..4d86aff7f 100644
--- a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/index-test.js
+++ b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/index-test.js
@@ -9,7 +9,6 @@ import { setupTest } from 'ember-qunit';
module('Unit | Controller | scopes/scope/auth-methods/index', function (hooks) {
setupTest(hooks);
- // TODO: Replace this with your real tests.
test('it exists', function (assert) {
let controller = this.owner.lookup(
'controller:scopes/scope/auth-methods/index',