Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-02-04 21:08:50 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-02-04 21:08:50 +0300
commitca05512007cea51e05d3431b2c8bd7228c754370 (patch)
tree5202d429acd68c071445aff9e352379173ec9c0b /spec
parent6b833f1e0340e00fdee074da9c42c0d4e07a46d2 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/features/admin/admin_mode/workers_spec.rb77
-rw-r--r--spec/features/admin/admin_uses_repository_checks_spec.rb66
-rw-r--r--spec/frontend/environments/enable_review_app_button_spec.js31
-rw-r--r--spec/javascripts/environments/environments_app_spec.js20
-rw-r--r--spec/lib/gitlab/auth/current_user_mode_spec.rb172
-rw-r--r--spec/lib/gitlab/diff/highlight_cache_spec.rb7
-rw-r--r--spec/lib/gitlab/sidekiq_middleware/admin_mode/client_spec.rb94
-rw-r--r--spec/lib/gitlab/sidekiq_middleware/admin_mode/server_spec.rb72
-rw-r--r--spec/lib/gitlab/sidekiq_middleware_spec.rb6
-rw-r--r--spec/models/user_spec.rb6
-rw-r--r--spec/policies/base_policy_spec.rb10
-rw-r--r--spec/support/shared_examples/features/discussion_comments_shared_example.rb45
12 files changed, 146 insertions, 460 deletions
diff --git a/spec/features/admin/admin_mode/workers_spec.rb b/spec/features/admin/admin_mode/workers_spec.rb
deleted file mode 100644
index e33c9d7e64c..00000000000
--- a/spec/features/admin/admin_mode/workers_spec.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-# Test an operation that triggers background jobs requiring administrative rights
-describe 'Admin mode for workers', :do_not_mock_admin_mode, :request_store, :clean_gitlab_redis_shared_state do
- let(:user) { create(:user) }
- let(:user_to_delete) { create(:user) }
-
- before do
- add_sidekiq_middleware
-
- sign_in(user)
- end
-
- context 'as a regular user' do
- it 'cannot delete user' do
- visit admin_user_path(user_to_delete)
-
- expect(page).to have_gitlab_http_status(:not_found)
- end
- end
-
- context 'as an admin user' do
- let(:user) { create(:admin) }
-
- context 'when admin mode disabled' do
- it 'cannot delete user', :js do
- visit admin_user_path(user_to_delete)
-
- expect(page).to have_content('Re-authentication required')
- end
- end
-
- context 'when admin mode enabled', :delete do
- before do
- gitlab_enable_admin_mode_sign_in(user)
- end
-
- it 'can delete user', :js do
- visit admin_user_path(user_to_delete)
- click_button 'Delete user'
-
- page.within '.modal-dialog' do
- find("input[name='username']").send_keys(user_to_delete.name)
- click_button 'Delete user'
-
- wait_for_requests
- end
-
- expect(page).to have_content('The user is being deleted.')
-
- # Perform jobs while logged out so that admin mode is only enabled in job metadata
- execute_jobs_signed_out(user)
-
- visit admin_user_path(user_to_delete)
-
- expect(page).to have_title('Not Found')
- end
- end
- end
-
- def add_sidekiq_middleware
- Sidekiq::Testing.server_middleware do |chain|
- chain.add Gitlab::SidekiqMiddleware::AdminMode::Server
- end
- end
-
- def execute_jobs_signed_out(user)
- gitlab_sign_out
-
- Sidekiq::Worker.drain_all
-
- sign_in(user)
- gitlab_enable_admin_mode_sign_in(user)
- end
-end
diff --git a/spec/features/admin/admin_uses_repository_checks_spec.rb b/spec/features/admin/admin_uses_repository_checks_spec.rb
index 954773e766d..3e8197588ed 100644
--- a/spec/features/admin/admin_uses_repository_checks_spec.rb
+++ b/spec/features/admin/admin_uses_repository_checks_spec.rb
@@ -2,64 +2,46 @@
require 'spec_helper'
-describe 'Admin uses repository checks', :request_store, :clean_gitlab_redis_shared_state, :do_not_mock_admin_mode do
+describe 'Admin uses repository checks' do
include StubENV
- let(:admin) { create(:admin) }
-
before do
stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
- sign_in(admin)
+ sign_in(create(:admin))
end
- context 'when admin mode is disabled' do
- it 'admin project page requires admin mode' do
- project = create(:project)
- visit_admin_project_page(project)
+ it 'to trigger a single check' do
+ project = create(:project)
+ visit_admin_project_page(project)
- expect(page).not_to have_css('.repository-check')
- expect(page).to have_content('Enter Admin Mode')
+ page.within('.repository-check') do
+ click_button 'Trigger repository check'
end
- end
-
- context 'when admin mode is enabled' do
- before do
- gitlab_enable_admin_mode_sign_in(admin)
- end
-
- it 'to trigger a single check', :js do
- project = create(:project)
- visit_admin_project_page(project)
- page.within('.repository-check') do
- click_button 'Trigger repository check'
- end
-
- expect(page).to have_content('Repository check was triggered')
- end
+ expect(page).to have_content('Repository check was triggered')
+ end
- it 'to see a single failed repository check', :js do
- project = create(:project)
- project.update_columns(
- last_repository_check_failed: true,
- last_repository_check_at: Time.now
- )
- visit_admin_project_page(project)
+ it 'to see a single failed repository check', :js do
+ project = create(:project)
+ project.update_columns(
+ last_repository_check_failed: true,
+ last_repository_check_at: Time.now
+ )
+ visit_admin_project_page(project)
- page.within('.alert') do
- expect(page.text).to match(/Last repository check \(just now\) failed/)
- end
+ page.within('.alert') do
+ expect(page.text).to match(/Last repository check \(just now\) failed/)
end
+ end
- it 'to clear all repository checks', :js do
- visit repository_admin_application_settings_path
+ it 'to clear all repository checks', :js do
+ visit repository_admin_application_settings_path
- expect(RepositoryCheck::ClearWorker).to receive(:perform_async)
+ expect(RepositoryCheck::ClearWorker).to receive(:perform_async)
- accept_confirm { find(:link, 'Clear all repository checks').send_keys(:return) }
+ accept_confirm { find(:link, 'Clear all repository checks').send_keys(:return) }
- expect(page).to have_content('Started asynchronous removal of all repository check states.')
- end
+ expect(page).to have_content('Started asynchronous removal of all repository check states.')
end
def visit_admin_project_page(project)
diff --git a/spec/frontend/environments/enable_review_app_button_spec.js b/spec/frontend/environments/enable_review_app_button_spec.js
new file mode 100644
index 00000000000..5549a1737fc
--- /dev/null
+++ b/spec/frontend/environments/enable_review_app_button_spec.js
@@ -0,0 +1,31 @@
+import { shallowMount, mount } from '@vue/test-utils';
+import ModalCopyButton from '~/vue_shared/components/modal_copy_button.vue';
+import EnableReviewAppButton from '~/environments/components/enable_review_app_button.vue';
+
+describe('Enable Review App Button', () => {
+ let wrapper;
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ describe('renders button with text', () => {
+ beforeEach(() => {
+ wrapper = mount(EnableReviewAppButton);
+ });
+
+ it('renders Enable Review text', () => {
+ expect(wrapper.text()).toBe('Enable review app');
+ });
+ });
+
+ describe('renders the modal', () => {
+ beforeEach(() => {
+ wrapper = shallowMount(EnableReviewAppButton);
+ });
+
+ it('renders the copyToClipboard button', () => {
+ expect(wrapper.find(ModalCopyButton).exists()).toBe(true);
+ });
+ });
+});
diff --git a/spec/javascripts/environments/environments_app_spec.js b/spec/javascripts/environments/environments_app_spec.js
index 75526c2ba74..6c05b609923 100644
--- a/spec/javascripts/environments/environments_app_spec.js
+++ b/spec/javascripts/environments/environments_app_spec.js
@@ -55,6 +55,26 @@ describe('Environment', () => {
"You don't have any environments right now",
);
});
+
+ describe('when it is possible to enable a review app', () => {
+ beforeEach(done => {
+ mock
+ .onGet(mockData.endpoint)
+ .reply(200, { environments: [], review_app: { can_setup_review_app: true } });
+
+ component = mountComponent(EnvironmentsComponent, mockData);
+
+ setTimeout(() => {
+ done();
+ }, 0);
+ });
+
+ it('should render the enable review app button', () => {
+ expect(component.$el.querySelector('.js-enable-review-app-button').textContent).toContain(
+ 'Enable review app',
+ );
+ });
+ });
});
describe('with paginated environments', () => {
diff --git a/spec/lib/gitlab/auth/current_user_mode_spec.rb b/spec/lib/gitlab/auth/current_user_mode_spec.rb
index 7c2fdac6c25..3b3db0f7315 100644
--- a/spec/lib/gitlab/auth/current_user_mode_spec.rb
+++ b/spec/lib/gitlab/auth/current_user_mode_spec.rb
@@ -2,10 +2,10 @@
require 'spec_helper'
-describe Gitlab::Auth::CurrentUserMode, :do_not_mock_admin_mode, :request_store do
+describe Gitlab::Auth::CurrentUserMode, :do_not_mock_admin_mode do
include_context 'custom session'
- let(:user) { build_stubbed(:user) }
+ let(:user) { build(:user) }
subject { described_class.new(user) }
@@ -13,66 +13,54 @@ describe Gitlab::Auth::CurrentUserMode, :do_not_mock_admin_mode, :request_store
allow(ActiveSession).to receive(:list_sessions).with(user).and_return([session])
end
- shared_examples 'admin mode cannot be enabled' do
- it 'is false by default' do
- expect(subject.admin_mode?).to be(false)
- end
-
- it 'cannot be enabled with a valid password' do
- subject.enable_admin_mode!(password: user.password)
-
- expect(subject.admin_mode?).to be(false)
- end
-
- it 'cannot be enabled with an invalid password' do
- subject.enable_admin_mode!(password: nil)
-
- expect(subject.admin_mode?).to be(false)
- end
+ describe '#admin_mode?', :request_store do
+ context 'when the user is a regular user' do
+ it 'is false by default' do
+ expect(subject.admin_mode?).to be(false)
+ end
- it 'cannot be enabled with empty params' do
- subject.enable_admin_mode!
+ it 'cannot be enabled with a valid password' do
+ subject.enable_admin_mode!(password: user.password)
- expect(subject.admin_mode?).to be(false)
- end
+ expect(subject.admin_mode?).to be(false)
+ end
- it 'disable has no effect' do
- subject.enable_admin_mode!
- subject.disable_admin_mode!
+ it 'cannot be enabled with an invalid password' do
+ subject.enable_admin_mode!(password: nil)
- expect(subject.admin_mode?).to be(false)
- end
+ expect(subject.admin_mode?).to be(false)
+ end
- context 'skipping password validation' do
- it 'cannot be enabled with a valid password' do
- subject.enable_admin_mode!(password: user.password, skip_password_validation: true)
+ it 'cannot be enabled with empty params' do
+ subject.enable_admin_mode!
expect(subject.admin_mode?).to be(false)
end
- it 'cannot be enabled with an invalid password' do
- subject.enable_admin_mode!(skip_password_validation: true)
+ it 'disable has no effect' do
+ subject.enable_admin_mode!
+ subject.disable_admin_mode!
expect(subject.admin_mode?).to be(false)
end
- end
- end
- describe '#admin_mode?' do
- context 'when the user is a regular user' do
- it_behaves_like 'admin mode cannot be enabled'
+ context 'skipping password validation' do
+ it 'cannot be enabled with a valid password' do
+ subject.enable_admin_mode!(password: user.password, skip_password_validation: true)
- context 'bypassing session' do
- it_behaves_like 'admin mode cannot be enabled' do
- around do |example|
- described_class.bypass_session!(user.id) { example.run }
- end
+ expect(subject.admin_mode?).to be(false)
+ end
+
+ it 'cannot be enabled with an invalid password' do
+ subject.enable_admin_mode!(skip_password_validation: true)
+
+ expect(subject.admin_mode?).to be(false)
end
end
end
context 'when the user is an admin' do
- let(:user) { build_stubbed(:user, :admin) }
+ let(:user) { build(:user, :admin) }
context 'when admin mode not requested' do
it 'is false by default' do
@@ -160,36 +148,11 @@ describe Gitlab::Auth::CurrentUserMode, :do_not_mock_admin_mode, :request_store
end
end
end
-
- context 'bypassing session' do
- it 'is active by default' do
- described_class.bypass_session!(user.id) do
- expect(subject.admin_mode?).to be(true)
- end
- end
-
- it 'enable has no effect' do
- described_class.bypass_session!(user.id) do
- subject.request_admin_mode!
- subject.enable_admin_mode!(password: user.password)
-
- expect(subject.admin_mode?).to be(true)
- end
- end
-
- it 'disable has no effect' do
- described_class.bypass_session!(user.id) do
- subject.disable_admin_mode!
-
- expect(subject.admin_mode?).to be(true)
- end
- end
- end
end
end
describe '#enable_admin_mode!' do
- let(:user) { build_stubbed(:user, :admin) }
+ let(:user) { build(:user, :admin) }
it 'creates a timestamp in the session' do
subject.request_admin_mode!
@@ -200,7 +163,7 @@ describe Gitlab::Auth::CurrentUserMode, :do_not_mock_admin_mode, :request_store
end
describe '#enable_sessionless_admin_mode!' do
- let(:user) { build_stubbed(:user, :admin) }
+ let(:user) { build(:user, :admin) }
it 'enabled admin mode without password' do
subject.enable_sessionless_admin_mode!
@@ -210,7 +173,7 @@ describe Gitlab::Auth::CurrentUserMode, :do_not_mock_admin_mode, :request_store
end
describe '#disable_admin_mode!' do
- let(:user) { build_stubbed(:user, :admin) }
+ let(:user) { build(:user, :admin) }
it 'sets the session timestamp to nil' do
subject.request_admin_mode!
@@ -220,73 +183,6 @@ describe Gitlab::Auth::CurrentUserMode, :do_not_mock_admin_mode, :request_store
end
end
- describe '.bypass_session!' do
- context 'with a regular user' do
- it 'admin mode is false' do
- described_class.bypass_session!(user.id) do
- expect(subject.admin_mode?).to be(false)
- expect(described_class.bypass_session_admin_id).to be(user.id)
- end
-
- expect(described_class.bypass_session_admin_id).to be_nil
- end
- end
-
- context 'with an admin user' do
- let(:user) { build_stubbed(:user, :admin) }
-
- it 'admin mode is true' do
- described_class.bypass_session!(user.id) do
- expect(subject.admin_mode?).to be(true)
- expect(described_class.bypass_session_admin_id).to be(user.id)
- end
-
- expect(described_class.bypass_session_admin_id).to be_nil
- end
- end
- end
-
- describe '.with_current_request_admin_mode' do
- context 'with a regular user' do
- it 'user is not available inside nor outside the yielded block' do
- described_class.with_current_admin(user) do
- expect(described_class.current_admin).to be_nil
- end
-
- expect(described_class.bypass_session_admin_id).to be_nil
- end
- end
-
- context 'with an admin user' do
- let(:user) { build_stubbed(:user, :admin) }
-
- context 'admin mode is disabled' do
- it 'user is not available inside nor outside the yielded block' do
- described_class.with_current_admin(user) do
- expect(described_class.current_admin).to be_nil
- end
-
- expect(described_class.bypass_session_admin_id).to be_nil
- end
- end
-
- context 'admin mode is enabled' do
- before do
- subject.request_admin_mode!
- subject.enable_admin_mode!(password: user.password)
- end
-
- it 'user is available only inside the yielded block' do
- described_class.with_current_admin(user) do
- expect(described_class.current_admin).to be(user)
- end
-
- expect(described_class.current_admin).to be_nil
- end
- end
- end
- end
-
def expected_session_entry(value_matcher)
{
Gitlab::Auth::CurrentUserMode::SESSION_STORE_KEY => a_hash_including(
diff --git a/spec/lib/gitlab/diff/highlight_cache_spec.rb b/spec/lib/gitlab/diff/highlight_cache_spec.rb
index 218c393c409..c1ec97ae88c 100644
--- a/spec/lib/gitlab/diff/highlight_cache_spec.rb
+++ b/spec/lib/gitlab/diff/highlight_cache_spec.rb
@@ -101,6 +101,13 @@ describe Gitlab::Diff::HighlightCache, :clean_gitlab_redis_cache do
let(:paths) { merge_request.diffs.raw_diff_files.select(&:text?).map(&:file_path) }
end
+ it 'updates memory usage metrics' do
+ expect(described_class.gitlab_redis_diff_caching_memory_usage_bytes)
+ .to receive(:observe).and_call_original
+
+ cache.send(:write_to_redis_hash, diff_hash)
+ end
+
context 'different diff_collections for the same diffable' do
before do
cache.write_if_empty
diff --git a/spec/lib/gitlab/sidekiq_middleware/admin_mode/client_spec.rb b/spec/lib/gitlab/sidekiq_middleware/admin_mode/client_spec.rb
deleted file mode 100644
index f6449bae8c3..00000000000
--- a/spec/lib/gitlab/sidekiq_middleware/admin_mode/client_spec.rb
+++ /dev/null
@@ -1,94 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe Gitlab::SidekiqMiddleware::AdminMode::Client, :do_not_mock_admin_mode, :request_store do
- include AdminModeHelper
-
- let(:worker) do
- Class.new do
- def perform; end
- end
- end
-
- let(:job) { {} }
- let(:queue) { :test }
-
- it 'yields block' do
- expect do |b|
- subject.call(worker, job, queue, nil, &b)
- end.to yield_control.once
- end
-
- context 'user is a regular user' do
- it 'no admin mode field in payload' do
- subject.call(worker, job, queue, nil) { nil }
-
- expect(job).not_to include('admin_mode_user_id')
- end
- end
-
- context 'user is an administrator' do
- let(:admin) { create(:admin) }
-
- context 'admin mode disabled' do
- it 'no admin mode field in payload' do
- subject.call(worker, job, queue, nil) { nil }
-
- expect(job).not_to include('admin_mode_user_id')
- end
- end
-
- context 'admin mode enabled' do
- before do
- enable_admin_mode!(admin)
- end
-
- context 'when sidekiq required context not set' do
- it 'no admin mode field in payload' do
- subject.call(worker, job, queue, nil) { nil }
-
- expect(job).not_to include('admin_mode_user_id')
- end
- end
-
- context 'when user stored in current request' do
- it 'has admin mode field in payload' do
- Gitlab::Auth::CurrentUserMode.with_current_admin(admin) do
- subject.call(worker, job, queue, nil) { nil }
-
- expect(job).to include('admin_mode_user_id' => admin.id)
- end
- end
- end
-
- context 'when bypassing session' do
- it 'has admin mode field in payload' do
- Gitlab::Auth::CurrentUserMode.bypass_session!(admin.id) do
- subject.call(worker, job, queue, nil) { nil }
-
- expect(job).to include('admin_mode_user_id' => admin.id)
- end
- end
- end
- end
- end
-
- context 'admin mode feature disabled' do
- before do
- stub_feature_flags(user_mode_in_session: false)
- end
-
- it 'yields block' do
- expect do |b|
- subject.call(worker, job, queue, nil, &b)
- end.to yield_control.once
- end
-
- it 'no admin mode field in payload' do
- subject.call(worker, job, queue, nil) { nil }
-
- expect(job).not_to include('admin_mode_user_id')
- end
- end
-end
diff --git a/spec/lib/gitlab/sidekiq_middleware/admin_mode/server_spec.rb b/spec/lib/gitlab/sidekiq_middleware/admin_mode/server_spec.rb
deleted file mode 100644
index 60475f0e403..00000000000
--- a/spec/lib/gitlab/sidekiq_middleware/admin_mode/server_spec.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe Gitlab::SidekiqMiddleware::AdminMode::Server, :do_not_mock_admin_mode, :request_store do
- include AdminModeHelper
-
- let(:worker) do
- Class.new do
- def perform; end
- end
- end
-
- let(:job) { {} }
- let(:queue) { :test }
-
- it 'yields block' do
- expect do |b|
- subject.call(worker, job, queue, &b)
- end.to yield_control.once
- end
-
- context 'job has no admin mode field' do
- it 'session is not bypassed' do
- subject.call(worker, job, queue) do
- expect(Gitlab::Auth::CurrentUserMode.bypass_session_admin_id).to be_nil
- end
- end
- end
-
- context 'job has admin mode field' do
- let(:admin) { create(:admin) }
-
- context 'nil admin mode id' do
- let(:job) { { 'admin_mode_user_id' => nil } }
-
- it 'session is not bypassed' do
- subject.call(worker, job, queue) do
- expect(Gitlab::Auth::CurrentUserMode.bypass_session_admin_id).to be_nil
- end
- end
- end
-
- context 'valid admin mode id' do
- let(:job) { { 'admin_mode_user_id' => admin.id } }
-
- it 'session is bypassed' do
- subject.call(worker, job, queue) do
- expect(Gitlab::Auth::CurrentUserMode.bypass_session_admin_id).to be(admin.id)
- end
- end
- end
- end
-
- context 'admin mode feature disabled' do
- before do
- stub_feature_flags(user_mode_in_session: false)
- end
-
- it 'yields block' do
- expect do |b|
- subject.call(worker, job, queue, &b)
- end.to yield_control.once
- end
-
- it 'session is not bypassed' do
- subject.call(worker, job, queue) do
- expect(Gitlab::Auth::CurrentUserMode.bypass_session_admin_id).to be_nil
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/sidekiq_middleware_spec.rb b/spec/lib/gitlab/sidekiq_middleware_spec.rb
index 19242d25e27..e8dcbbd2ee1 100644
--- a/spec/lib/gitlab/sidekiq_middleware_spec.rb
+++ b/spec/lib/gitlab/sidekiq_middleware_spec.rb
@@ -45,8 +45,7 @@ describe Gitlab::SidekiqMiddleware do
Gitlab::SidekiqMiddleware::ArgumentsLogger,
Gitlab::SidekiqMiddleware::MemoryKiller,
Gitlab::SidekiqMiddleware::RequestStoreMiddleware,
- Gitlab::SidekiqMiddleware::WorkerContext::Server,
- Gitlab::SidekiqMiddleware::AdminMode::Server
+ Gitlab::SidekiqMiddleware::WorkerContext::Server
]
end
let(:enabled_sidekiq_middlewares) { all_sidekiq_middlewares - disabled_sidekiq_middlewares }
@@ -116,8 +115,7 @@ describe Gitlab::SidekiqMiddleware do
Gitlab::SidekiqStatus::ClientMiddleware,
Gitlab::SidekiqMiddleware::ClientMetrics,
Gitlab::SidekiqMiddleware::WorkerContext::Client,
- Labkit::Middleware::Sidekiq::Client,
- Gitlab::SidekiqMiddleware::AdminMode::Client
+ Labkit::Middleware::Sidekiq::Client
]
end
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 610b3e47c11..d14de7e99de 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -2985,9 +2985,9 @@ describe User, :do_not_mock_admin_mode do
end
end
- describe '#can_read_all_resources?', :request_store do
+ describe '#can_read_all_resources?' do
it 'returns false for regular user' do
- user = build_stubbed(:user)
+ user = build(:user)
expect(user.can_read_all_resources?).to be_falsy
end
@@ -2995,7 +2995,7 @@ describe User, :do_not_mock_admin_mode do
context 'for admin user' do
include_context 'custom session'
- let(:user) { build_stubbed(:user, :admin) }
+ let(:user) { build(:user, :admin) }
context 'when admin mode is disabled' do
it 'returns false' do
diff --git a/spec/policies/base_policy_spec.rb b/spec/policies/base_policy_spec.rb
index ae5af9e0f29..81aee4cfcac 100644
--- a/spec/policies/base_policy_spec.rb
+++ b/spec/policies/base_policy_spec.rb
@@ -23,8 +23,8 @@ describe BasePolicy, :do_not_mock_admin_mode do
end
describe 'read cross project' do
- let(:current_user) { build_stubbed(:user) }
- let(:user) { build_stubbed(:user) }
+ let(:current_user) { create(:user) }
+ let(:user) { create(:user) }
subject { described_class.new(current_user, [user]) }
@@ -38,7 +38,7 @@ describe BasePolicy, :do_not_mock_admin_mode do
it { is_expected.not_to be_allowed(:read_cross_project) }
context 'for admins' do
- let(:current_user) { build_stubbed(:admin) }
+ let(:current_user) { build(:admin) }
subject { described_class.new(current_user, nil) }
@@ -56,14 +56,14 @@ describe BasePolicy, :do_not_mock_admin_mode do
end
describe 'full private access' do
- let(:current_user) { build_stubbed(:user) }
+ let(:current_user) { create(:user) }
subject { described_class.new(current_user, nil) }
it { is_expected.not_to be_allowed(:read_all_resources) }
context 'for admins' do
- let(:current_user) { build_stubbed(:admin) }
+ let(:current_user) { build(:admin) }
it 'allowed when in admin mode' do
enable_admin_mode!(current_user)
diff --git a/spec/support/shared_examples/features/discussion_comments_shared_example.rb b/spec/support/shared_examples/features/discussion_comments_shared_example.rb
index 257b53b2a7b..81433d124c9 100644
--- a/spec/support/shared_examples/features/discussion_comments_shared_example.rb
+++ b/spec/support/shared_examples/features/discussion_comments_shared_example.rb
@@ -8,44 +8,40 @@ RSpec.shared_examples 'thread comments' do |resource_name|
let(:submit_selector) { "#{form_selector} .js-comment-submit-button" }
let(:close_selector) { "#{form_selector} .btn-comment-and-close" }
let(:comments_selector) { '.timeline > .note.timeline-entry' }
+ let(:comment) { 'My comment' }
- it 'clicking "Comment" will post a comment', :quarantine do
+ it 'clicking "Comment" will post a comment' do
expect(page).to have_selector toggle_selector
- find("#{form_selector} .note-textarea").send_keys('a')
+ find("#{form_selector} .note-textarea").send_keys(comment)
- find(submit_selector).click
+ click_button 'Comment'
- wait_for_requests
+ expect(page).to have_content(comment)
- find(comments_selector, match: :first)
new_comment = all(comments_selector).last
- expect(new_comment).to have_content 'a'
expect(new_comment).not_to have_selector '.discussion'
end
if resource_name == 'issue'
it "clicking 'Comment & close #{resource_name}' will post a comment and close the #{resource_name}" do
- find("#{form_selector} .note-textarea").send_keys('a')
+ find("#{form_selector} .note-textarea").send_keys(comment)
- find(close_selector).click
- wait_for_requests
+ click_button 'Comment & close issue'
- find(comments_selector, match: :first)
- find("#{comments_selector}.system-note")
- entries = all(comments_selector)
- close_note = entries.last
- new_comment = entries[-2]
+ expect(page).to have_content(comment)
+ expect(page).to have_content "@#{user.username} closed"
+
+ new_comment = all(comments_selector).last
- expect(close_note).to have_content 'closed'
expect(new_comment).not_to have_selector '.discussion'
end
end
describe 'when the toggle is clicked' do
before do
- find("#{form_selector} .note-textarea").send_keys('a')
+ find("#{form_selector} .note-textarea").send_keys(comment)
find(toggle_selector).click
end
@@ -153,10 +149,11 @@ RSpec.shared_examples 'thread comments' do |resource_name|
end
it 'clicking "Start thread" will post a thread' do
+ expect(page).to have_content(comment)
+
new_comment = all(comments_selector).last
- expect(new_comment).to have_content 'a'
- expect(new_comment).to have_selector '.discussion'
+ expect(new_comment).to have_selector('.discussion')
end
if resource_name =~ /(issue|merge request)/
@@ -208,15 +205,13 @@ RSpec.shared_examples 'thread comments' do |resource_name|
if resource_name == 'issue'
it "clicking 'Start thread & close #{resource_name}' will post a thread and close the #{resource_name}" do
- find(close_selector).click
+ click_button 'Start thread & close issue'
- find(comments_selector, match: :first)
- find("#{comments_selector}.system-note")
- entries = all(comments_selector)
- close_note = entries.last
- new_discussion = entries[-2]
+ expect(page).to have_content(comment)
+ expect(page).to have_content "@#{user.username} closed"
+
+ new_discussion = all(comments_selector)[-2]
- expect(close_note).to have_content 'closed'
expect(new_discussion).to have_selector '.discussion'
end
end