summaryrefslogtreecommitdiff
path: root/spec/models
diff options
context:
space:
mode:
authorZeger-Jan van de Weg <git@zjvandeweg.nl>2017-08-24 13:01:33 +0200
committerZeger-Jan van de Weg <git@zjvandeweg.nl>2017-08-31 22:25:25 +0200
commit6ed490401f49a8941dc7a9e3757ec4012f14ef0b (patch)
tree058ba4c324208c486d2a8bd7326bcf0e292b32a7 /spec/models
parente58428382265f02639a7fc8c1bfcc6311564c0d0 (diff)
downloadgitlab-ce-6ed490401f49a8941dc7a9e3757ec4012f14ef0b.tar.gz
Implement the implied CI/CD config for AutoDevOps
Behind an application setting, which defaults to false, this commit implements the implied CI/CD config. Which means that in the case we can't find the `.gitlab-ci.yml` on the commit we want to start a pipeline for, we fall back to an implied configuration. For now the Bash template has been copied to `Auto-Devops.gitlab-ci.yml` so the tests actually work. Fixes #34777
Diffstat (limited to 'spec/models')
-rw-r--r--spec/models/application_setting_spec.rb1
-rw-r--r--spec/models/ci/pipeline_spec.rb44
-rw-r--r--spec/models/project_auto_devops_spec.rb12
3 files changed, 52 insertions, 5 deletions
diff --git a/spec/models/application_setting_spec.rb b/spec/models/application_setting_spec.rb
index 359753b600e..95ebd016064 100644
--- a/spec/models/application_setting_spec.rb
+++ b/spec/models/application_setting_spec.rb
@@ -5,6 +5,7 @@ describe ApplicationSetting do
it { expect(setting).to be_valid }
it { expect(setting.uuid).to be_present }
+ it { expect(setting).to have_db_column(:auto_devops_enabled) }
describe 'validations' do
let(:http) { 'http://example.com' }
diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb
index b84e3ff18e8..a7e0da04f55 100644
--- a/spec/models/ci/pipeline_spec.rb
+++ b/spec/models/ci/pipeline_spec.rb
@@ -784,13 +784,47 @@ describe Ci::Pipeline, :mailer do
end
describe '#ci_yaml_file' do
- it 'reports error if the file is not found' do
- allow(pipeline.project).to receive(:ci_config_path) { 'custom' }
+ let(:implied_yml) { Gitlab::Template::GitlabCiYmlTemplate.find('Auto-DevOps').content }
- pipeline.ci_yaml_file
+ context 'when AutoDevops is enabled' do
+ it 'returns the configuration if found' do
+ allow(pipeline.project.repository).to receive(:gitlab_ci_yml_for)
+ .and_return('config')
- expect(pipeline.yaml_errors)
- .to eq('Failed to load CI/CD config file at custom')
+ expect(pipeline.ci_yaml_file).to be_a(String)
+ expect(pipeline.ci_yaml_file).not_to eq(implied_yml)
+ expect(pipeline.yaml_errors).to be_nil
+ end
+
+ it 'returns the implied configuration when its not found' do
+ allow_any_instance_of(ApplicationSetting)
+ .to receive(:auto_devops_enabled?) { true }
+ allow(pipeline.project).to receive(:ci_config_path) { 'custom' }
+
+ expect(pipeline.ci_yaml_file).to eq(implied_yml)
+ end
+ end
+
+ context 'when AudoDevOps is disabled' do
+ context 'when an invalid path is given' do
+ it 'sets the yaml errors' do
+ allow(pipeline.project).to receive(:ci_config_path) { 'custom' }
+
+ expect(pipeline.ci_yaml_file).to be_nil
+ expect(pipeline.yaml_errors)
+ .to start_with('Failed to load CI/CD config file')
+ end
+ end
+
+ context 'when the config file can be found' do
+ it 'has no yaml_errors' do
+ allow(pipeline.project.repository).to receive(:gitlab_ci_yml_for)
+ .and_return('config')
+
+ expect(pipeline.ci_yaml_file).to eq('config')
+ expect(pipeline.yaml_errors).to be_nil
+ end
+ end
end
end
diff --git a/spec/models/project_auto_devops_spec.rb b/spec/models/project_auto_devops_spec.rb
new file mode 100644
index 00000000000..d534dacf079
--- /dev/null
+++ b/spec/models/project_auto_devops_spec.rb
@@ -0,0 +1,12 @@
+require 'spec_helper'
+
+describe ProjectAutoDevops, type: :model do
+ subject { build_stubbed(:project_auto_devops) }
+
+ it { is_expected.to belong_to(:project) }
+
+ it { is_expected.to respond_to(:created_at) }
+ it { is_expected.to respond_to(:updated_at) }
+
+ it { is_expected.to be_enabled }
+end