diff --git a/ui/admin/app/components/groups/group/actions/index.hbs b/ui/admin/app/components/groups/group/actions/index.hbs
index a875d15b6..82ef51298 100644
--- a/ui/admin/app/components/groups/group/actions/index.hbs
+++ b/ui/admin/app/components/groups/group/actions/index.hbs
@@ -18,7 +18,7 @@
{{t 'resources.group.actions.delete'}}
diff --git a/ui/admin/app/controllers/scopes/scope/groups/group/add-members.js b/ui/admin/app/controllers/scopes/scope/groups/group/add-members.js
index d156d0cc8..a29c047e8 100644
--- a/ui/admin/app/controllers/scopes/scope/groups/group/add-members.js
+++ b/ui/admin/app/controllers/scopes/scope/groups/group/add-members.js
@@ -4,10 +4,16 @@
*/
import Controller from '@ember/controller';
+import { inject as service } from '@ember/service';
+import { action } from '@ember/object';
+import { loading } from 'ember-loading';
+import { notifySuccess, notifyError } from 'core/decorators/notify';
export default class ScopesScopeGroupsGroupAddMembersController extends Controller {
// =services
+ @service router;
+
// =attributes
/**
@@ -26,4 +32,29 @@ export default class ScopesScopeGroupsGroupAddMembersController extends Controll
const sorted = [global, ...orgsAndProjects].flat();
return sorted;
}
+
+ // =actions
+
+ /**
+ * Adds members to the group and saves, replaces with the members index
+ * route, and notifies the user of success or error.
+ * @param {GroupModel} group
+ * @param {[string]} userIDs
+ */
+ @action
+ @loading
+ @notifyError(({ message }) => message, { catch: true })
+ @notifySuccess('notifications.add-success')
+ async addMembers(group, userIDs) {
+ await group.addMembers(userIDs);
+ await this.router.replaceWith('scopes.scope.groups.group.members');
+ }
+
+ /**
+ * Redirect to group members as if nothing ever happened.
+ */
+ @action
+ async cancel() {
+ await this.router.replaceWith('scopes.scope.groups.group.members');
+ }
}
diff --git a/ui/admin/app/controllers/scopes/scope/groups/group/index.js b/ui/admin/app/controllers/scopes/scope/groups/group/index.js
new file mode 100644
index 000000000..b08c3500c
--- /dev/null
+++ b/ui/admin/app/controllers/scopes/scope/groups/group/index.js
@@ -0,0 +1,5 @@
+import Controller, { inject as controller } from '@ember/controller';
+
+export default class ScopesScopeGroupsGroupIndexController extends Controller {
+ @controller('scopes/scope/groups/index') groups;
+}
diff --git a/ui/admin/app/controllers/scopes/scope/groups/group/members.js b/ui/admin/app/controllers/scopes/scope/groups/group/members.js
new file mode 100644
index 000000000..7e46c3fd5
--- /dev/null
+++ b/ui/admin/app/controllers/scopes/scope/groups/group/members.js
@@ -0,0 +1,5 @@
+import Controller, { inject as controller } from '@ember/controller';
+
+export default class ScopesScopeGroupsGroupMembersController extends Controller {
+ @controller('scopes/scope/groups/index') groups;
+}
diff --git a/ui/admin/app/controllers/scopes/scope/groups/index.js b/ui/admin/app/controllers/scopes/scope/groups/index.js
new file mode 100644
index 000000000..30c54d2d3
--- /dev/null
+++ b/ui/admin/app/controllers/scopes/scope/groups/index.js
@@ -0,0 +1,75 @@
+import Controller from '@ember/controller';
+import { inject as service } from '@ember/service';
+import { action } from '@ember/object';
+import { loading } from 'ember-loading';
+import { confirm } from 'core/decorators/confirm';
+import { notifySuccess, notifyError } from 'core/decorators/notify';
+
+export default class ScopesScopeGroupsIndexController extends Controller {
+ // =services
+ @service can;
+ @service router;
+
+ // =actions
+
+ /**
+ * Rollback changes on a group.
+ * @param {GroupModel} group
+ */
+ @action
+ async cancel(group) {
+ const { isNew } = group;
+ group.rollbackAttributes();
+ if (isNew) await this.router.transitionTo('scopes.scope.groups');
+ }
+
+ /**
+ * Save a group in current scope.
+ * @param {GroupModel} group
+ */
+ @action
+ @loading
+ @notifyError(({ message }) => message)
+ @notifySuccess(({ isNew }) =>
+ isNew ? 'notifications.create-success' : 'notifications.save-success',
+ )
+ async save(group) {
+ await group.save();
+ if (this.can.can('read model', group)) {
+ await this.router.transitionTo('scopes.scope.groups.group', group);
+ } else {
+ await this.router.transitionTo('scopes.scope.groups');
+ }
+ await this.router.refresh();
+ }
+
+ /**
+ * Delete a group in current scope and redirect to index
+ * @param {GroupModel} group
+ */
+ @action
+ @loading
+ @confirm('questions.delete-confirm')
+ @notifyError(({ message }) => message, { catch: true })
+ @notifySuccess('notifications.delete-success')
+ async delete(group) {
+ await group.destroyRecord();
+ await this.router.replaceWith('scopes.scope.groups');
+ await this.router.refresh();
+ }
+
+ /**
+ * Remove a member from the current role and redirect to members index.
+ * @param {GroupModel} group
+ * @param {UserModel} member
+ */
+ @action
+ @loading
+ @confirm('questions.remove-confirm')
+ @notifyError(({ message }) => message, { catch: true })
+ @notifySuccess('notifications.remove-success')
+ async removeMember(group, member) {
+ await group.removeMember(member.id);
+ await this.router.refresh();
+ }
+}
diff --git a/ui/admin/app/controllers/scopes/scope/groups/new.js b/ui/admin/app/controllers/scopes/scope/groups/new.js
new file mode 100644
index 000000000..a2f5081ff
--- /dev/null
+++ b/ui/admin/app/controllers/scopes/scope/groups/new.js
@@ -0,0 +1,5 @@
+import Controller, { inject as controller } from '@ember/controller';
+
+export default class ScopesScopeGroupsNewController extends Controller {
+ @controller('scopes/scope/groups/index') groups;
+}
diff --git a/ui/admin/app/routes/scopes/scope/groups.js b/ui/admin/app/routes/scopes/scope/groups.js
index 1034a7b1a..bdb217d02 100644
--- a/ui/admin/app/routes/scopes/scope/groups.js
+++ b/ui/admin/app/routes/scopes/scope/groups.js
@@ -5,16 +5,11 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
-import { action } from '@ember/object';
-import { loading } from 'ember-loading';
-import { confirm } from 'core/decorators/confirm';
-import { notifySuccess, notifyError } from 'core/decorators/notify';
export default class ScopesScopeGroupsRoute extends Route {
// =services
@service store;
- @service intl;
@service session;
@service can;
@service router;
@@ -39,51 +34,4 @@ export default class ScopesScopeGroupsRoute extends Route {
return this.store.query('group', { scope_id });
}
}
-
- // =actions
- /**
- * Rollback changes on a group.
- * @param {GroupModel} group
- */
- @action
- cancel(group) {
- const { isNew } = group;
- group.rollbackAttributes();
- if (isNew) this.router.transitionTo('scopes.scope.groups');
- }
-
- /**
- * Save a group in current scope.
- * @param {GroupModel} group
- */
- @action
- @loading
- @notifyError(({ message }) => message)
- @notifySuccess(({ isNew }) =>
- isNew ? 'notifications.create-success' : 'notifications.save-success',
- )
- async save(group) {
- await group.save();
- if (this.can.can('read model', group)) {
- await this.router.transitionTo('scopes.scope.groups.group', group);
- } else {
- await this.router.transitionTo('scopes.scope.groups');
- }
- this.refresh();
- }
-
- /**
- * Delete a group in current scope and redirect to index
- * @param {GroupModel} group
- */
- @action
- @loading
- @confirm('questions.delete-confirm')
- @notifyError(({ message }) => message, { catch: true })
- @notifySuccess('notifications.delete-success')
- async delete(group) {
- await group.destroyRecord();
- await this.router.replaceWith('scopes.scope.groups');
- this.refresh();
- }
}
diff --git a/ui/admin/app/routes/scopes/scope/groups/group/add-members.js b/ui/admin/app/routes/scopes/scope/groups/group/add-members.js
index 6164bc6c7..a04bcdc7b 100644
--- a/ui/admin/app/routes/scopes/scope/groups/group/add-members.js
+++ b/ui/admin/app/routes/scopes/scope/groups/group/add-members.js
@@ -7,8 +7,6 @@ import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { hash } from 'rsvp';
-import { loading } from 'ember-loading';
-import { notifySuccess, notifyError } from 'core/decorators/notify';
import { resourceFilter } from 'core/decorators/resource-filter';
export default class ScopesScopeGroupsGroupAddMembersRoute extends Route {
@@ -67,29 +65,6 @@ export default class ScopesScopeGroupsGroupAddMembersRoute extends Route {
// =actions
- /**
- * Adds members to the group and saves, replaces with the members index
- * route, and notifies the user of success or error.
- * @param {GroupModel} group
- * @param {[string]} userIDs
- */
- @action
- @loading
- @notifyError(({ message }) => message, { catch: true })
- @notifySuccess('notifications.add-success')
- async addMembers(group, userIDs) {
- await group.addMembers(userIDs);
- await this.router.replaceWith('scopes.scope.groups.group.members');
- }
-
- /**
- * Redirect to group members as if nothing ever happened.
- */
- @action
- cancel() {
- this.router.replaceWith('scopes.scope.groups.group.members');
- }
-
/**
* Sets the specified resource filter field to the specified value.
* @param {string} field
diff --git a/ui/admin/app/routes/scopes/scope/groups/group/members.js b/ui/admin/app/routes/scopes/scope/groups/group/members.js
index 2c66cb3cd..37711ed81 100644
--- a/ui/admin/app/routes/scopes/scope/groups/group/members.js
+++ b/ui/admin/app/routes/scopes/scope/groups/group/members.js
@@ -4,12 +4,8 @@
*/
import Route from '@ember/routing/route';
-import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import { hash } from 'rsvp';
-import { loading } from 'ember-loading';
-import { confirm } from 'core/decorators/confirm';
-import { notifySuccess, notifyError } from 'core/decorators/notify';
export default class ScopesScopeGroupsGroupMembersRoute extends Route {
// =services
@@ -37,21 +33,4 @@ export default class ScopesScopeGroupsGroupMembersRoute extends Route {
: [],
});
}
-
- // =actions
-
- /**
- * Remove a member from the current role and redirect to members index.
- * @param {GroupModel} group
- * @param {UserModel} member
- */
- @action
- @loading
- @confirm('questions.remove-confirm')
- @notifyError(({ message }) => message, { catch: true })
- @notifySuccess('notifications.remove-success')
- async removeMember(group, member) {
- await group.removeMember(member.id);
- this.refresh();
- }
}
diff --git a/ui/admin/app/templates/scopes/scope/groups/group/add-members.hbs b/ui/admin/app/templates/scopes/scope/groups/group/add-members.hbs
index 6bfecabfc..99839c463 100644
--- a/ui/admin/app/templates/scopes/scope/groups/group/add-members.hbs
+++ b/ui/admin/app/templates/scopes/scope/groups/group/add-members.hbs
@@ -86,8 +86,8 @@
diff --git a/ui/admin/app/templates/scopes/scope/groups/group/index.hbs b/ui/admin/app/templates/scopes/scope/groups/group/index.hbs
index 372d09462..dcc2a2744 100644
--- a/ui/admin/app/templates/scopes/scope/groups/group/index.hbs
+++ b/ui/admin/app/templates/scopes/scope/groups/group/index.hbs
@@ -18,14 +18,17 @@
-
+
diff --git a/ui/admin/app/templates/scopes/scope/groups/group/members.hbs b/ui/admin/app/templates/scopes/scope/groups/group/members.hbs
index cee9590d1..2a6d2171d 100644
--- a/ui/admin/app/templates/scopes/scope/groups/group/members.hbs
+++ b/ui/admin/app/templates/scopes/scope/groups/group/members.hbs
@@ -24,7 +24,10 @@
-
+
@@ -75,7 +78,7 @@
@text={{t 'actions.remove'}}
{{on
'click'
- (route-action 'removeMember' @model.group B.data)
+ (fn this.groups.removeMember @model.group B.data)
}}
/>
diff --git a/ui/admin/app/templates/scopes/scope/groups/new.hbs b/ui/admin/app/templates/scopes/scope/groups/new.hbs
index 295502bb0..3d19784fe 100644
--- a/ui/admin/app/templates/scopes/scope/groups/new.hbs
+++ b/ui/admin/app/templates/scopes/scope/groups/new.hbs
@@ -26,8 +26,8 @@
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 4d86aff7f..b506a97a7 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
@@ -4,7 +4,7 @@
*/
import { module, test } from 'qunit';
-import { setupTest } from 'ember-qunit';
+import { setupTest } from 'admin/tests/helpers';
module('Unit | Controller | scopes/scope/auth-methods/index', function (hooks) {
setupTest(hooks);
diff --git a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/new-test.js b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/new-test.js
index 4fbac6fc1..e399fc1b3 100644
--- a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/new-test.js
+++ b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/new-test.js
@@ -4,7 +4,7 @@
*/
import { module, test } from 'qunit';
-import { setupTest } from 'ember-qunit';
+import { setupTest } from 'admin/tests/helpers';
module('Unit | Controller | scopes/scope/auth-methods/new', function (hooks) {
setupTest(hooks);
diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js
index 56cdde398..5c1925c17 100644
--- a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js
+++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js
@@ -4,7 +4,7 @@
*/
import { module, test } from 'qunit';
-import { setupTest } from 'ember-qunit';
+import { setupTest } from 'admin/tests/helpers';
module(
'Unit | Controller | scopes/scope/groups/group/add-members',
diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/index-test.js
new file mode 100644
index 000000000..5b1a1327b
--- /dev/null
+++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/index-test.js
@@ -0,0 +1,13 @@
+import { module, test } from 'qunit';
+import { setupTest } from 'admin/tests/helpers';
+
+module('Unit | Controller | scopes/scope/groups/group/index', function (hooks) {
+ setupTest(hooks);
+
+ test('it exists', function (assert) {
+ let controller = this.owner.lookup(
+ 'controller:scopes/scope/groups/group/index',
+ );
+ assert.ok(controller);
+ });
+});
diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/members-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/members-test.js
new file mode 100644
index 000000000..9adbb4c10
--- /dev/null
+++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/members-test.js
@@ -0,0 +1,16 @@
+import { module, test } from 'qunit';
+import { setupTest } from 'admin/tests/helpers';
+
+module(
+ 'Unit | Controller | scopes/scope/groups/group/members',
+ function (hooks) {
+ setupTest(hooks);
+
+ test('it exists', function (assert) {
+ let controller = this.owner.lookup(
+ 'controller:scopes/scope/groups/group/members',
+ );
+ assert.ok(controller);
+ });
+ },
+);
diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/index-test.js
new file mode 100644
index 000000000..1d9a3b14e
--- /dev/null
+++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/index-test.js
@@ -0,0 +1,11 @@
+import { module, test } from 'qunit';
+import { setupTest } from 'admin/tests/helpers';
+
+module('Unit | Controller | scopes/scope/groups/index', function (hooks) {
+ setupTest(hooks);
+
+ test('it exists', function (assert) {
+ let controller = this.owner.lookup('controller:scopes/scope/groups/index');
+ assert.ok(controller);
+ });
+});
diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/new-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/new-test.js
new file mode 100644
index 000000000..964e7f709
--- /dev/null
+++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/new-test.js
@@ -0,0 +1,11 @@
+import { module, test } from 'qunit';
+import { setupTest } from 'admin/tests/helpers';
+
+module('Unit | Controller | scopes/scope/groups/new', function (hooks) {
+ setupTest(hooks);
+
+ test('it exists', function (assert) {
+ let controller = this.owner.lookup('controller:scopes/scope/groups/new');
+ assert.ok(controller);
+ });
+});