summaryrefslogtreecommitdiff
path: root/spec/models
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-30 21:08:47 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-30 21:08:47 +0000
commitc8f773a8593926f4f2dec6f446a3b3e59e9c9909 (patch)
tree4e5ea1d3b861ff99015f6112da567de7873868aa /spec/models
parent929b887e5391dea7cb53b88b77b9a35351c87d99 (diff)
downloadgitlab-ce-c8f773a8593926f4f2dec6f446a3b3e59e9c9909.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/models')
-rw-r--r--spec/models/generic_commit_status_spec.rb74
-rw-r--r--spec/models/grafana_integration_spec.rb22
-rw-r--r--spec/models/note_spec.rb26
3 files changed, 115 insertions, 7 deletions
diff --git a/spec/models/generic_commit_status_spec.rb b/spec/models/generic_commit_status_spec.rb
index c851810ffb3..c8ed898122b 100644
--- a/spec/models/generic_commit_status_spec.rb
+++ b/spec/models/generic_commit_status_spec.rb
@@ -19,6 +19,74 @@ describe GenericCommitStatus do
it { is_expected.not_to allow_value('javascript:alert(1)').for(:target_url) }
end
+ describe '#name_uniqueness_across_types' do
+ let(:attributes) { {} }
+ let(:commit_status) { described_class.new(attributes) }
+ let(:status_name) { 'test-job' }
+
+ subject(:errors) { commit_status.errors[:name] }
+
+ shared_examples 'it does not have uniqueness errors' do
+ it 'does not return errors' do
+ commit_status.valid?
+
+ is_expected.to be_empty
+ end
+ end
+
+ context 'without attributes' do
+ it_behaves_like 'it does not have uniqueness errors'
+ end
+
+ context 'with only a pipeline' do
+ let(:attributes) { { pipeline: pipeline } }
+
+ context 'without name' do
+ it_behaves_like 'it does not have uniqueness errors'
+ end
+ end
+
+ context 'with only a name' do
+ let(:attributes) { { name: status_name } }
+
+ context 'without pipeline' do
+ it_behaves_like 'it does not have uniqueness errors'
+ end
+ end
+
+ context 'with pipeline and name' do
+ let(:attributes) do
+ {
+ pipeline: pipeline,
+ name: status_name
+ }
+ end
+
+ context 'without other statuses' do
+ it_behaves_like 'it does not have uniqueness errors'
+ end
+
+ context 'with generic statuses' do
+ before do
+ create(:generic_commit_status, pipeline: pipeline, name: status_name)
+ end
+
+ it_behaves_like 'it does not have uniqueness errors'
+ end
+
+ context 'with ci_build statuses' do
+ before do
+ create(:ci_build, pipeline: pipeline, name: status_name)
+ end
+
+ it 'returns name error' do
+ expect(commit_status).to be_invalid
+ is_expected.to include('has already been taken')
+ end
+ end
+ end
+ end
+
describe '#context' do
subject { generic_commit_status.context }
@@ -79,6 +147,12 @@ describe GenericCommitStatus do
it { is_expected.not_to be_nil }
end
+
+ describe '#stage_idx' do
+ subject { generic_commit_status.stage_idx }
+
+ it { is_expected.not_to be_nil }
+ end
end
describe '#present' do
diff --git a/spec/models/grafana_integration_spec.rb b/spec/models/grafana_integration_spec.rb
index 615865e17b9..662e8b1dd61 100644
--- a/spec/models/grafana_integration_spec.rb
+++ b/spec/models/grafana_integration_spec.rb
@@ -9,7 +9,7 @@ describe GrafanaIntegration do
describe 'validations' do
it { is_expected.to validate_presence_of(:project) }
- it { is_expected.to validate_presence_of(:token) }
+ it { is_expected.to validate_presence_of(:encrypted_token) }
it 'disallows invalid urls for grafana_url' do
unsafe_url = %{https://replaceme.com/'><script>alert(document.cookie)</script>}
@@ -66,4 +66,24 @@ describe GrafanaIntegration do
end
end
end
+
+ describe 'attribute encryption' do
+ subject(:grafana_integration) { create(:grafana_integration, token: 'super-secret') }
+
+ context 'token' do
+ it 'encrypts original value into encrypted_token attribute' do
+ expect(grafana_integration.encrypted_token).not_to be_nil
+ end
+
+ it 'locks access to raw value in private method', :aggregate_failures do
+ expect { grafana_integration.token }.to raise_error(NoMethodError, /private method .token. called/)
+ expect(grafana_integration.send(:token)).to eql('super-secret')
+ end
+
+ it 'prevents overriding token value with its encrypted or masked version', :aggregate_failures do
+ expect { grafana_integration.update(token: grafana_integration.encrypted_token) }.not_to change { grafana_integration.reload.send(:token) }
+ expect { grafana_integration.update(token: grafana_integration.masked_token) }.not_to change { grafana_integration.reload.send(:token) }
+ end
+ end
+ end
end
diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb
index 12a74632bb8..a50608a17b6 100644
--- a/spec/models/note_spec.rb
+++ b/spec/models/note_spec.rb
@@ -350,12 +350,12 @@ describe Note do
end
describe "cross_reference_not_visible_for?" do
- let(:private_user) { create(:user) }
- let(:private_project) { create(:project, namespace: private_user.namespace) { |p| p.add_maintainer(private_user) } }
- let(:private_issue) { create(:issue, project: private_project) }
+ let_it_be(:private_user) { create(:user) }
+ let_it_be(:private_project) { create(:project, namespace: private_user.namespace) { |p| p.add_maintainer(private_user) } }
+ let_it_be(:private_issue) { create(:issue, project: private_project) }
- let(:ext_proj) { create(:project, :public) }
- let(:ext_issue) { create(:issue, project: ext_proj) }
+ let_it_be(:ext_proj) { create(:project, :public) }
+ let_it_be(:ext_issue) { create(:issue, project: ext_proj) }
shared_examples "checks references" do
it "returns true" do
@@ -393,10 +393,24 @@ describe Note do
it_behaves_like "checks references"
end
- context "when there are two references in note" do
+ context "when there is a reference to a label" do
+ let_it_be(:private_label) { create(:label, project: private_project) }
let(:note) do
create :note,
noteable: ext_issue, project: ext_proj,
+ note: "added label #{private_label.to_reference(ext_proj)}",
+ system: true
+ end
+ let!(:system_note_metadata) { create(:system_note_metadata, note: note, action: :label) }
+
+ it_behaves_like "checks references"
+ end
+
+ context "when there are two references in note" do
+ let_it_be(:ext_issue2) { create(:issue, project: ext_proj) }
+ let(:note) do
+ create :note,
+ noteable: ext_issue2, project: ext_proj,
note: "mentioned in issue #{private_issue.to_reference(ext_proj)} and " \
"public issue #{ext_issue.to_reference(ext_proj)}",
system: true