summaryrefslogtreecommitdiff
path: root/spec/services/register_build_service_spec.rb
blob: 4202335da17d16ac0ba5e427bdb231908b426445 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
require 'spec_helper'

describe RegisterBuildService do
  let!(:service) { described_class.new }
  let!(:project) { FactoryGirl.create :project }
  let!(:commit) { FactoryGirl.create :commit, project: project }
  let!(:pending_build) { FactoryGirl.create :build, project: project, commit: commit }
  let!(:shared_runner) { FactoryGirl.create(:runner, is_shared: true) }
  let!(:specific_runner) { FactoryGirl.create(:runner, is_shared: false) }

  before do
    specific_runner.assign_to(project)
  end

  describe '#execute' do
    context 'runner follow tag list' do
      it "picks build with the same tag" do
        pending_build.tag_list = ["linux"]
        pending_build.save
        specific_runner.tag_list = ["linux"]
        service.execute(specific_runner).should eq pending_build
      end

      it "does not pick build with different tag" do
        pending_build.tag_list = ["linux"]
        pending_build.save
        specific_runner.tag_list = ["win32"]
        service.execute(specific_runner).should be_falsey
      end

      it "picks build without tag" do
        service.execute(specific_runner).should eq pending_build
      end

      it "does not pick build with tag" do
        pending_build.tag_list = ["linux"]
        pending_build.save
        service.execute(specific_runner).should be_falsey
      end

      it "pick build without tag" do
        specific_runner.tag_list = ["win32"]
        service.execute(specific_runner).should eq pending_build
      end
    end

    context 'allow shared runners' do
      before do
        project.shared_runners_enabled = true
        project.save
      end

      context 'shared runner' do
        let(:build) { service.execute(shared_runner) }

        it { build.should be_kind_of(Build) }
        it { build.should be_valid }
        it { build.should be_running }
        it { build.runner.should eq shared_runner }
      end

      context 'specific runner' do
        let(:build) { service.execute(specific_runner) }

        it { build.should be_kind_of(Build) }
        it { build.should be_valid }
        it { build.should be_running }
        it { build.runner.should eq specific_runner }
      end
    end

    context 'disallow shared runners' do
      context 'shared runner' do
        let(:build) { service.execute(shared_runner) }

        it { build.should be_nil }
      end

      context 'specific runner' do
        let(:build) { service.execute(specific_runner) }

        it { build.should be_kind_of(Build) }
        it { build.should be_valid }
        it { build.should be_running }
        it { build.runner.should eq specific_runner }
      end
    end
  end
end