diff options
Diffstat (limited to 'spec/requests/api/namespaces_spec.rb')
-rw-r--r-- | spec/requests/api/namespaces_spec.rb | 76 |
1 files changed, 64 insertions, 12 deletions
diff --git a/spec/requests/api/namespaces_spec.rb b/spec/requests/api/namespaces_spec.rb index 222d8992d1b..01dbf523071 100644 --- a/spec/requests/api/namespaces_spec.rb +++ b/spec/requests/api/namespaces_spec.rb @@ -3,10 +3,12 @@ require 'spec_helper' RSpec.describe API::Namespaces do - let(:admin) { create(:admin) } - let(:user) { create(:user) } - let!(:group1) { create(:group, name: 'group.one') } - let!(:group2) { create(:group, :nested) } + let_it_be(:admin) { create(:admin) } + let_it_be(:user) { create(:user) } + let_it_be(:group1) { create(:group, name: 'group.one') } + let_it_be(:group2) { create(:group, :nested) } + let_it_be(:project) { create(:project, namespace: group2, name: group2.name, path: group2.path) } + let_it_be(:project_namespace) { project.project_namespace } describe "GET /namespaces" do context "when unauthenticated" do @@ -26,7 +28,7 @@ RSpec.describe API::Namespaces do expect(response).to have_gitlab_http_status(:ok) expect(response).to include_pagination_headers expect(group_kind_json_response.keys).to include('id', 'kind', 'name', 'path', 'full_path', - 'parent_id', 'members_count_with_descendants') + 'parent_id', 'members_count_with_descendants') expect(user_kind_json_response.keys).to include('id', 'kind', 'name', 'path', 'full_path', 'parent_id') end @@ -37,7 +39,8 @@ RSpec.describe API::Namespaces do expect(response).to have_gitlab_http_status(:ok) expect(response).to include_pagination_headers expect(json_response).to be_an Array - expect(json_response.length).to eq(Namespace.count) + # project namespace is excluded + expect(json_response.length).to eq(Namespace.count - 1) end it "admin: returns an array of matched namespaces" do @@ -61,7 +64,7 @@ RSpec.describe API::Namespaces do owned_group_response = json_response.find { |resource| resource['id'] == group1.id } expect(owned_group_response.keys).to include('id', 'kind', 'name', 'path', 'full_path', - 'parent_id', 'members_count_with_descendants') + 'parent_id', 'members_count_with_descendants') end it "returns correct attributes when user cannot admin group" do @@ -109,7 +112,8 @@ RSpec.describe API::Namespaces do describe 'GET /namespaces/:id' do let(:owned_group) { group1 } - let(:user2) { create(:user) } + + let_it_be(:user2) { create(:user) } shared_examples 'can access namespace' do it 'returns namespace details' do @@ -144,6 +148,16 @@ RSpec.describe API::Namespaces do it_behaves_like 'can access namespace' end + + context 'when requesting project_namespace' do + let(:namespace_id) { project_namespace.id } + + it 'returns not-found' do + get api("/namespaces/#{namespace_id}", request_actor) + + expect(response).to have_gitlab_http_status(:not_found) + end + end end context 'when requested by path' do @@ -159,6 +173,16 @@ RSpec.describe API::Namespaces do it_behaves_like 'can access namespace' end + + context 'when requesting project_namespace' do + let(:namespace_id) { project_namespace.full_path } + + it 'returns not-found' do + get api("/namespaces/#{namespace_id}", request_actor) + + expect(response).to have_gitlab_http_status(:not_found) + end + end end end @@ -177,6 +201,12 @@ RSpec.describe API::Namespaces do expect(response).to have_gitlab_http_status(:unauthorized) end + + it 'returns authentication error' do + get api("/namespaces/#{project_namespace.id}") + + expect(response).to have_gitlab_http_status(:unauthorized) + end end context 'when authenticated as regular user' do @@ -231,10 +261,10 @@ RSpec.describe API::Namespaces do end describe 'GET /namespaces/:namespace/exists' do - let!(:namespace1) { create(:group, name: 'Namespace 1', path: 'namespace-1') } - let!(:namespace2) { create(:group, name: 'Namespace 2', path: 'namespace-2') } - let!(:namespace1sub) { create(:group, name: 'Sub Namespace 1', path: 'sub-namespace-1', parent: namespace1) } - let!(:namespace2sub) { create(:group, name: 'Sub Namespace 2', path: 'sub-namespace-2', parent: namespace2) } + let_it_be(:namespace1) { create(:group, name: 'Namespace 1', path: 'namespace-1') } + let_it_be(:namespace2) { create(:group, name: 'Namespace 2', path: 'namespace-2') } + let_it_be(:namespace1sub) { create(:group, name: 'Sub Namespace 1', path: 'sub-namespace-1', parent: namespace1) } + let_it_be(:namespace2sub) { create(:group, name: 'Sub Namespace 2', path: 'sub-namespace-2', parent: namespace2) } context 'when unauthenticated' do it 'returns authentication error' do @@ -242,6 +272,16 @@ RSpec.describe API::Namespaces do expect(response).to have_gitlab_http_status(:unauthorized) end + + context 'when requesting project_namespace' do + let(:namespace_id) { project_namespace.id } + + it 'returns authentication error' do + get api("/namespaces/#{project_namespace.path}/exists"), params: { parent_id: group2.id } + + expect(response).to have_gitlab_http_status(:unauthorized) + end + end end context 'when authenticated' do @@ -300,6 +340,18 @@ RSpec.describe API::Namespaces do expect(response).to have_gitlab_http_status(:ok) expect(response.body).to eq(expected_json) end + + context 'when requesting project_namespace' do + let(:namespace_id) { project_namespace.id } + + it 'returns JSON indicating the namespace does not exist without a suggestion' do + get api("/namespaces/#{project_namespace.path}/exists", user), params: { parent_id: group2.id } + + expected_json = { exists: false, suggests: [] }.to_json + expect(response).to have_gitlab_http_status(:ok) + expect(response.body).to eq(expected_json) + end + end end end end |