Extra tests inside shared_examples:

Feedback from:
https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/4093#note_12321421

The advantage of this is that tests are less about logic and more
straightforward, thus could be easier to reason about each individual
tests.

The disadvantage of this is that we write more duplicated codes and
once something changed we might need to change all places and it's
harder to reason all tests as a whole. Because now we need to look at
more places to figure out how it should work under another option!
This commit is contained in:
Lin Jen-Shin 2016-06-08 16:07:08 +08:00
parent 8b34687a36
commit b0908d8739

View file

@ -154,7 +154,7 @@ describe Ci::Runner, models: true do
runner.locked = true runner.locked = true
end end
shared_examples 'locked build picker' do |serve_matching_tags| shared_examples 'locked build picker' do
context 'when runner cannot pick untagged jobs' do context 'when runner cannot pick untagged jobs' do
before do before do
runner.run_untagged = false runner.run_untagged = false
@ -170,16 +170,6 @@ describe Ci::Runner, models: true do
runner.tag_list = ['bb', 'cc'] runner.tag_list = ['bb', 'cc']
end end
it "#{serve_matching_tags} handle it for matching tags" do
build.tag_list = ['bb']
expected = if serve_matching_tags
be_truthy
else
be_falsey
end
expect(runner.can_pick?(build)).to expected
end
it 'cannot handle it for builds without matching tags' do it 'cannot handle it for builds without matching tags' do
build.tag_list = ['aa'] build.tag_list = ['aa']
expect(runner.can_pick?(build)).to be_falsey expect(runner.can_pick?(build)).to be_falsey
@ -192,7 +182,18 @@ describe Ci::Runner, models: true do
expect(runner.can_pick?(build)).to be_truthy expect(runner.can_pick?(build)).to be_truthy
end end
it_behaves_like 'locked build picker', true it_behaves_like 'locked build picker'
context 'when having runner tags' do
before do
runner.tag_list = ['bb', 'cc']
build.tag_list = ['bb']
end
it 'can handle it for matching tags' do
expect(runner.can_pick?(build)).to be_truthy
end
end
end end
context 'serving a different project' do context 'serving a different project' do
@ -204,7 +205,18 @@ describe Ci::Runner, models: true do
expect(runner.can_pick?(build)).to be_falsey expect(runner.can_pick?(build)).to be_falsey
end end
it_behaves_like 'locked build picker', false it_behaves_like 'locked build picker'
context 'when having runner tags' do
before do
runner.tag_list = ['bb', 'cc']
build.tag_list = ['bb']
end
it 'cannot handle it for matching tags' do
expect(runner.can_pick?(build)).to be_falsey
end
end
end end
end end
end end