groups_controller_spec.rb 3.5 KB
Newer Older
1 2 3
require 'rails_helper'

describe GroupsController do
4 5 6 7 8 9
  let(:user) { create(:user) }
  let(:group) { create(:group) }
  let(:project) { create(:project, namespace: group) }
  let!(:group_member) { create(:group_member, group: group, user: user) }

  describe 'GET #index' do
10 11
    context 'as a user' do
      it 'redirects to Groups Dashboard' do
12
        sign_in(user)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

        get :index

        expect(response).to redirect_to(dashboard_groups_path)
      end
    end

    context 'as a guest' do
      it 'redirects to Explore Groups' do
        get :index

        expect(response).to redirect_to(explore_groups_path)
      end
    end
  end
28 29 30 31 32 33

  describe 'GET #issues' do
    let(:issue_1) { create(:issue, project: project) }
    let(:issue_2) { create(:issue, project: project) }

    before do
34 35
      create_list(:award_emoji, 3, awardable: issue_2)
      create_list(:award_emoji, 2, awardable: issue_1)
Z
Z.J. van de Weg 已提交
36
      create_list(:award_emoji, 2, :downvote, awardable: issue_2,)
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58

      sign_in(user)
    end

    context 'sorting by votes' do
      it 'sorts most popular issues' do
        get :issues, id: group.to_param, sort: 'upvotes_desc'
        expect(assigns(:issues)).to eq [issue_2, issue_1]
      end

      it 'sorts least popular issues' do
        get :issues, id: group.to_param, sort: 'downvotes_desc'
        expect(assigns(:issues)).to eq [issue_2, issue_1]
      end
    end
  end

  describe 'GET #merge_requests' do
    let(:merge_request_1) { create(:merge_request, source_project: project) }
    let(:merge_request_2) { create(:merge_request, :simple, source_project: project) }

    before do
59 60
      create_list(:award_emoji, 3, awardable: merge_request_2)
      create_list(:award_emoji, 2, awardable: merge_request_1)
Z
Z.J. van de Weg 已提交
61
      create_list(:award_emoji, 2, :downvote, awardable: merge_request_2)
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

      sign_in(user)
    end

    context 'sorting by votes' do
      it 'sorts most popular merge requests' do
        get :merge_requests, id: group.to_param, sort: 'upvotes_desc'
        expect(assigns(:merge_requests)).to eq [merge_request_2, merge_request_1]
      end

      it 'sorts least popular merge requests' do
        get :merge_requests, id: group.to_param, sort: 'downvotes_desc'
        expect(assigns(:merge_requests)).to eq [merge_request_2, merge_request_1]
      end
    end
  end
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

  describe 'DELETE #destroy' do
    context 'as another user' do
      it 'returns 404' do
        sign_in(create(:user))

        delete :destroy, id: group.path

        expect(response.status).to eq(404)
      end
    end

    context 'as the group owner' do
      before do
        sign_in(user)
      end

      it 'schedules a group destroy' do
96 97 98
        Sidekiq::Testing.fake! do
          expect { delete :destroy, id: group.path }.to change(GroupDestroyWorker.jobs, :size).by(1)
        end
99 100 101 102 103 104 105 106 107
      end

      it 'redirects to the root path' do
        delete :destroy, id: group.path

        expect(response).to redirect_to(root_path)
      end
    end
  end
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128

  describe 'PUT update' do
    before do
      sign_in(user)
    end

    it 'updates the path succesfully' do
      post :update, id: group.to_param, group: { path: 'new_path' }

      expect(response).to have_http_status(302)
      expect(controller).to set_flash[:notice]
    end

    it 'does not update the path on error' do
      allow_any_instance_of(Group).to receive(:move_dir).and_raise(Gitlab::UpdatePathError)
      post :update, id: group.to_param, group: { path: 'new_path' }

      expect(response).to have_http_status(302)
      expect(controller).to set_flash[:alert]
    end
  end
129
end