autocomplete_sources_controller_spec.rb 2.31 KB
Newer Older
1 2 3 4 5
# frozen_string_literal: true

require 'spec_helper'

describe Projects::AutocompleteSourcesController do
6 7 8 9
  let_it_be(:group) { create(:group) }
  let_it_be(:project) { create(:project, namespace: group) }
  let_it_be(:issue) { create(:issue, project: project) }
  let_it_be(:user) { create(:user) }
10

11 12 13 14
  def members_by_username(username)
    json_response.find { |member| member['username'] == username }
  end

15 16 17 18 19 20 21 22 23
  describe 'GET members' do
    before do
      group.add_owner(user)
      sign_in(user)
    end

    it 'returns an array of member object' do
      get :members, format: :json, params: { namespace_id: group.path, project_id: project.path, type: issue.class.name, type_id: issue.id }

24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
      expect(members_by_username('all').symbolize_keys).to include(
        username: 'all',
        name: 'All Project and Group Members',
        count: 1)

      expect(members_by_username(group.full_path).symbolize_keys).to include(
        type: group.class.name,
        name: group.full_name,
        avatar_url: group.avatar_url,
        count: 1)

      expect(members_by_username(user.username).symbolize_keys).to include(
        type: user.class.name,
        name: user.name,
        avatar_url: user.avatar_url)
39 40
    end
  end
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

  describe 'GET milestones' do
    let(:group) { create(:group, :public) }
    let(:project) { create(:project, :public, namespace: group) }
    let!(:project_milestone) { create(:milestone, project: project) }
    let!(:group_milestone) { create(:milestone, group: group) }

    before do
      sign_in(user)
    end

    it 'lists milestones' do
      group.add_owner(user)

      get :milestones, format: :json, params: { namespace_id: group.path, project_id: project.path }

      milestone_titles = json_response.map { |milestone| milestone["title"] }
      expect(milestone_titles).to match_array([project_milestone.title, group_milestone.title])
    end

    context 'when user cannot read project issues and merge requests' do
      it 'renders 404' do
        project.project_feature.update!(issues_access_level: ProjectFeature::PRIVATE)
        project.project_feature.update!(merge_requests_access_level: ProjectFeature::PRIVATE)

        get :milestones, format: :json, params: { namespace_id: group.path, project_id: project.path }

        expect(response).to have_gitlab_http_status(404)
      end
    end
  end
72
end