summaryrefslogtreecommitdiff
path: root/spec/models
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models')
-rw-r--r--spec/models/ci/build_spec.rb28
-rw-r--r--spec/models/commit_status_spec.rb1
-rw-r--r--spec/models/integrations/every_integration_spec.rb37
-rw-r--r--spec/models/issue_spec.rb40
-rw-r--r--spec/models/packages/package_file_spec.rb35
5 files changed, 126 insertions, 15 deletions
diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb
index 90298f0e973..88d2516d690 100644
--- a/spec/models/ci/build_spec.rb
+++ b/spec/models/ci/build_spec.rb
@@ -1048,7 +1048,27 @@ RSpec.describe Ci::Build do
allow_any_instance_of(Project).to receive(:jobs_cache_index).and_return(1)
end
- it { is_expected.to match([a_hash_including(key: "key-1"), a_hash_including(key: "key2-1")]) }
+ it { is_expected.to match([a_hash_including(key: 'key-1-non_protected'), a_hash_including(key: 'key2-1-non_protected')]) }
+
+ context 'when pipeline is on a protected ref' do
+ before do
+ allow(build.pipeline).to receive(:protected_ref?).and_return(true)
+ end
+
+ it do
+ is_expected.to all(a_hash_including(key: a_string_matching(/-protected$/)))
+ end
+ end
+
+ context 'when pipeline is not on a protected ref' do
+ before do
+ allow(build.pipeline).to receive(:protected_ref?).and_return(false)
+ end
+
+ it do
+ is_expected.to all(a_hash_including(key: a_string_matching(/-non_protected$/)))
+ end
+ end
end
context 'when project has jobs_cache_index' do
@@ -1056,7 +1076,7 @@ RSpec.describe Ci::Build do
allow_any_instance_of(Project).to receive(:jobs_cache_index).and_return(1)
end
- it { is_expected.to be_an(Array).and all(include(key: "key-1")) }
+ it { is_expected.to be_an(Array).and all(include(key: a_string_matching(/^key-1-(?>protected|non_protected)/))) }
end
context 'when project does not have jobs_cache_index' do
@@ -1064,7 +1084,9 @@ RSpec.describe Ci::Build do
allow_any_instance_of(Project).to receive(:jobs_cache_index).and_return(nil)
end
- it { is_expected.to eq(options[:cache]) }
+ it do
+ is_expected.to eq(options[:cache].map { |entry| entry.merge(key: "#{entry[:key]}-non_protected") })
+ end
end
end
diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb
index 86ee159b97e..7e35ede64d1 100644
--- a/spec/models/commit_status_spec.rb
+++ b/spec/models/commit_status_spec.rb
@@ -618,6 +618,7 @@ RSpec.describe CommitStatus do
'rspec:windows 10000 20000' | 'rspec:windows'
'rspec:windows 0 : / 1' | 'rspec:windows'
'rspec:windows 0 : / 1 name' | 'rspec:windows 0 : / 1 name'
+ 'rspec [inception: [something, other thing], value]' | 'rspec'
'0 1 name ruby' | '0 1 name ruby'
'0 :/ 1 name ruby' | '0 :/ 1 name ruby'
'rspec: [aws]' | 'rspec'
diff --git a/spec/models/integrations/every_integration_spec.rb b/spec/models/integrations/every_integration_spec.rb
new file mode 100644
index 00000000000..1b9c6539f44
--- /dev/null
+++ b/spec/models/integrations/every_integration_spec.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Every integration' do
+ all_integration_names = Integration.available_integration_names
+
+ all_integration_names.each do |integration_name|
+ describe integration_name do
+ let(:integration_class) { Integration.integration_name_to_model(integration_name) }
+ let(:integration) { integration_class.new }
+ let(:secret_name_pattern) { %r/token|key|password|passphrase|secret/.freeze }
+
+ context 'secret fields', :aggregate_failures do
+ it "uses type: 'password' for all secret fields" do
+ integration.fields.each do |field|
+ next unless secret_name_pattern.match?(field[:name])
+
+ expect(field[:type]).to eq('password'),
+ "Field '#{field[:name]}' should use type 'password'"
+ end
+ end
+
+ it 'defines non-empty titles and help texts for all secret fields' do
+ integration.fields.each do |field|
+ next unless field[:type] == 'password'
+
+ expect(field[:non_empty_password_title]).to be_present,
+ "Field '#{field[:name]}' should define :non_empty_password_title"
+ expect(field[:non_empty_password_help]).to be_present,
+ "Field '#{field[:name]}' should define :non_empty_password_help"
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb
index 5af42cc67ea..1b43e1e572e 100644
--- a/spec/models/issue_spec.rb
+++ b/spec/models/issue_spec.rb
@@ -724,14 +724,15 @@ RSpec.describe Issue do
describe '#participants' do
context 'using a public project' do
- let_it_be(:issue) { create(:issue, project: reusable_project) }
+ let_it_be(:public_project) { create(:project, :public) }
+ let_it_be(:issue) { create(:issue, project: public_project) }
let!(:note1) do
- create(:note_on_issue, noteable: issue, project: reusable_project, note: 'a')
+ create(:note_on_issue, noteable: issue, project: public_project, note: 'a')
end
let!(:note2) do
- create(:note_on_issue, noteable: issue, project: reusable_project, note: 'b')
+ create(:note_on_issue, noteable: issue, project: public_project, note: 'b')
end
it 'includes the issue author' do
@@ -801,20 +802,35 @@ RSpec.describe Issue do
context 'without a user' do
let(:user) { nil }
- before do
- project.project_feature.update_attribute(:issues_access_level, ProjectFeature::PUBLIC)
- end
+ context 'with issue available as public' do
+ before do
+ project.project_feature.update_attribute(:issues_access_level, ProjectFeature::PUBLIC)
+ end
+
+ it 'returns true when the issue is publicly visible' do
+ expect(issue).to receive(:publicly_visible?).and_return(true)
+
+ is_expected.to eq(true)
+ end
- it 'returns true when the issue is publicly visible' do
- expect(issue).to receive(:publicly_visible?).and_return(true)
+ it 'returns false when the issue is not publicly visible' do
+ expect(issue).to receive(:publicly_visible?).and_return(false)
- is_expected.to eq(true)
+ is_expected.to eq(false)
+ end
end
- it 'returns false when the issue is not publicly visible' do
- expect(issue).to receive(:publicly_visible?).and_return(false)
+ context 'with issues available only to team members in a public project' do
+ let(:public_project) { create(:project, :public) }
+ let(:issue) { build(:issue, project: public_project) }
- is_expected.to eq(false)
+ before do
+ public_project.project_feature.update_attribute(:issues_access_level, ProjectFeature::PRIVATE)
+ end
+
+ it 'returns false' do
+ is_expected.to be_falsey
+ end
end
end
diff --git a/spec/models/packages/package_file_spec.rb b/spec/models/packages/package_file_spec.rb
index fd453d8e5a9..0fe5c772261 100644
--- a/spec/models/packages/package_file_spec.rb
+++ b/spec/models/packages/package_file_spec.rb
@@ -23,6 +23,41 @@ RSpec.describe Packages::PackageFile, type: :model do
describe 'validations' do
it { is_expected.to validate_presence_of(:package) }
+
+ context 'with pypi package' do
+ let_it_be(:package) { create(:pypi_package) }
+
+ let(:package_file) { package.package_files.first }
+ let(:status) { :default }
+ let(:file_name) { 'foo' }
+ let(:file) { fixture_file_upload('spec/fixtures/dk.png') }
+ let(:params) { { file: file, file_name: file_name, status: status } }
+
+ subject { package.package_files.create!(params) }
+
+ context 'file_sha256' do
+ where(:sha256_value, :expected_success) do
+ 'a' * 64 | true
+ nil | true
+ 'a' * 63 | false
+ 'a' * 65 | false
+ 'a' * 63 + '%' | false
+ '' | false
+ end
+
+ with_them do
+ let(:params) { super().merge({ file_sha256: sha256_value }) }
+
+ it 'does not allow invalid sha256 characters' do
+ if expected_success
+ expect { subject }.not_to raise_error
+ else
+ expect { subject }.to raise_error(ActiveRecord::RecordInvalid, "Validation failed: File sha256 is invalid")
+ end
+ end
+ end
+ end
+ end
end
context 'with package filenames' do