From b6a7a4783435a7fa34f26dbf3b16ab8e7ed21b88 Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Sat, 19 Nov 2016 01:02:49 +0800 Subject: Add a lot of tests for scopes, feedback: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/7508#note_18622499 --- spec/factories/ci/builds.rb | 4 ++ spec/factories/commit_statuses.rb | 4 ++ spec/models/concerns/has_status_spec.rb | 77 +++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+) diff --git a/spec/factories/ci/builds.rb b/spec/factories/ci/builds.rb index 0c93bbdfe26..e7fe489e5eb 100644 --- a/spec/factories/ci/builds.rb +++ b/spec/factories/ci/builds.rb @@ -38,6 +38,10 @@ FactoryGirl.define do status 'canceled' end + trait :skipped do + status 'skipped' + end + trait :running do status 'running' end diff --git a/spec/factories/commit_statuses.rb b/spec/factories/commit_statuses.rb index 995f2080f10..756b341ecba 100644 --- a/spec/factories/commit_statuses.rb +++ b/spec/factories/commit_statuses.rb @@ -19,6 +19,10 @@ FactoryGirl.define do status 'canceled' end + trait :skipped do + status 'skipped' + end + trait :running do status 'running' end diff --git a/spec/models/concerns/has_status_spec.rb b/spec/models/concerns/has_status_spec.rb index 87bffbdc54e..24cd435256e 100644 --- a/spec/models/concerns/has_status_spec.rb +++ b/spec/models/concerns/has_status_spec.rb @@ -123,4 +123,81 @@ describe HasStatus do it_behaves_like 'build status summary' end end + + def self.random_type + %i[ci_build generic_commit_status].sample + end + + context 'for scope with one status' do + shared_examples 'having a job' do |type, status| + context "when it's #{status} #{type} job" do + let!(:job) { create(type, status) } + + describe ".#{status}" do + subject { CommitStatus.public_send(status).all } + + it { is_expected.to contain_exactly(job) } + end + + describe '.relevant' do + subject { CommitStatus.relevant.all } + + it do + case status + when :created + is_expected.to be_empty + else + is_expected.to contain_exactly(job) + end + end + end + end + end + + %i[created running pending success + failed canceled skipped].each do |status| + it_behaves_like 'having a job', random_type, status + end + end + + context 'for scope with more statuses' do + shared_examples 'having a job' do |type, status, excluded_status| + context "when it's #{status} #{type} job" do + let!(:job) { create(type, status) } + + it do + case status + when excluded_status + is_expected.to be_empty + else + is_expected.to contain_exactly(job) + end + end + end + end + + describe '.running_or_pending' do + subject { CommitStatus.running_or_pending } + + %i[running pending created].each do |status| + it_behaves_like 'having a job', random_type, status, :created + end + end + + describe '.finished' do + subject { CommitStatus.finished } + + %i[success failed canceled created].each do |status| + it_behaves_like 'having a job', random_type, status, :created + end + end + + describe '.cancelable' do + subject { CommitStatus.cancelable } + + %i[running pending created failed].each do |status| + it_behaves_like 'having a job', random_type, status, :failed + end + end + end end -- cgit v1.2.1