BigW Consortium Gitlab

job_entity_spec.rb 3.2 KB
Newer Older
1 2
require 'spec_helper'

3
describe JobEntity do
4
  let(:user) { create(:user) }
5 6
  let(:job) { create(:ci_build) }
  let(:project) { job.project }
7 8 9
  let(:request) { double('request') }

  before do
10
    stub_not_protect_default_branch
11
    allow(request).to receive(:current_user).and_return(user)
12 13

    project.add_developer(user)
14
  end
15

16
  let(:entity) do
17
    described_class.new(job, request: request)
18 19
  end

20 21
  subject { entity.as_json }

22
  it 'contains paths to job page action' do
23
    expect(subject).to include(:build_path)
24
  end
25

26 27 28 29 30
  it 'does not contain sensitive information' do
    expect(subject).not_to include(/token/)
    expect(subject).not_to include(/variables/)
  end

31
  it 'contains whether it is playable' do
32
    expect(subject[:playable]).to eq job.playable?
33 34
  end

35 36 37
  it 'contains timestamps' do
    expect(subject).to include(:created_at, :updated_at)
  end
38

39
  it 'contains details' do
40 41
    expect(subject).to include :status
    expect(subject[:status]).to include :icon, :favicon, :text, :label
42 43
  end

44
  context 'when job is retryable' do
45
    before do
46
      job.update(status: :failed)
47 48 49 50 51 52 53
    end

    it 'contains cancel path' do
      expect(subject).to include(:retry_path)
    end
  end

54
  context 'when job is cancelable' do
55
    before do
56
      job.update(status: :running)
57 58 59 60 61 62 63
    end

    it 'contains cancel path' do
      expect(subject).to include(:cancel_path)
    end
  end

64
  context 'when job is a regular job' do
65 66
    it 'does not contain path to play action' do
      expect(subject).not_to include(:play_path)
67
    end
68

69
    it 'is not a playable build' do
70 71
      expect(subject[:playable]).to be false
    end
72 73
  end

74 75
  context 'when job is a manual action' do
    let(:job) { create(:ci_build, :manual) }
76

77 78
    context 'when user is allowed to trigger action' do
      before do
79 80 81
        project.add_developer(user)

        create(:protected_branch, :developers_can_merge,
82
               name: job.ref, project: job.project)
83 84 85 86 87 88 89 90 91 92 93 94
      end

      it 'contains path to play action' do
        expect(subject).to include(:play_path)
      end

      it 'is a playable action' do
        expect(subject[:playable]).to be true
      end
    end

    context 'when user is not allowed to trigger action' do
95
      before do
96 97 98 99
        allow(job.project).to receive(:empty_repo?).and_return(false)

        create(:protected_branch, :no_one_can_push,
               name: job.ref, project: job.project)
100 101
      end

102 103 104 105 106 107 108
      it 'does not contain path to play action' do
        expect(subject).not_to include(:play_path)
      end

      it 'is not a playable action' do
        expect(subject[:playable]).to be false
      end
109 110
    end
  end
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131

  context 'when job is generic commit status' do
    let(:job) { create(:generic_commit_status, target_url: 'http://google.com') }

    it 'contains paths to target action' do
      expect(subject).to include(:build_path)
    end

    it 'does not contain paths to other action paths' do
      expect(subject).not_to include(:retry_path, :cancel_path, :play_path)
    end

    it 'contains timestamps' do
      expect(subject).to include(:created_at, :updated_at)
    end

    it 'contains details' do
      expect(subject).to include :status
      expect(subject[:status]).to include :icon, :favicon, :text, :label
    end
  end
132
end