summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-04-06 15:10:04 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-04-06 15:10:04 +0000
commitf3b1e07903a7f509b11ad7cf188fac46d98f77f6 (patch)
treea6fa5e65d83d94334387952f1f526ed438604408 /spec
parentba174c982f40d71a87fd511b091753807174f7e7 (diff)
downloadgitlab-ce-f3b1e07903a7f509b11ad7cf188fac46d98f77f6.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/features/projects/files/template_type_dropdown_spec.rb4
-rw-r--r--spec/frontend/api_spec.js28
-rw-r--r--spec/frontend/static_site_editor/mock_data.js18
-rw-r--r--spec/frontend/static_site_editor/services/load_source_content_spec.js31
-rw-r--r--spec/graphql/resolvers/projects/jira_imports_resolver_spec.rb10
-rw-r--r--spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb68
-rw-r--r--spec/models/user_spec.rb100
-rw-r--r--spec/routing/project_routing_spec.rb2
-rw-r--r--spec/support/shared_examples/models/concerns/has_repository_shared_examples.rb1
9 files changed, 182 insertions, 80 deletions
diff --git a/spec/features/projects/files/template_type_dropdown_spec.rb b/spec/features/projects/files/template_type_dropdown_spec.rb
index 03b4b9b4517..5ea0b9b015f 100644
--- a/spec/features/projects/files/template_type_dropdown_spec.rb
+++ b/spec/features/projects/files/template_type_dropdown_spec.rb
@@ -40,10 +40,6 @@ describe 'Projects > Files > Template type dropdown selector', :js do
check_type_selector_display(true)
end
- it 'is displayed when input matches' do
- check_type_selector_display(true)
- end
-
it 'selects every template type correctly' do
try_selecting_all_types
end
diff --git a/spec/frontend/api_spec.js b/spec/frontend/api_spec.js
index 179aa3a49d7..fdefa16ac19 100644
--- a/spec/frontend/api_spec.js
+++ b/spec/frontend/api_spec.js
@@ -631,4 +631,32 @@ describe('Api', () => {
});
});
});
+
+ describe('getRawFile', () => {
+ const dummyProjectPath = 'gitlab-org/gitlab';
+ const dummyFilePath = 'doc/CONTRIBUTING.md';
+ const expectedUrl = `${dummyUrlRoot}/api/${dummyApiVersion}/projects/${encodeURIComponent(
+ dummyProjectPath,
+ )}/repository/files/${encodeURIComponent(dummyFilePath)}/raw`;
+
+ describe('when the raw file is successfully fetched', () => {
+ it('resolves the Promise', () => {
+ mock.onGet(expectedUrl).replyOnce(200);
+
+ return Api.getRawFile(dummyProjectPath, dummyFilePath).then(() => {
+ expect(mock.history.get).toHaveLength(1);
+ });
+ });
+ });
+
+ describe('when an error occurs while getting a raw file', () => {
+ it('rejects the Promise', () => {
+ mock.onDelete(expectedUrl).replyOnce(500);
+
+ return Api.getRawFile(dummyProjectPath, dummyFilePath).catch(() => {
+ expect(mock.history.get).toHaveLength(1);
+ });
+ });
+ });
+ });
});
diff --git a/spec/frontend/static_site_editor/mock_data.js b/spec/frontend/static_site_editor/mock_data.js
new file mode 100644
index 00000000000..0b2a69420d8
--- /dev/null
+++ b/spec/frontend/static_site_editor/mock_data.js
@@ -0,0 +1,18 @@
+export const sourceContent = `
+---
+layout: handbook-page-toc
+title: Handbook
+twitter_image: '/images/tweets/handbook-gitlab.png'
+---
+
+## On this page
+{:.no_toc .hidden-md .hidden-lg}
+
+- TOC
+{:toc .hidden-md .hidden-lg}
+`;
+
+export const sourceContentTitle = 'Handbook';
+
+export const projectId = '123456';
+export const sourcePath = 'foobar.md.html';
diff --git a/spec/frontend/static_site_editor/services/load_source_content_spec.js b/spec/frontend/static_site_editor/services/load_source_content_spec.js
new file mode 100644
index 00000000000..87893bb7a6e
--- /dev/null
+++ b/spec/frontend/static_site_editor/services/load_source_content_spec.js
@@ -0,0 +1,31 @@
+import Api from '~/api';
+
+import loadSourceContent from '~/static_site_editor/services/load_source_content';
+
+import { sourceContent, sourceContentTitle, projectId, sourcePath } from '../mock_data';
+
+describe('loadSourceContent', () => {
+ describe('requesting source content succeeds', () => {
+ let result;
+
+ beforeEach(() => {
+ jest.spyOn(Api, 'getRawFile').mockResolvedValue({ data: sourceContent });
+
+ return loadSourceContent({ projectId, sourcePath }).then(_result => {
+ result = _result;
+ });
+ });
+
+ it('calls getRawFile API with project id and source path', () => {
+ expect(Api.getRawFile).toHaveBeenCalledWith(projectId, sourcePath);
+ });
+
+ it('extracts page title from source content', () => {
+ expect(result.title).toBe(sourceContentTitle);
+ });
+
+ it('returns raw content', () => {
+ expect(result.content).toBe(sourceContent);
+ });
+ });
+});
diff --git a/spec/graphql/resolvers/projects/jira_imports_resolver_spec.rb b/spec/graphql/resolvers/projects/jira_imports_resolver_spec.rb
index 54d51292919..a5f17acce91 100644
--- a/spec/graphql/resolvers/projects/jira_imports_resolver_spec.rb
+++ b/spec/graphql/resolvers/projects/jira_imports_resolver_spec.rb
@@ -14,6 +14,16 @@ describe Resolvers::Projects::JiraImportsResolver do
data
end
+ context 'when feature flag disabled' do
+ let_it_be(:project) { create(:project, :private, import_data: jira_import_data) }
+
+ before do
+ stub_feature_flags(jira_issue_import: false)
+ end
+
+ it_behaves_like 'no jira import access'
+ end
+
context 'when project does not have Jira import data' do
let_it_be(:project) { create(:project, :private, import_data: nil) }
diff --git a/spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb b/spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb
index 1fc6fdcf622..6ee8acbf6fd 100644
--- a/spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb
+++ b/spec/lib/gitlab/metrics/requests_rack_middleware_spec.rb
@@ -36,6 +36,74 @@ describe Gitlab::Metrics::RequestsRackMiddleware do
Timecop.scale(3600) { subject.call(env) }
end
+
+ context 'request is a health check endpoint' do
+ it 'increments health endpoint counter' do
+ env['PATH_INFO'] = '/-/liveness'
+
+ expect(described_class).to receive_message_chain(:http_health_requests_total, :increment).with(method: 'get')
+
+ subject.call(env)
+ end
+
+ context 'with trailing slash' do
+ before do
+ env['PATH_INFO'] = '/-/liveness/'
+ end
+
+ it 'increments health endpoint counter' do
+ expect(described_class).to receive_message_chain(:http_health_requests_total, :increment).with(method: 'get')
+
+ subject.call(env)
+ end
+ end
+
+ context 'with percent encoded values' do
+ before do
+ env['PATH_INFO'] = '/-/%6D%65%74%72%69%63%73' # /-/metrics
+ end
+
+ it 'increments health endpoint counter' do
+ expect(described_class).to receive_message_chain(:http_health_requests_total, :increment).with(method: 'get')
+
+ subject.call(env)
+ end
+ end
+ end
+
+ context 'request is not a health check endpoint' do
+ it 'does not increment health endpoint counter' do
+ env['PATH_INFO'] = '/-/ordinary-requests'
+
+ expect(described_class).not_to receive(:http_health_requests_total)
+
+ subject.call(env)
+ end
+
+ context 'path info is a root path' do
+ before do
+ env['PATH_INFO'] = '/-/'
+ end
+
+ it 'does not increment health endpoint counter' do
+ expect(described_class).not_to receive(:http_health_requests_total)
+
+ subject.call(env)
+ end
+ end
+
+ context 'path info is a subpath' do
+ before do
+ env['PATH_INFO'] = '/-/health/subpath'
+ end
+
+ it 'does not increment health endpoint counter' do
+ expect(described_class).not_to receive(:http_health_requests_total)
+
+ subject.call(env)
+ end
+ end
+ end
end
context '@app.call throws exception' do
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index e69d4e18c1e..679f4a19f5b 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -28,7 +28,6 @@ describe User, :do_not_mock_admin_mode do
describe 'associations' do
it { is_expected.to have_one(:namespace) }
it { is_expected.to have_one(:status) }
- it { is_expected.to have_one(:max_access_level_membership) }
it { is_expected.to have_one(:user_detail) }
it { is_expected.to have_one(:user_highest_role) }
it { is_expected.to have_many(:snippets).dependent(:destroy) }
@@ -1000,91 +999,42 @@ describe User, :do_not_mock_admin_mode do
end
describe '#highest_role' do
- let(:user) { create(:user) }
- let(:group) { create(:group) }
-
- context 'with association :max_access_level_membership' do
- let(:another_user) { create(:user) }
-
- before do
- create(:project, group: group) do |project|
- group.add_user(user, GroupMember::GUEST)
- group.add_user(another_user, GroupMember::DEVELOPER)
- end
-
- create(:project, group: create(:group)) do |project|
- project.add_guest(another_user)
- end
-
- create(:project, group: create(:group)) do |project|
- project.add_maintainer(user)
- end
- end
-
- it 'returns the correct highest role' do
- users = User.includes(:max_access_level_membership).where(id: [user.id, another_user.id])
-
- expect(users.collect { |u| [u.id, u.highest_role] }).to contain_exactly(
- [user.id, Gitlab::Access::MAINTAINER],
- [another_user.id, Gitlab::Access::DEVELOPER]
- )
- end
- end
-
- it 'returns NO_ACCESS if none has been set' do
- expect(user.highest_role).to eq(Gitlab::Access::NO_ACCESS)
- end
-
- it 'returns MAINTAINER if user is maintainer of a project' do
- create(:project, group: group) do |project|
- project.add_maintainer(user)
- end
-
- expect(user.highest_role).to eq(Gitlab::Access::MAINTAINER)
- end
+ let_it_be(:user) { create(:user) }
- it 'returns the highest role if user is member of multiple projects' do
- create(:project, group: group) do |project|
- project.add_maintainer(user)
+ context 'when user_highest_role does not exist' do
+ it 'returns NO_ACCESS' do
+ expect(user.highest_role).to eq(Gitlab::Access::NO_ACCESS)
end
-
- create(:project, group: group) do |project|
- project.add_developer(user)
- end
-
- expect(user.highest_role).to eq(Gitlab::Access::MAINTAINER)
end
- it 'returns MAINTAINER if user is maintainer of a group' do
- create(:group) do |group|
- group.add_user(user, GroupMember::MAINTAINER)
- end
-
- expect(user.highest_role).to eq(Gitlab::Access::MAINTAINER)
- end
+ context 'when user_highest_role exists' do
+ context 'stored highest access level is nil' do
+ it 'returns Gitlab::Access::NO_ACCESS' do
+ create(:user_highest_role, user: user)
- it 'returns the highest role if user is member of multiple groups' do
- create(:group) do |group|
- group.add_user(user, GroupMember::MAINTAINER)
+ expect(user.highest_role).to eq(Gitlab::Access::NO_ACCESS)
+ end
end
- create(:group) do |group|
- group.add_user(user, GroupMember::DEVELOPER)
- end
+ context 'stored highest access level present' do
+ context 'with association :user_highest_role' do
+ let(:another_user) { create(:user) }
- expect(user.highest_role).to eq(Gitlab::Access::MAINTAINER)
- end
+ before do
+ create(:user_highest_role, :maintainer, user: user)
+ create(:user_highest_role, :developer, user: another_user)
+ end
- it 'returns the highest role if user is member of multiple groups and projects' do
- create(:group) do |group|
- group.add_user(user, GroupMember::DEVELOPER)
- end
+ it 'returns the correct highest role' do
+ users = User.includes(:user_highest_role).where(id: [user.id, another_user.id])
- create(:project, group: group) do |project|
- project.add_maintainer(user)
+ expect(users.collect { |u| [u.id, u.highest_role] }).to contain_exactly(
+ [user.id, Gitlab::Access::MAINTAINER],
+ [another_user.id, Gitlab::Access::DEVELOPER]
+ )
+ end
+ end
end
-
- expect(user.highest_role).to eq(Gitlab::Access::MAINTAINER)
end
end
diff --git a/spec/routing/project_routing_spec.rb b/spec/routing/project_routing_spec.rb
index 1a43342d278..0272d269aa4 100644
--- a/spec/routing/project_routing_spec.rb
+++ b/spec/routing/project_routing_spec.rb
@@ -802,7 +802,7 @@ describe 'project routing' do
# TODO: remove this test as part of https://gitlab.com/gitlab-org/gitlab/issues/207079 (12.9)
it 'to ci_cd#create_deploy_token' do
- expect(post('gitlab/gitlabhq/-/settings/repository/deploy_token/create')).to route_to('projects/settings/ci_cd#create_deploy_token', namespace_id: 'gitlab', project_id: 'gitlabhq')
+ expect(post('gitlab/gitlabhq/-/settings/ci_cd/deploy_token/create')).to route_to('projects/settings/ci_cd#create_deploy_token', namespace_id: 'gitlab', project_id: 'gitlabhq')
end
end
diff --git a/spec/support/shared_examples/models/concerns/has_repository_shared_examples.rb b/spec/support/shared_examples/models/concerns/has_repository_shared_examples.rb
index 5a5d7c8f038..368ec0694fd 100644
--- a/spec/support/shared_examples/models/concerns/has_repository_shared_examples.rb
+++ b/spec/support/shared_examples/models/concerns/has_repository_shared_examples.rb
@@ -167,6 +167,7 @@ RSpec.shared_examples 'model with repository' do
describe 'Respond to' do
it { is_expected.to respond_to(:base_dir) }
it { is_expected.to respond_to(:disk_path) }
+ it { is_expected.to respond_to(:gitlab_shell) }
end
describe '.pick_repository_storage' do