summaryrefslogtreecommitdiff
path: root/spec/requests/api/group_milestones_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/requests/api/group_milestones_spec.rb')
-rw-r--r--spec/requests/api/group_milestones_spec.rb68
1 files changed, 59 insertions, 9 deletions
diff --git a/spec/requests/api/group_milestones_spec.rb b/spec/requests/api/group_milestones_spec.rb
index 2b361f2b503..7ed6e1a295f 100644
--- a/spec/requests/api/group_milestones_spec.rb
+++ b/spec/requests/api/group_milestones_spec.rb
@@ -3,15 +3,65 @@
require 'spec_helper'
RSpec.describe API::GroupMilestones do
- let(:user) { create(:user) }
- let(:group) { create(:group, :private) }
- let(:project) { create(:project, namespace: group) }
- let!(:group_member) { create(:group_member, group: group, user: user) }
- let!(:closed_milestone) { create(:closed_milestone, group: group, title: 'version1', description: 'closed milestone') }
- let!(:milestone) { create(:milestone, group: group, title: 'version2', description: 'open milestone') }
-
- it_behaves_like 'group and project milestones', "/groups/:id/milestones" do
- let(:route) { "/groups/#{group.id}/milestones" }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:group) { create(:group, :private) }
+ let_it_be(:project) { create(:project, namespace: group) }
+ let_it_be(:group_member) { create(:group_member, group: group, user: user) }
+ let_it_be(:closed_milestone) { create(:closed_milestone, group: group, title: 'version1', description: 'closed milestone') }
+ let_it_be(:milestone) { create(:milestone, group: group, title: 'version2', description: 'open milestone') }
+ let(:route) { "/groups/#{group.id}/milestones" }
+
+ it_behaves_like 'group and project milestones', "/groups/:id/milestones"
+
+ describe 'GET /groups/:id/milestones' do
+ context 'when include_parent_milestones is true' do
+ let_it_be(:ancestor_group) { create(:group, :private) }
+ let_it_be(:ancestor_group_milestone) { create(:milestone, group: ancestor_group) }
+ let_it_be(:params) { { include_parent_milestones: true } }
+
+ before_all do
+ group.update(parent: ancestor_group)
+ end
+
+ shared_examples 'listing all milestones' do
+ it 'returns correct list of milestones' do
+ get api(route, user), params: params
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response.size).to eq(milestones.size)
+ expect(json_response.map { |entry| entry["id"] }).to eq(milestones.map(&:id))
+ end
+ end
+
+ context 'when user has access to ancestor groups' do
+ let(:milestones) { [ancestor_group_milestone, milestone, closed_milestone] }
+
+ before do
+ ancestor_group.add_guest(user)
+ group.add_guest(user)
+ end
+
+ it_behaves_like 'listing all milestones'
+
+ context 'when iids param is present' do
+ let_it_be(:params) { { include_parent_milestones: true, iids: [milestone.iid] } }
+
+ it_behaves_like 'listing all milestones'
+ end
+ end
+
+ context 'when user has no access to ancestor groups' do
+ let(:user) { create(:user) }
+
+ before do
+ group.add_guest(user)
+ end
+
+ it_behaves_like 'listing all milestones' do
+ let(:milestones) { [milestone, closed_milestone] }
+ end
+ end
+ end
end
def setup_for_group