finding_entity_spec.rb 4.01 KB
Newer Older
1 2
# frozen_string_literal: true

3 4
require 'spec_helper'

5
RSpec.describe Vulnerabilities::FindingEntity do
6 7
  let_it_be(:user) { build(:user) }
  let_it_be(:project) { build(:project) }
8

9 10 11
  let(:scanner) { build(:vulnerabilities_scanner, project: project) }

  let(:scan) { build(:ci_reports_security_scan) }
12 13 14

  let(:identifiers) do
    [
15 16
      build(:vulnerabilities_identifier),
      build(:vulnerabilities_identifier)
17 18 19 20
    ]
  end

  let(:occurrence) do
21
    build(
22 23
      :vulnerabilities_occurrence,
      scanner: scanner,
24
      scan: scan,
25 26 27 28 29
      project: project,
      identifiers: identifiers
    )
  end

30 31
  let(:dismiss_feedback) do
    build(:vulnerability_feedback, :sast, :dismissal,
32 33 34
           project: project, project_fingerprint: occurrence.project_fingerprint)
  end

35 36
  let(:issue_feedback) do
    build(:vulnerability_feedback, :sast, :issue,
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
           project: project, project_fingerprint: occurrence.project_fingerprint)
  end

  let(:request) { double('request') }

  let(:entity) do
    described_class.represent(occurrence, request: request)
  end

  describe '#as_json' do
    subject { entity.as_json }

    before do
      allow(request).to receive(:current_user).and_return(user)
    end

    it 'contains required fields' do
      expect(subject).to include(:id)
      expect(subject).to include(:name, :report_type, :severity, :confidence, :project_fingerprint)
      expect(subject).to include(:scanner, :project, :identifiers)
      expect(subject).to include(:dismissal_feedback, :issue_feedback)
58
      expect(subject).to include(:description, :links, :location, :remediations, :solution, :evidence)
59
      expect(subject).to include(:blob_path, :request, :response)
60
      expect(subject).to include(:scan)
61 62 63 64 65 66 67
    end

    context 'when not allowed to admin vulnerability feedback' do
      before do
        project.add_guest(user)
      end

68
      it 'does not contain vulnerability feedback paths' do
Can Eldem's avatar
Can Eldem committed
69 70 71
        expect(subject[:create_vulnerability_feedback_issue_path]).to be_falsey
        expect(subject[:create_vulnerability_feedback_merge_request_path]).to be_falsey
        expect(subject[:create_vulnerability_feedback_dismissal_path]).to be_falsey
72 73 74 75 76 77 78 79
      end
    end

    context 'when allowed to admin vulnerability feedback' do
      before do
        project.add_developer(user)
      end

80
      it 'contains vulnerability feedback dismissal path' do
81
        expect(subject).to include(:create_vulnerability_feedback_dismissal_path)
82 83 84
      end

      it 'contains vulnerability feedback issue path' do
85
        expect(subject).to include(:create_vulnerability_feedback_issue_path)
86 87
      end

88
      it 'contains vulnerability feedback merge_request path' do
89
        expect(subject).to include(:create_vulnerability_feedback_merge_request_path)
90 91
      end

92 93 94 95
      context 'when disallowed to create issue' do
        let(:project) { create(:project, issues_access_level: ProjectFeature::DISABLED) }

        it 'does not contain vulnerability feedback issue path' do
Can Eldem's avatar
Can Eldem committed
96
          expect(subject[:create_vulnerability_feedback_issue_path]).to be_falsey
97 98 99
        end

        it 'contains vulnerability feedback dismissal path' do
100
          expect(subject).to include(:create_vulnerability_feedback_dismissal_path)
101
        end
102 103

        it 'contains vulnerability feedback merge_request path' do
104
          expect(subject).to include(:create_vulnerability_feedback_merge_request_path)
105 106 107 108 109 110 111
        end
      end

      context 'when disallowed to create merge_request' do
        let(:project) { create(:project, merge_requests_access_level: ProjectFeature::DISABLED) }

        it 'does not contain vulnerability feedback merge_request path' do
Can Eldem's avatar
Can Eldem committed
112
          expect(subject[:create_vulnerability_feedback_merge_request_path]).to be_falsey
113 114 115
        end

        it 'contains vulnerability feedback issue path' do
116
          expect(subject).to include(:create_vulnerability_feedback_issue_path)
117 118 119
        end

        it 'contains vulnerability feedback dismissal path' do
120
          expect(subject).to include(:create_vulnerability_feedback_dismissal_path)
121
        end
122 123 124 125
      end
    end
  end
end