Skip to content
Snippets Groups Projects
Commit cfc792b9 authored by GitLab Bot's avatar GitLab Bot
Browse files

Add latest changes from gitlab-org/gitlab@master

parent 93c6764d
No related branches found
No related tags found
No related merge requests found
Showing
with 471 additions and 3 deletions
# frozen_string_literal: true
require 'spec_helper'
describe SnippetPresenter do
include Gitlab::Routing.url_helpers
let_it_be(:user) { create(:user) }
let_it_be(:personal_snippet) { create(:personal_snippet, author: user) }
let_it_be(:project_snippet) { create(:project_snippet, author: user) }
let(:project) { project_snippet.project }
let(:presenter) { described_class.new(snippet, current_user: user) }
before do
project.add_developer(user)
end
describe '#web_url' do
subject { presenter.web_url }
context 'with PersonalSnippet' do
let(:snippet) { personal_snippet }
it 'returns snippet web url' do
expect(subject).to match "/snippets/#{snippet.id}"
end
end
context 'with ProjectSnippet' do
let(:snippet) { project_snippet }
it 'returns snippet web url' do
expect(subject).to match "/#{project.full_path}/snippets/#{snippet.id}"
end
end
end
describe '#raw_url' do
subject { presenter.raw_url }
context 'with PersonalSnippet' do
let(:snippet) { personal_snippet }
it 'returns snippet web url' do
expect(subject).to match "/snippets/#{snippet.id}/raw"
end
end
context 'with ProjectSnippet' do
let(:snippet) { project_snippet }
it 'returns snippet web url' do
expect(subject).to match "/#{project.full_path}/snippets/#{snippet.id}/raw"
end
end
end
describe '#can_read_snippet?' do
subject { presenter.can_read_snippet? }
context 'with PersonalSnippet' do
let(:snippet) { personal_snippet }
it 'checks read_personal_snippet' do
expect(presenter).to receive(:can?).with(user, :read_personal_snippet, snippet)
subject
end
end
context 'with ProjectSnippet' do
let(:snippet) { project_snippet }
it 'checks read_project_snippet ' do
expect(presenter).to receive(:can?).with(user, :read_project_snippet, snippet)
subject
end
end
end
describe '#can_update_snippet?' do
subject { presenter.can_update_snippet? }
context 'with PersonalSnippet' do
let(:snippet) { personal_snippet }
it 'checks update_personal_snippet' do
expect(presenter).to receive(:can?).with(user, :update_personal_snippet, snippet)
subject
end
end
context 'with ProjectSnippet' do
let(:snippet) { project_snippet }
it 'checks update_project_snippet ' do
expect(presenter).to receive(:can?).with(user, :update_project_snippet, snippet)
subject
end
end
end
describe '#can_admin_snippet?' do
subject { presenter.can_admin_snippet? }
context 'with PersonalSnippet' do
let(:snippet) { personal_snippet }
it 'checks admin_personal_snippet' do
expect(presenter).to receive(:can?).with(user, :admin_personal_snippet, snippet)
subject
end
end
context 'with ProjectSnippet' do
let(:snippet) { project_snippet }
it 'checks admin_project_snippet ' do
expect(presenter).to receive(:can?).with(user, :admin_project_snippet, snippet)
subject
end
end
end
end
Loading
Loading
@@ -92,7 +92,7 @@ describe API::Notes do
end
 
context "current user can view the note" do
it "returns an empty array" do
it "returns a non-empty array" do
get api("/projects/#{ext_proj.id}/issues/#{ext_issue.iid}/notes", private_user)
 
expect(response).to have_gitlab_http_status(200)
Loading
Loading
Loading
Loading
@@ -62,4 +62,12 @@ describe EnvironmentEntity do
end
end
end
context 'with auto_stop_in' do
let(:environment) { create(:environment, :will_auto_stop) }
it 'exposes auto stop related information' do
expect(subject).to include(:cancel_auto_stop_path, :auto_stop_at)
end
end
end
Loading
Loading
@@ -781,6 +781,25 @@ describe Ci::CreatePipelineService do
end
end
 
