diff --git a/app/controllers/admin/groups_controller.rb b/app/controllers/admin/groups_controller.rb index 1b62db41e..054392acd 100644 --- a/app/controllers/admin/groups_controller.rb +++ b/app/controllers/admin/groups_controller.rb @@ -93,9 +93,12 @@ class Admin::GroupsController < Admin::AdminController return can_not_modify_automatic if group.automatic + user = User.find(user_id) + user.primary_group_id = nil if user.primary_group_id == group.id + group.users.delete(user_id) - if group.save + if group.save && user.save render json: success_json else render_json_error(group) diff --git a/app/models/group.rb b/app/models/group.rb index ff38c3250..bfe0a874d 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -279,6 +279,7 @@ class Group < ActiveRecord::Base def remove(user) self.group_users.where(user: user).each(&:destroy) + user.update_columns(primary_group_id: nil) if user.primary_group_id == self.id end def appoint_manager(user) diff --git a/spec/controllers/admin/groups_controller_spec.rb b/spec/controllers/admin/groups_controller_spec.rb index 6e85473ed..f81e492b5 100644 --- a/spec/controllers/admin/groups_controller_spec.rb +++ b/spec/controllers/admin/groups_controller_spec.rb @@ -137,11 +137,17 @@ describe Admin::GroupsController do group.add(user) group.save + user.primary_group_id = group.id + user.save + xhr :delete, :remove_member, id: group.id, user_id: user.id expect(response).to be_success group.reload expect(group.users.count).to eq(0) + + user.reload + expect(user.primary_group_id).to eq(nil) end end diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb index 52a9a74f8..f5fc34e94 100644 --- a/spec/models/group_spec.rb +++ b/spec/models/group_spec.rb @@ -47,6 +47,24 @@ describe Group do Group[:staff].user_ids - [-1] end + it "Correctly handles primary group" do + group = Fabricate(:group) + user = Fabricate(:user) + group.add(user) + group.save + + user.primary_group = group + user.save + + group.reload + + group.remove(user) + group.save + + user.reload + expect(user.primary_group).to eq nil + end + it "Can update moderator/staff/admin groups correctly" do admin = Fabricate(:admin)