From 68c730bb99a12b0ea8ac3d08f074dc66e7ac2dae Mon Sep 17 00:00:00 2001
From: Jose Ivan Vargas <jvargas@gitlab.com>
Date: Fri, 23 Dec 2016 12:23:04 -0600
Subject: [PATCH] Fixed rspec tests for the project members also fixed the
 index view (removed an extra tag )

---
 .../projects/project_members_controller.rb    | 43 +------------------
 .../projects/project_members/_index.html.haml |  6 +--
 .../_new_project_member.html.haml             |  2 +-
 .../project_members_controller_spec.rb        | 14 +++---
 .../anonymous_user_sees_members_spec.rb       |  4 +-
 .../projects/members/group_members_spec.rb    |  8 ++--
 ...r_adds_member_with_expiration_date_spec.rb |  3 +-
 .../security/project/internal_access_spec.rb  |  4 +-
 .../security/project/private_access_spec.rb   |  4 +-
 .../security/project/public_access_spec.rb    |  4 +-
 10 files changed, 24 insertions(+), 68 deletions(-)

diff --git a/app/controllers/projects/project_members_controller.rb b/app/controllers/projects/project_members_controller.rb
index 7ad838b585b..8555d541580 100644
--- a/app/controllers/projects/project_members_controller.rb
+++ b/app/controllers/projects/project_members_controller.rb
@@ -6,48 +6,7 @@ class Projects::ProjectMembersController < Projects::ApplicationController
   before_action :authorize_admin_project_member!, except: [:index, :leave, :request_access]
 
   def index
-    @sort = params[:sort].presence || sort_value_name
-    @group_links = @project.project_group_links
-
-    @project_members = @project.project_members
-    @project_members = @project_members.non_invite unless can?(current_user, :admin_project, @project)
-
-    group = @project.group
-
-    if group
-      # We need `.where.not(user_id: nil)` here otherwise when a group has an
-      # invitee, it would make the following query return 0 rows since a NULL
-      # user_id would be present in the subquery
-      # See http://stackoverflow.com/questions/129077/not-in-clause-and-null-values
-      # FIXME: This whole logic should be moved to a finder!
-      non_null_user_ids = @project_members.where.not(user_id: nil).select(:user_id)
-      group_members = group.group_members.where.not(user_id: non_null_user_ids)
-      group_members = group_members.non_invite unless can?(current_user, :admin_group, @group)
-    end
-
-    if params[:search].present?
-      user_ids = @project.users.search(params[:search]).select(:id)
-      @project_members = @project_members.where(user_id: user_ids)
-
-      if group_members
-        user_ids = group.users.search(params[:search]).select(:id)
-        group_members = group_members.where(user_id: user_ids)
-      end
-
-      @group_links = @project.project_group_links.where(group_id: @project.invited_groups.search(params[:search]).select(:id))
-    end
-
-    wheres = ["members.id IN (#{@project_members.select(:id).to_sql})"]
-    wheres << "members.id IN (#{group_members.select(:id).to_sql})" if group_members
-
-    @project_members = Member.
-      where(wheres.join(' OR ')).
-      sort(@sort).
-      page(params[:page])
-
-    @requesters = AccessRequestsFinder.new(@project).execute(current_user)
-
-    @project_member = @project.project_members.new
+    redirect_to namespace_project_settings_members_path(@project.namespace, @project)
   end
 
   def create
diff --git a/app/views/projects/project_members/_index.html.haml b/app/views/projects/project_members/_index.html.haml
index 6499569dde7..0208e6e4ae8 100644
--- a/app/views/projects/project_members/_index.html.haml
+++ b/app/views/projects/project_members/_index.html.haml
@@ -17,11 +17,7 @@
           %h5.member.existing-title
             Existing users and groups
         - if @group_links.any?
-          = render 'groups', group_links: @group_links
-
-    .append-bottom-default.clearfix
-    - if @group_links.any?
-      = render 'groups', group_links: @group_links
+          = render 'projects/project_members/groups', group_links: @group_links
 
     = render 'projects/project_members/team', members: @project_members
     = paginate @project_members, theme: "gitlab"