context 'with environment with auto_stop_in' do
before do
config = YAML.dump(
deploy: {
environment: { name: "review/$CI_COMMIT_REF_NAME", auto_stop_in: '1 day' },
script: 'ls'
})
stub_ci_pipeline_yaml_file(config)
end
it 'creates the environment with auto stop in' do
result = execute_service
expect(result).to be_persisted
expect(result.builds.first.options[:environment][:auto_stop_in]).to eq('1 day')
end
end
context 'with environment name including persisted variables' do
before do
config = YAML.dump(
Loading
Loading
Loading
Loading
@@ -115,6 +115,21 @@ describe Deployments::AfterCreateService do
expect(subject.environment.external_url).to eq('http://master.review-apps.gitlab.com')
end
end
context 'when auto_stop_in are used' do
let(:options) do
{ name: 'production', auto_stop_in: '1 day' }
end
it 'renews auto stop at' do
Timecop.freeze do
environment.update!(auto_stop_at: nil)
expect { subject.execute }
.to change { environment.reset.auto_stop_at&.round }.from(nil).to(1.day.since.round)
end
end
end
end
 
describe '#expanded_environment_url' do
Loading
Loading
# frozen_string_literal: true
require 'spec_helper'
describe Environments::ResetAutoStopService do
let_it_be(:project) { create(:project) }
let_it_be(:developer) { create(:user).tap { |user| project.add_developer(user) } }
let_it_be(:reporter) { create(:user).tap { |user| project.add_reporter(user) } }
let(:user) { developer }
let(:service) { described_class.new(project, user) }
describe '#execute' do
subject { service.execute(environment) }
context 'when environment will be stopped automatically' do
let(:environment) { create(:environment, :will_auto_stop, project: project) }
it 'resets auto stop' do
expect(environment).to receive(:reset_auto_stop).and_call_original
expect(subject[:status]).to eq(:success)
end
context 'when failed to reset auto stop' do
before do
expect(environment).to receive(:reset_auto_stop) { false }
end
it 'returns error' do
expect(subject[:status]).to eq(:error)
expect(subject[:message]).to eq('Failed to cancel auto stop because failed to update the environment.')
end
end
context 'when user is reporter' do
let(:user) { reporter }
it 'returns error' do
expect(subject[:status]).to eq(:error)
expect(subject[:message]).to eq('Failed to cancel auto stop because you do not have permission to update the environment.')
end
end
end
context 'when environment will not be stopped automatically' do
let(:environment) { create(:environment, project: project) }
it 'returns error' do
expect(subject[:status]).to eq(:error)
expect(subject[:message]).to eq('Failed to cancel auto stop because the environment is not set as auto stop.')
end
end
end
end
Loading
Loading
@@ -210,6 +210,18 @@ describe NotificationService, :mailer do
end
end
 
describe 'AccessToken' do
describe '#access_token_about_to_expire' do
let_it_be(:user) { create(:user) }
it 'sends email to the token owner' do
expect(notification.access_token_about_to_expire(user)).to be_truthy
should_email user
end
end
end
describe 'Notes' do
context 'issue note' do
let(:project) { create(:project, :private) }
Loading
Loading
Loading
Loading
@@ -39,12 +39,13 @@ RSpec.shared_context 'ProjectPolicy context' do
update_pipeline create_merge_request_from create_wiki push_code
resolve_note create_container_image update_container_image
create_environment create_deployment update_deployment create_release update_release
update_environment
]
end
 
