From e8323fa5348959688e876b2da24f18497af99db4 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 9 Feb 2015 16:03:09 +1100 Subject: [PATCH] FIX: removing a group from a user was not removing primary group --- app/controllers/admin/groups_controller.rb | 5 ++++- app/models/group.rb | 1 + .../admin/groups_controller_spec.rb | 6 ++++++ spec/models/group_spec.rb | 18 ++++++++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) 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)