diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-09-26 21:06:29 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-09-26 21:06:29 +0300 |
commit | e66d6781ef36e39d15b1b9bc84cc30e87969edad (patch) | |
tree | 0165ff173dee501a55115d605dd8fa8a09f8d313 /spec | |
parent | 4e9f718e190a944c39fda2a178eb8b901e7e6ec7 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/import/bitbucket_controller_spec.rb | 15 | ||||
-rw-r--r-- | spec/javascripts/labels_issue_sidebar_spec.js | 88 | ||||
-rw-r--r-- | spec/requests/api/group_labels_spec.rb | 80 | ||||
-rw-r--r-- | spec/requests/api/groups_spec.rb | 23 | ||||
-rw-r--r-- | spec/requests/api/labels_spec.rb | 46 |
5 files changed, 173 insertions, 79 deletions
diff --git a/spec/controllers/import/bitbucket_controller_spec.rb b/spec/controllers/import/bitbucket_controller_spec.rb index 38388c21749..d013bd6d427 100644 --- a/spec/controllers/import/bitbucket_controller_spec.rb +++ b/spec/controllers/import/bitbucket_controller_spec.rb @@ -80,6 +80,21 @@ describe Import::BitbucketController do expect(assigns(:already_added_projects)).to eq([@project]) expect(assigns(:repos)).to eq([]) end + + context 'when filtering' do + let(:filter) { '<html>test</html>' } + let(:expected_filter) { 'test' } + + subject { get :status, params: { filter: filter }, as: :json } + + it 'passes sanitized filter param to bitbucket client' do + expect_next_instance_of(Bitbucket::Client) do |client| + expect(client).to receive(:repos).with(filter: expected_filter).and_return([@repo]) + end + + subject + end + end end describe "POST create" do diff --git a/spec/javascripts/labels_issue_sidebar_spec.js b/spec/javascripts/labels_issue_sidebar_spec.js index ccf439aac74..5ae5643aefc 100644 --- a/spec/javascripts/labels_issue_sidebar_spec.js +++ b/spec/javascripts/labels_issue_sidebar_spec.js @@ -5,6 +5,7 @@ import MockAdapter from 'axios-mock-adapter'; import axios from '~/lib/utils/axios_utils'; import IssuableContext from '~/issuable_context'; import LabelsSelect from '~/labels_select'; +import _ from 'underscore'; import '~/gl_dropdown'; import 'select2'; @@ -15,6 +16,35 @@ import '~/users_select'; let saveLabelCount = 0; let mock; +function testLabelClicks(labelOrder, done) { + $('.edit-link') + .get(0) + .click(); + + setTimeout(() => { + const labelsInDropdown = $('.dropdown-content a'); + + expect(labelsInDropdown.length).toBe(10); + + const arrayOfLabels = labelsInDropdown.get(); + const randomArrayOfLabels = _.shuffle(arrayOfLabels); + randomArrayOfLabels.forEach((label, i) => { + if (i < saveLabelCount) { + $(label).click(); + } + }); + + $('.edit-link') + .get(0) + .click(); + + setTimeout(() => { + expect($('.sidebar-collapsed-icon').attr('data-original-title')).toBe(labelOrder); + done(); + }, 0); + }, 0); +} + describe('Issue dropdown sidebar', () => { preloadFixtures('static/issue_sidebar_label.html'); @@ -29,7 +59,7 @@ describe('Issue dropdown sidebar', () => { mock.onGet('/root/test/labels.json').reply(() => { const labels = Array(10) .fill() - .map((_, i) => ({ + .map((_val, i) => ({ id: i, title: `test ${i}`, color: '#5CB85C', @@ -41,7 +71,7 @@ describe('Issue dropdown sidebar', () => { mock.onPut('/root/test/issues/2.json').reply(() => { const labels = Array(saveLabelCount) .fill() - .map((_, i) => ({ + .map((_val, i) => ({ id: i, title: `test ${i}`, color: '#5CB85C', @@ -57,61 +87,11 @@ describe('Issue dropdown sidebar', () => { it('changes collapsed tooltip when changing labels when less than 5', done => { saveLabelCount = 5; - $('.edit-link') - .get(0) - .click(); - - setTimeout(() => { - expect($('.dropdown-content a').length).toBe(10); - - $('.dropdown-content a').each(function(i) { - if (i < saveLabelCount) { - $(this) - .get(0) - .click(); - } - }); - - $('.edit-link') - .get(0) - .click(); - - setTimeout(() => { - expect($('.sidebar-collapsed-icon').attr('data-original-title')).toBe( - 'test 0, test 1, test 2, test 3, test 4', - ); - done(); - }, 0); - }, 0); + testLabelClicks('test 0, test 1, test 2, test 3, test 4', done); }); it('changes collapsed tooltip when changing labels when more than 5', done => { saveLabelCount = 6; - $('.edit-link') - .get(0) - .click(); - - setTimeout(() => { - expect($('.dropdown-content a').length).toBe(10); - - $('.dropdown-content a').each(function(i) { - if (i < saveLabelCount) { - $(this) - .get(0) - .click(); - } - }); - - $('.edit-link') - .get(0) - .click(); - - setTimeout(() => { - expect($('.sidebar-collapsed-icon').attr('data-original-title')).toBe( - 'test 0, test 1, test 2, test 3, test 4, and 1 more', - ); - done(); - }, 0); - }, 0); + testLabelClicks('test 0, test 1, test 2, test 3, test 4, and 1 more', done); }); }); diff --git a/spec/requests/api/group_labels_spec.rb b/spec/requests/api/group_labels_spec.rb index 0be4e2e9121..3ac394b57c5 100644 --- a/spec/requests/api/group_labels_spec.rb +++ b/spec/requests/api/group_labels_spec.rb @@ -5,9 +5,11 @@ require 'spec_helper' describe API::GroupLabels do let(:user) { create(:user) } let(:group) { create(:group) } + let(:subgroup) { create(:group, parent: group) } let!(:group_member) { create(:group_member, group: group, user: user) } - let!(:label1) { create(:group_label, title: 'feature', group: group) } - let!(:label2) { create(:group_label, title: 'bug', group: group) } + let!(:group_label1) { create(:group_label, title: 'feature', group: group) } + let!(:group_label2) { create(:group_label, title: 'bug', group: group) } + let!(:subgroup_label) { create(:group_label, title: 'support', group: subgroup) } describe 'GET :id/labels' do it 'returns all available labels for the group' do @@ -35,6 +37,34 @@ describe API::GroupLabels do end end + describe 'GET :subgroup_id/labels' do + context 'when the include_ancestor_groups parameter is not set' do + it 'returns all available labels for the group and ancestor groups' do + get api("/groups/#{subgroup.id}/labels", user) + + expect(response).to have_gitlab_http_status(200) + expect(response).to include_pagination_headers + expect(json_response).to be_an Array + expect(json_response).to all(match_schema('public_api/v4/labels/label')) + expect(json_response.size).to eq(3) + expect(json_response.map {|r| r['name'] }).to contain_exactly('feature', 'bug', 'support') + end + end + + context 'when the include_ancestor_groups parameter is set to false' do + it 'returns all available labels for the group but not for ancestor groups' do + get api("/groups/#{subgroup.id}/labels", user), params: { include_ancestor_groups: false } + + expect(response).to have_gitlab_http_status(200) + expect(response).to include_pagination_headers + expect(json_response).to be_an Array + expect(json_response).to all(match_schema('public_api/v4/labels/label')) + expect(json_response.size).to eq(1) + expect(json_response.map {|r| r['name'] }).to contain_exactly('support') + end + end + end + describe 'POST /groups/:id/labels' do it 'returns created label when all params are given' do post api("/groups/#{group.id}/labels", user), @@ -78,7 +108,7 @@ describe API::GroupLabels do it 'returns 409 if label already exists' do post api("/groups/#{group.id}/labels", user), params: { - name: label1.name, + name: group_label1.name, color: '#FFAABB' } @@ -89,13 +119,13 @@ describe API::GroupLabels do describe 'DELETE /groups/:id/labels' do it 'returns 204 for existing label' do - delete api("/groups/#{group.id}/labels", user), params: { name: label1.name } + delete api("/groups/#{group.id}/labels", user), params: { name: group_label1.name } expect(response).to have_gitlab_http_status(204) end it 'returns 404 for non existing label' do - delete api("/groups/#{group.id}/labels", user), params: { name: 'label2' } + delete api("/groups/#{group.id}/labels", user), params: { name: 'not_exists' } expect(response).to have_gitlab_http_status(404) expect(json_response['message']).to eq('404 Label Not Found') @@ -115,12 +145,12 @@ describe API::GroupLabels do expect(response).to have_gitlab_http_status(204) expect(subgroup.labels.size).to eq(0) - expect(group.labels).to include(label1) + expect(group.labels).to include(group_label1) end it_behaves_like '412 response' do let(:request) { api("/groups/#{group.id}/labels", user) } - let(:params) { { name: label1.name } } + let(:params) { { name: group_label1.name } } end end @@ -128,7 +158,7 @@ describe API::GroupLabels do it 'returns 200 if name and colors and description are changed' do put api("/groups/#{group.id}/labels", user), params: { - name: label1.name, + name: group_label1.name, new_name: 'New Label', color: '#FFFFFF', description: 'test' @@ -152,13 +182,13 @@ describe API::GroupLabels do expect(response).to have_gitlab_http_status(200) expect(subgroup.labels[0].name).to eq('New Label') - expect(label1.name).to eq('feature') + expect(group_label1.name).to eq('feature') end it 'returns 404 if label does not exist' do put api("/groups/#{group.id}/labels", user), params: { - name: 'label2', + name: 'not_exists', new_name: 'label3' } @@ -166,14 +196,14 @@ describe API::GroupLabels do end it 'returns 400 if no label name given' do - put api("/groups/#{group.id}/labels", user), params: { new_name: label1.name } + put api("/groups/#{group.id}/labels", user), params: { new_name: group_label1.name } expect(response).to have_gitlab_http_status(400) expect(json_response['error']).to eq('name is missing') end it 'returns 400 if no new parameters given' do - put api("/groups/#{group.id}/labels", user), params: { name: label1.name } + put api("/groups/#{group.id}/labels", user), params: { name: group_label1.name } expect(response).to have_gitlab_http_status(400) expect(json_response['error']).to eq('new_name, color, description are missing, '\ @@ -184,31 +214,31 @@ describe API::GroupLabels do describe 'POST /groups/:id/labels/:label_id/subscribe' do context 'when label_id is a label title' do it 'subscribes to the label' do - post api("/groups/#{group.id}/labels/#{label1.title}/subscribe", user) + post api("/groups/#{group.id}/labels/#{group_label1.title}/subscribe", user) expect(response).to have_gitlab_http_status(201) - expect(json_response['name']).to eq(label1.title) + expect(json_response['name']).to eq(group_label1.title) expect(json_response['subscribed']).to be_truthy end end context 'when label_id is a label ID' do it 'subscribes to the label' do - post api("/groups/#{group.id}/labels/#{label1.id}/subscribe", user) + post api("/groups/#{group.id}/labels/#{group_label1.id}/subscribe", user) expect(response).to have_gitlab_http_status(201) - expect(json_response['name']).to eq(label1.title) + expect(json_response['name']).to eq(group_label1.title) expect(json_response['subscribed']).to be_truthy end end context 'when user is already subscribed to label' do before do - label1.subscribe(user) + group_label1.subscribe(user) end it 'returns 304' do - post api("/groups/#{group.id}/labels/#{label1.id}/subscribe", user) + post api("/groups/#{group.id}/labels/#{group_label1.id}/subscribe", user) expect(response).to have_gitlab_http_status(304) end @@ -225,36 +255,36 @@ describe API::GroupLabels do describe 'POST /groups/:id/labels/:label_id/unsubscribe' do before do - label1.subscribe(user) + group_label1.subscribe(user) end context 'when label_id is a label title' do it 'unsubscribes from the label' do - post api("/groups/#{group.id}/labels/#{label1.title}/unsubscribe", user) + post api("/groups/#{group.id}/labels/#{group_label1.title}/unsubscribe", user) expect(response).to have_gitlab_http_status(201) - expect(json_response['name']).to eq(label1.title) + expect(json_response['name']).to eq(group_label1.title) expect(json_response['subscribed']).to be_falsey end end context 'when label_id is a label ID' do it 'unsubscribes from the label' do - post api("/groups/#{group.id}/labels/#{label1.id}/unsubscribe", user) + post api("/groups/#{group.id}/labels/#{group_label1.id}/unsubscribe", user) expect(response).to have_gitlab_http_status(201) - expect(json_response['name']).to eq(label1.title) + expect(json_response['name']).to eq(group_label1.title) expect(json_response['subscribed']).to be_falsey end end context 'when user is already unsubscribed from label' do before do - label1.unsubscribe(user) + group_label1.unsubscribe(user) end it 'returns 304' do - post api("/groups/#{group.id}/labels/#{label1.id}/unsubscribe", user) + post api("/groups/#{group.id}/labels/#{group_label1.id}/unsubscribe", user) expect(response).to have_gitlab_http_status(304) end diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb index b3acf531ccb..ec587a28f4f 100644 --- a/spec/requests/api/groups_spec.rb +++ b/spec/requests/api/groups_spec.rb @@ -497,6 +497,29 @@ describe API::Groups do expect(response).to have_gitlab_http_status(404) end + + context 'within a subgroup' do + let(:group3) { create(:group, visibility_level: Gitlab::VisibilityLevel::PUBLIC) } + let!(:subgroup) { create(:group, parent: group3, visibility_level: Gitlab::VisibilityLevel::PUBLIC) } + + before do + group3.add_owner(user3) + end + + it 'does not change visibility when not requested' do + put api("/groups/#{group3.id}", user3), params: { description: 'Bug #23083' } + + expect(response).to have_gitlab_http_status(200) + expect(json_response['visibility']).to eq('public') + end + + it 'prevents making private a group containing public subgroups' do + put api("/groups/#{group3.id}", user3), params: { visibility: 'private' } + + expect(response).to have_gitlab_http_status(400) + expect(json_response['message']['visibility_level']).to contain_exactly('private is not allowed since there are sub-groups with higher visibility.') + end + end end context 'when authenticated as the admin' do diff --git a/spec/requests/api/labels_spec.rb b/spec/requests/api/labels_spec.rb index 9aef67e28a7..4f8233a9110 100644 --- a/spec/requests/api/labels_spec.rb +++ b/spec/requests/api/labels_spec.rb @@ -256,6 +256,52 @@ describe API::Labels do 'is_project_label' => true) end end + + context 'when the include_ancestor_groups parameter is not set' do + let(:group) { create(:group) } + let!(:group_label) { create(:group_label, title: 'feature', group: group) } + let(:subgroup) { create(:group, parent: group) } + let!(:subgroup_label) { create(:group_label, title: 'support', group: subgroup) } + + before do + subgroup.add_owner(user) + project.update!(group: subgroup) + end + + it 'returns all available labels for the project, parent group and ancestor groups' do + get api("/projects/#{project.id}/labels", user) + + expect(response).to have_gitlab_http_status(200) + expect(response).to include_pagination_headers + expect(json_response).to be_an Array + expect(json_response).to all(match_schema('public_api/v4/labels/label')) + expect(json_response.size).to eq(4) + expect(json_response.map {|r| r['name'] }).to contain_exactly(group_label.name, subgroup_label.name, priority_label.name, label1.name) + end + end + + context 'when the include_ancestor_groups parameter is set to false' do + let(:group) { create(:group) } + let!(:group_label) { create(:group_label, title: 'feature', group: group) } + let(:subgroup) { create(:group, parent: group) } + let!(:subgroup_label) { create(:group_label, title: 'support', group: subgroup) } + + before do + subgroup.add_owner(user) + project.update!(group: subgroup) + end + + it 'returns all available labels for the project and the parent group only' do + get api("/projects/#{project.id}/labels", user), params: { include_ancestor_groups: false } + + expect(response).to have_gitlab_http_status(200) + expect(response).to include_pagination_headers + expect(json_response).to be_an Array + expect(json_response).to all(match_schema('public_api/v4/labels/label')) + expect(json_response.size).to eq(3) + expect(json_response.map {|r| r['name'] }).to contain_exactly(subgroup_label.name, priority_label.name, label1.name) + end + end end describe 'POST /projects/:id/labels' do |