let(:base_maintainer_permissions) do
%i[
push_to_delete_protected_branch update_project_snippet update_environment
push_to_delete_protected_branch update_project_snippet
admin_project_snippet admin_project_member admin_note admin_wiki admin_project
admin_commit_status admin_build admin_container_image
admin_pipeline admin_environment admin_deployment destroy_release add_cluster
Loading
Loading
# frozen_string_literal: true
shared_examples_for 'successful response for #cancel_auto_stop' do
include GitlabRoutingHelper
context 'when request is html' do
let(:params) { environment_params(format: :html) }
it 'redirects to show page' do
subject
expect(response).to redirect_to(environment_path(environment))
expect(flash[:notice]).to eq('Auto stop successfully canceled.')
end
it 'expires etag caching' do
expect_next_instance_of(Gitlab::EtagCaching::Store) do |etag_caching|
expect(etag_caching).to receive(:touch).with(project_environments_path(project, format: :json))
end
subject
end
end
context 'when request is js' do
let(:params) { environment_params(format: :json) }
it 'responds as ok' do
subject
expect(response).to have_gitlab_http_status(:ok)
expect(json_response['message']).to eq('Auto stop successfully canceled.')
end
it 'expires etag caching' do
expect_next_instance_of(Gitlab::EtagCaching::Store) do |etag_caching|
expect(etag_caching).to receive(:touch).with(project_environments_path(project, format: :json))
end
subject
end
end
end
shared_examples_for 'failed response for #cancel_auto_stop' do
context 'when request is html' do
let(:params) { environment_params(format: :html) }
it 'redirects to show page' do
subject
expect(response).to redirect_to(environment_path(environment))
expect(flash[:alert]).to eq("Failed to cancel auto stop because #{message}.")
end
end
context 'when request is js' do
let(:params) { environment_params(format: :json) }
it 'responds as unprocessable entity' do
subject
expect(response).to have_gitlab_http_status(:unprocessable_entity)
expect(json_response['message']).to eq("Failed to cancel auto stop because #{message}.")
end
end
end
Loading
Loading
@@ -32,7 +32,7 @@ RSpec.shared_examples 'restores project successfully' do |**results|
 
it 'does not set params that are excluded from import_export settings' do
expect(project.import_type).to be_nil
expect(project.creator_id).not_to eq 123
expect(project.creator_id).not_to eq 999
end
 
it 'records exact number of import failures' do
Loading
Loading
Loading
Loading
@@ -8,6 +8,7 @@ describe 'projects/pages_domains/show' do
before do
assign(:project, project)
assign(:domain, domain)
stub_pages_setting(external_https: true)
end
 
context 'when auto_ssl is enabled' do
Loading
Loading
# frozen_string_literal: true
require 'spec_helper'
describe Clusters::Applications::ActivateServiceWorker, '#perform' do
context 'cluster exists' do
describe 'prometheus service' do
let(:service_name) { 'prometheus' }
before do
create(:clusters_applications_prometheus, :installed, cluster: cluster)
end
context 'cluster type: group' do
let(:group) { create(:group) }
let(:project) { create(:project, group: group) }
let(:cluster) { create(:cluster_for_group, :with_installed_helm, groups: [group]) }
it 'ensures Prometheus service is activated' do
expect { described_class.new.perform(cluster.id, service_name) }
.to change { project.reload.prometheus_service&.active }.from(nil).to(true)
end
end
context 'cluster type: project' do
let(:project) { create(:project) }
let(:cluster) { create(:cluster, :with_installed_helm, projects: [project]) }
it 'ensures Prometheus service is activated' do
expect { described_class.new.perform(cluster.id, service_name) }
.to change { project.reload.prometheus_service&.active }.from(nil).to(true)
end
end
context 'cluster type: instance' do
let(:project) { create(:project) }
let(:cluster) { create(:cluster, :instance) }
it 'ensures Prometheus service is activated' do
expect { described_class.new.perform(cluster.id, service_name) }
.to change { project.reload.prometheus_service&.active }.from(nil).to(true)
end
end
end
end
context 'cluster does not exist' do
it 'does not raise Record Not Found error' do
expect { described_class.new.perform(0, 'ignored in this context') }.not_to raise_error(ActiveRecord::RecordNotFound)
end
end
end
# frozen_string_literal: true
require 'spec_helper'
describe Clusters::Applications::DeactivateServiceWorker, '#perform' do
context 'cluster exists' do
describe 'prometheus service' do
let(:service_name) { 'prometheus' }
let!(:application) { create(:clusters_applications_prometheus, :installed, cluster: cluster) }
context 'prometheus service exists' do
let!(:prometheus_service) { create(:prometheus_service, project: project, manual_configuration: false, active: true) }
before do
application.delete # prometheus service before save synchronises active stated with application existance.
end
context 'cluster type: group' do
let(:group) { create(:group) }
let(:project) { create(:project, group: group) }
let(:cluster) { create(:cluster_for_group, :with_installed_helm, groups: [group]) }
it 'ensures Prometheus service is deactivated' do
expect { described_class.new.perform(cluster.id, service_name) }
.to change { prometheus_service.reload.active }.from(true).to(false)
end
end
context 'cluster type: project' do
let(:project) { create(:project) }
let(:cluster) { create(:cluster, :with_installed_helm, projects: [project]) }
it 'ensures Prometheus service is deactivated' do
expect { described_class.new.perform(cluster.id, service_name) }
.to change { prometheus_service.reload.active }.from(true).to(false)
end
end
context 'cluster type: instance' do
let(:project) { create(:project) }
let(:cluster) { create(:cluster, :with_installed_helm, :instance) }
it 'ensures Prometheus service is deactivated' do
expect { described_class.new.perform(cluster.id, service_name) }
.to change { prometheus_service.reload.active }.from(true).to(false)
end
end
end
context 'prometheus service does not exist' do
context 'cluster type: project' do
let(:project) { create(:project) }
let(:cluster) { create(:cluster, :with_installed_helm, projects: [project]) }
it 'does not raise errors' do
expect { described_class.new.perform(cluster.id, service_name) }.not_to raise_error
end
end
end
end
end
context 'cluster does not exist' do
it 'raises Record Not Found error' do
expect { described_class.new.perform(0, 'ignored in this context') }.to raise_error(ActiveRecord::RecordNotFound)
end
end
end
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe PersonalAccessTokens::ExpiringWorker, type: :worker do
subject(:worker) { described_class.new }
describe '#perform' do
context 'when a token needs to be notified' do
let!(:pat) { create(:personal_access_token, expires_at: 5.days.from_now) }
it 'uses notification service to send the email' do
expect_next_instance_of(NotificationService) do |notification_service|
expect(notification_service).to receive(:access_token_about_to_expire).with(pat.user)
end
worker.perform
end
it 'marks the notification as delivered' do
expect { worker.perform }.to change { pat.reload.expire_notification_delivered }.from(false).to(true)
end
end
context 'when no tokens need to be notified' do
let!(:pat) { create(:personal_access_token, expires_at: 5.days.from_now, expire_notification_delivered: true) }
it "doesn't use notification service to send the email" do
expect_next_instance_of(NotificationService) do |notification_service|
expect(notification_service).not_to receive(:access_token_about_to_expire).with(pat.user)
end
worker.perform
end
it "doesn't change the notificationd delivered of the token" do
expect { worker.perform }.not_to change { pat.reload.expire_notification_delivered }
end
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment