diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-16 21:25:58 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-16 21:25:58 +0300 |
commit | a5f4bba440d7f9ea47046a0a561d49adf0a1e6d4 (patch) | |
tree | fb69158581673816a8cd895f9d352dcb3c678b1e /spec/models/project_services/jenkins_service_spec.rb | |
parent | d16b2e8639e99961de6ddc93909f3bb5c1445ba1 (diff) |
Add latest changes from gitlab-org/gitlab@14-0-stable-eev14.0.0-rc42
Diffstat (limited to 'spec/models/project_services/jenkins_service_spec.rb')
-rw-r--r-- | spec/models/project_services/jenkins_service_spec.rb | 255 |
1 files changed, 0 insertions, 255 deletions
diff --git a/spec/models/project_services/jenkins_service_spec.rb b/spec/models/project_services/jenkins_service_spec.rb deleted file mode 100644 index 4663e41736a..00000000000 --- a/spec/models/project_services/jenkins_service_spec.rb +++ /dev/null @@ -1,255 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe JenkinsService do - let(:project) { create(:project) } - let(:jenkins_url) { 'http://jenkins.example.com/' } - let(:jenkins_hook_url) { jenkins_url + 'project/my_project' } - let(:jenkins_username) { 'u$er name%2520' } - let(:jenkins_password) { 'pas$ word' } - - let(:jenkins_params) do - { - active: true, - project: project, - properties: { - password: jenkins_password, - username: jenkins_username, - jenkins_url: jenkins_url, - project_name: 'my_project' - } - } - end - - let(:jenkins_authorization) { "Basic " + ::Base64.strict_encode64(jenkins_username + ':' + jenkins_password) } - - describe 'Associations' do - it { is_expected.to belong_to :project } - it { is_expected.to have_one :service_hook } - end - - describe 'username validation' do - before do - @jenkins_service = described_class.create!( - active: active, - project: project, - properties: { - jenkins_url: 'http://jenkins.example.com/', - password: 'password', - username: 'username', - project_name: 'my_project' - } - ) - end - - subject { @jenkins_service } - - context 'when the service is active' do - let(:active) { true } - - context 'when password was not touched' do - before do - allow(subject).to receive(:password_touched?).and_return(false) - end - - it { is_expected.not_to validate_presence_of :username } - end - - context 'when password was touched' do - before do - allow(subject).to receive(:password_touched?).and_return(true) - end - - it { is_expected.to validate_presence_of :username } - end - - context 'when password is blank' do - it 'does not validate the username' do - expect(subject).not_to validate_presence_of :username - - subject.password = '' - subject.save! - end - end - end - - context 'when the service is inactive' do - let(:active) { false } - - it { is_expected.not_to validate_presence_of :username } - end - end - - describe '#hook_url' do - let(:username) { nil } - let(:password) { nil } - let(:jenkins_service) do - described_class.new( - project: project, - properties: { - jenkins_url: jenkins_url, - project_name: 'my_project', - username: username, - password: password - } - ) - end - - subject { jenkins_service.hook_url } - - context 'when the jenkins_url has no relative path' do - let(:jenkins_url) { 'http://jenkins.example.com/' } - - it { is_expected.to eq('http://jenkins.example.com/project/my_project') } - end - - context 'when the jenkins_url has relative path' do - let(:jenkins_url) { 'http://organization.example.com/jenkins' } - - it { is_expected.to eq('http://organization.example.com/jenkins/project/my_project') } - end - - context 'userinfo is missing and username and password are set' do - let(:jenkins_url) { 'http://organization.example.com/jenkins' } - let(:username) { 'u$ername' } - let(:password) { 'pas$ word' } - - it { is_expected.to eq('http://u%24ername:pas%24%20word@organization.example.com/jenkins/project/my_project') } - end - - context 'userinfo is provided and username and password are set' do - let(:jenkins_url) { 'http://u:p@organization.example.com/jenkins' } - let(:username) { 'username' } - let(:password) { 'password' } - - it { is_expected.to eq('http://username:password@organization.example.com/jenkins/project/my_project') } - end - - context 'userinfo is provided username and password are not set' do - let(:jenkins_url) { 'http://u:p@organization.example.com/jenkins' } - - it { is_expected.to eq('http://u:p@organization.example.com/jenkins/project/my_project') } - end - end - - describe '#test' do - it 'returns the right status' do - user = create(:user, username: 'username') - project = create(:project, name: 'project') - push_sample_data = Gitlab::DataBuilder::Push.build_sample(project, user) - jenkins_service = described_class.create!(jenkins_params) - stub_request(:post, jenkins_hook_url).with(headers: { 'Authorization' => jenkins_authorization }) - - result = jenkins_service.test(push_sample_data) - - expect(result).to eq({ success: true, result: '' }) - end - end - - describe '#execute' do - let(:user) { create(:user, username: 'username') } - let(:namespace) { create(:group, :private) } - let(:project) { create(:project, :private, name: 'project', namespace: namespace) } - let(:push_sample_data) { Gitlab::DataBuilder::Push.build_sample(project, user) } - let(:jenkins_service) { described_class.create!(jenkins_params) } - - before do - stub_request(:post, jenkins_hook_url) - end - - it 'invokes the Jenkins API' do - jenkins_service.execute(push_sample_data) - - expect(a_request(:post, jenkins_hook_url)).to have_been_made.once - end - - it 'adds default web hook headers to the request' do - jenkins_service.execute(push_sample_data) - - expect( - a_request(:post, jenkins_hook_url) - .with(headers: { 'X-Gitlab-Event' => 'Push Hook', 'Authorization' => jenkins_authorization }) - ).to have_been_made.once - end - - it 'request url contains properly serialized username and password' do - jenkins_service.execute(push_sample_data) - - expect( - a_request(:post, 'http://jenkins.example.com/project/my_project') - .with(headers: { 'Authorization' => jenkins_authorization }) - ).to have_been_made.once - end - end - - describe 'Stored password invalidation' do - let(:project) { create(:project) } - - context 'when a password was previously set' do - before do - @jenkins_service = described_class.create!( - project: project, - properties: { - jenkins_url: 'http://jenkins.example.com/', - username: 'jenkins', - password: 'password' - } - ) - end - - it 'resets password if url changed' do - @jenkins_service.jenkins_url = 'http://jenkins-edited.example.com/' - @jenkins_service.save! - expect(@jenkins_service.password).to be_nil - end - - it 'resets password if username is blank' do - @jenkins_service.username = '' - @jenkins_service.save! - expect(@jenkins_service.password).to be_nil - end - - it 'does not reset password if username changed' do - @jenkins_service.username = 'some_name' - @jenkins_service.save! - expect(@jenkins_service.password).to eq('password') - end - - it 'does not reset password if new url is set together with password, even if it\'s the same password' do - @jenkins_service.jenkins_url = 'http://jenkins_edited.example.com/' - @jenkins_service.password = 'password' - @jenkins_service.save! - expect(@jenkins_service.password).to eq('password') - expect(@jenkins_service.jenkins_url).to eq('http://jenkins_edited.example.com/') - end - - it 'resets password if url changed, even if setter called multiple times' do - @jenkins_service.jenkins_url = 'http://jenkins1.example.com/' - @jenkins_service.jenkins_url = 'http://jenkins1.example.com/' - @jenkins_service.save! - expect(@jenkins_service.password).to be_nil - end - end - - context 'when no password was previously set' do - before do - @jenkins_service = described_class.create!( - project: create(:project), - properties: { - jenkins_url: 'http://jenkins.example.com/', - username: 'jenkins' - } - ) - end - - it 'saves password if new url is set together with password' do - @jenkins_service.jenkins_url = 'http://jenkins_edited.example.com/' - @jenkins_service.password = 'password' - @jenkins_service.save! - expect(@jenkins_service.password).to eq('password') - expect(@jenkins_service.jenkins_url).to eq('http://jenkins_edited.example.com/') - end - end - end -end |