diff --git a/app/views/projects/project_members/_new_project_member.html.haml b/app/views/projects/project_members/_new_project_member.html.haml
index ca08b58873b..e922b56d3bc 100644
--- a/app/views/projects/project_members/_new_project_member.html.haml
+++ b/app/views/projects/project_members/_new_project_member.html.haml
@@ -1,4 +1,4 @@
-= form_for @project_member, as: :project_member, url: namespace_project_settings_members_path(@project.namespace, @project), html: { class: 'users-project-form' } do |f|
+= form_for @project_member, as: :project_member, url: namespace_project_project_members_path(@project.namespace, @project), html: { class: 'users-project-form' } do |f|
   .row
     .col-md-5.col-lg-5
       = users_select_tag(:user_ids, multiple: true, class: "input-clamp", scope: :all, email_user: true)
diff --git a/spec/controllers/projects/project_members_controller_spec.rb b/spec/controllers/projects/project_members_controller_spec.rb
index b52137fbe7e..6fa7bbd6dae 100644
--- a/spec/controllers/projects/project_members_controller_spec.rb
+++ b/spec/controllers/projects/project_members_controller_spec.rb
@@ -5,11 +5,11 @@ describe Projects::ProjectMembersController do
   let(:project) { create(:empty_project, :public, :access_requestable) }
 
   describe 'GET index' do
-    it 'renders index with 200 status code' do
+    it 'redirects to settings/members with 302 status code' do
       get :index, namespace_id: project.namespace, project_id: project
 
-      expect(response).to have_http_status(200)
-      expect(response).to render_template(:index)
+      expect(response).to have_http_status(302)
+      expect(response).to redirect_to(namespace_project_settings_members_path(project.namespace, project))
     end
   end
 
@@ -44,7 +44,7 @@ describe Projects::ProjectMembersController do
                       access_level: Gitlab::Access::GUEST
 
         expect(response).to set_flash.to 'Users were successfully added.'
-        expect(response).to redirect_to(namespace_project_project_members_path(project.namespace, project))
+        expect(response).to redirect_to(namespace_project_settings_members_path(project.namespace, project))
       end
 
       it 'adds no user to members' do
@@ -56,7 +56,7 @@ describe Projects::ProjectMembersController do
                       access_level: Gitlab::Access::GUEST
 
         expect(response).to set_flash.to 'No users or groups specified.'
-        expect(response).to redirect_to(namespace_project_project_members_path(project.namespace, project))
+        expect(response).to redirect_to(namespace_project_settings_members_path(project.namespace, project))
       end
     end
   end
@@ -99,7 +99,7 @@ describe Projects::ProjectMembersController do
                            id: member
 
           expect(response).to redirect_to(
-            namespace_project_project_members_path(project.namespace, project)
+            namespace_project_settings_members_path(project.namespace, project)
           )
           expect(project.members).not_to include member
         end
@@ -259,7 +259,7 @@ describe Projects::ProjectMembersController do
         expect(project.team_members).to include member
         expect(response).to set_flash.to 'Successfully imported'
         expect(response).to redirect_to(
-          namespace_project_project_members_path(project.namespace, project)
+          namespace_project_settings_members_path(project.namespace, project)
         )
       end
     end
diff --git a/spec/features/projects/members/anonymous_user_sees_members_spec.rb b/spec/features/projects/members/anonymous_user_sees_members_spec.rb
index c5e3d143d91..d82cf53c690 100644
--- a/spec/features/projects/members/anonymous_user_sees_members_spec.rb
+++ b/spec/features/projects/members/anonymous_user_sees_members_spec.rb
@@ -11,10 +11,10 @@ feature 'Projects > Members > Anonymous user sees members', feature: true do
   end
 
   scenario "anonymous user visits the project's members page and sees the list of members" do
-    visit namespace_project_project_members_path(project.namespace, project)
+    visit namespace_project_settings_members_path(project.namespace, project)
 
     expect(current_path).to eq(
-      namespace_project_project_members_path(project.namespace, project))
+      namespace_project_settings_members_path(project.namespace, project))
     expect(page).to have_content(user.name)
   end
 end
diff --git a/spec/features/projects/members/group_members_spec.rb b/spec/features/projects/members/group_members_spec.rb
index 7d0065ee2c4..3385e5972ff 100644
--- a/spec/features/projects/members/group_members_spec.rb
+++ b/spec/features/projects/members/group_members_spec.rb
@@ -19,7 +19,7 @@ feature 'Projects members', feature: true do
   context 'with a group invitee' do
     before do
       group_invitee
-      visit namespace_project_project_members_path(project.namespace, project)
+      visit namespace_project_settings_members_path(project.namespace, project)
     end
 
     scenario 'does not appear in the project members page' do
