diff --git a/lib/gitlab/user_team_manager.rb b/lib/gitlab/user_team_manager.rb index d5ec4ff66761f72343652667cc010d3727524da3..ee46048f438025f06ee2a8f5752bbf8cc8f4e658 100644 --- a/lib/gitlab/user_team_manager.rb +++ b/lib/gitlab/user_team_manager.rb @@ -136,7 +136,7 @@ module Gitlab team.projects.each do |project| other_teams << project.user_teams.with_member(user) end - other_teams.uniq + other_teams.flatten! unless other_teams.any? UsersProject.in_projects(team.projects).with_user(user).destroy_all end diff --git a/spec/lib/gitlab/user_team_manager_spec.rb b/spec/lib/gitlab/user_team_manager_spec.rb index 2ee3587b367d37f5feb096281c4dba4157ec80ce..3dd7913dc1d2501d23bf5ac891398e8089898352 100644 --- a/spec/lib/gitlab/user_team_manager_spec.rb +++ b/spec/lib/gitlab/user_team_manager_spec.rb @@ -1,28 +1,59 @@ require 'spec_helper' describe Gitlab::UserTeamManager do - before do - @user = create :user - @project = create :project, creator: @user - @master = create :user - @developer = create :user - @reporter = create :user + let(:user) { create(:user) } + let!(:project) { create(:project, namespace: user.namespace, creator: user) } + let!(:team) { create(:user_team, owner: user) } - @project.team << [@master, :master] - @project.team << [@developer, :developer] - @project.team << [@reporter, :reporter] + describe "Team Access" do + let(:master) { create(:user) } + let(:developer) { create(:user) } + let(:reporter) { create(:user) } - @team = create :user_team, owner: @user + before do + project.team << [master, :master] + project.team << [developer, :developer] + project.team << [reporter, :reporter] - @team.add_members([@master.id, @developer.id, @reporter.id], UsersProject::DEVELOPER, false) + team.add_members([master.id, developer.id, reporter.id], UsersProject::DEVELOPER, false) + end + + it "should assign team to project with correct permissions result" do + team.assign_to_project(project, UsersProject::MASTER) + + project.users_projects.find_by_user_id(master).project_access.should == UsersProject::MASTER + project.users_projects.find_by_user_id(developer).project_access.should == UsersProject::DEVELOPER + project.users_projects.find_by_user_id(reporter).project_access.should == UsersProject::DEVELOPER + end end - it "should assign team to project with correct permissions result" do - @team.assign_to_project(@project, UsersProject::MASTER) + describe "Team Members" do + + before do + team.assign_to_project(project, UserTeam.access_roles["Master"]) + end + + describe "Add member to team and associated project" do + it "should add the user to the associated project" do + project.users.map {|u| u.username}.should == [] + team.add_member(user, UserTeam.access_roles["Developer"], false) + project.users.reload + project.users.map {|u| u.username}.should == [user.username] + end + end + + describe "Delete member from team and associated project" do + before do + team.add_member(user, UserTeam.access_roles["Developer"], false) + end - @project.users_projects.find_by_user_id(@master).project_access.should == UsersProject::MASTER - @project.users_projects.find_by_user_id(@developer).project_access.should == UsersProject::DEVELOPER - @project.users_projects.find_by_user_id(@reporter).project_access.should == UsersProject::DEVELOPER + it "should remove user from team and project" do + project.users.map {|u| u.username}.should == [user.username] + team.remove_member(user) + project.users.reload + project.users.map {|u| u.username}.should == [] + end + end end end