groups_controller_spec.rb 2.9 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.J. van de Weg's avatar
Z.J. van de Weg committed
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.J. van de Weg's avatar
Z.J. van de Weg committed
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 96 97 98 99 100 101 102 103 104 105 106

  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
        Sidekiq::Testing.fake!
        sign_in(user)
      end

      it 'schedules a group destroy' do
        expect { delete :destroy, id: group.path }.to change(GroupDestroyWorker.jobs, :size).by(1)
      end

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

        expect(response).to redirect_to(root_path)
      end
    end
  end
107
end