@@ -33,7 +33,7 @@ feature 'Projects members', feature: true do
     before do
       group_invitee
       project_invitee
-      visit namespace_project_project_members_path(project.namespace, project)
+      visit namespace_project_settings_members_path(project.namespace, project)
     end
 
     scenario 'shows the project invitee, the project developer, and the group owner' do
@@ -54,7 +54,7 @@ feature 'Projects members', feature: true do
   context 'with a group requester' do
     before do
       group.request_access(group_requester)
-      visit namespace_project_project_members_path(project.namespace, project)
+      visit namespace_project_settings_members_path(project.namespace, project)
     end
 
     scenario 'does not appear in the project members page' do
@@ -68,7 +68,7 @@ feature 'Projects members', feature: true do
     before do
       group.request_access(group_requester)
       project.request_access(project_requester)
-      visit namespace_project_project_members_path(project.namespace, project)
+      visit namespace_project_settings_members_path(project.namespace, project)
     end
 
     scenario 'shows the project requester, the project developer, and the group owner' do
diff --git a/spec/features/projects/members/master_adds_member_with_expiration_date_spec.rb b/spec/features/projects/members/master_adds_member_with_expiration_date_spec.rb
index b7273021c95..09a9148b6f2 100644
--- a/spec/features/projects/members/master_adds_member_with_expiration_date_spec.rb
+++ b/spec/features/projects/members/master_adds_member_with_expiration_date_spec.rb
@@ -16,7 +16,8 @@ feature 'Projects > Members > Master adds member with expiration date', feature:
 
   scenario 'expiration date is displayed in the members list' do
     travel_to Time.zone.parse('2016-08-06 08:00') do
-      visit namespace_project_project_members_path(project.namespace, project)
+      visit namespace_project_settings_members_path(project.namespace, project)
+      save_screenshot
 
       page.within '.users-project-form' do
         select2(new_member.id, from: '#user_ids', multiple: true)
diff --git a/spec/features/security/project/internal_access_spec.rb b/spec/features/security/project/internal_access_spec.rb
index 1897c8119d2..3946d3eff9c 100644
--- a/spec/features/security/project/internal_access_spec.rb
+++ b/spec/features/security/project/internal_access_spec.rb
@@ -82,8 +82,8 @@ describe "Internal Project Access", feature: true  do
     it { is_expected.to be_denied_for(:visitor) }
   end
 
-  describe "GET /:project_path/project_members" do
-    subject { namespace_project_project_members_path(project.namespace, project) }
+  describe "GET /:project_path/settings/project_members" do
+    subject { namespace_project_settings_members_path(project.namespace, project) }
 
     it { is_expected.to be_allowed_for(:admin) }
     it { is_expected.to be_allowed_for(:owner).of(project) }
diff --git a/spec/features/security/project/private_access_spec.rb b/spec/features/security/project/private_access_spec.rb
index f52e23f9433..60ecc2959c6 100644
--- a/spec/features/security/project/private_access_spec.rb
+++ b/spec/features/security/project/private_access_spec.rb
@@ -82,8 +82,8 @@ describe "Private Project Access", feature: true  do
     it { is_expected.to be_denied_for(:visitor) }
   end
 
-  describe "GET /:project_path/project_members" do
-    subject { namespace_project_project_members_path(project.namespace, project) }
+  describe "GET /:project_path/settings/project_members" do
+    subject { namespace_project_settings_members_path(project.namespace, project) }
 
     it { is_expected.to be_allowed_for(:admin) }
     it { is_expected.to be_allowed_for(:owner).of(project) }
diff --git a/spec/features/security/project/public_access_spec.rb b/spec/features/security/project/public_access_spec.rb
index bed9e92fcb6..3e2a8eabe2d 100644
--- a/spec/features/security/project/public_access_spec.rb
+++ b/spec/features/security/project/public_access_spec.rb
@@ -82,8 +82,8 @@ describe "Public Project Access", feature: true  do
     it { is_expected.to be_allowed_for(:visitor) }
   end
 
-  describe "GET /:project_path/project_members" do
-    subject { namespace_project_project_members_path(project.namespace, project) }
+  describe "GET /:project_path/settings/project_members" do
+    subject { namespace_project_settings_members_path(project.namespace, project) }
 
     it { is_expected.to be_allowed_for(:admin) }
     it { is_expected.to be_allowed_for(:owner).of(project) }
-- 
GitLab