diff options
Diffstat (limited to 'spec/models')
-rw-r--r-- | spec/models/build_spec.rb | 132 | ||||
-rw-r--r-- | spec/models/commit_spec.rb | 132 | ||||
-rw-r--r-- | spec/models/mail_service_spec.rb | 50 | ||||
-rw-r--r-- | spec/models/network_spec.rb | 32 | ||||
-rw-r--r-- | spec/models/project_services/hip_chat_message_spec.rb | 10 | ||||
-rw-r--r-- | spec/models/project_services/hip_chat_service_spec.rb | 8 | ||||
-rw-r--r-- | spec/models/project_services/slack_message_spec.rb | 46 | ||||
-rw-r--r-- | spec/models/project_services/slack_service_spec.rb | 10 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 96 | ||||
-rw-r--r-- | spec/models/runner_project_spec.rb | 16 | ||||
-rw-r--r-- | spec/models/runner_spec.rb | 12 | ||||
-rw-r--r-- | spec/models/service_spec.rb | 12 | ||||
-rw-r--r-- | spec/models/trigger_spec.rb | 4 | ||||
-rw-r--r-- | spec/models/user_spec.rb | 32 | ||||
-rw-r--r-- | spec/models/variable_spec.rb | 13 | ||||
-rw-r--r-- | spec/models/web_hook_spec.rb | 33 |
16 files changed, 304 insertions, 334 deletions
diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb index 7333981..cb080d2 100644 --- a/spec/models/build_spec.rb +++ b/spec/models/build_spec.rb @@ -30,26 +30,26 @@ describe Build do let(:commit) { FactoryGirl.create :commit, project: project } let(:build) { FactoryGirl.create :build, commit: commit } - it { should belong_to(:commit) } - it { should validate_presence_of :status } + it { is_expected.to belong_to(:commit) } + it { is_expected.to validate_presence_of :status } - it { should respond_to :success? } - it { should respond_to :failed? } - it { should respond_to :running? } - it { should respond_to :pending? } - it { should respond_to :trace_html } + it { is_expected.to respond_to :success? } + it { is_expected.to respond_to :failed? } + it { is_expected.to respond_to :running? } + it { is_expected.to respond_to :pending? } + it { is_expected.to respond_to :trace_html } - describe :first_pending do + describe '.first_pending' do let(:first) { FactoryGirl.create :build, commit: commit, status: 'pending', created_at: Date.yesterday } let(:second) { FactoryGirl.create :build, commit: commit, status: 'pending' } before { first; second } subject { Build.first_pending } - it { should be_a(Build) } - it('returns with the first pending build') { should eq(first) } + it { is_expected.to be_a(Build) } + it('returns with the first pending build') { is_expected.to eq(first) } end - describe :create_from do + describe '.create_from' do before do build.status = 'success' build.save @@ -63,20 +63,20 @@ describe Build do end end - describe :started? do + describe '#started?' do subject { build.started? } context 'without started_at' do before { build.started_at = nil } - it { should be_false } + it { is_expected.to be_falsey } end %w(running success failed).each do |status| context "if build status is #{status}" do before { build.status = status } - it { should be_true } + it { is_expected.to be_truthy } end end @@ -84,19 +84,19 @@ describe Build do context "if build status is #{status}" do before { build.status = status } - it { should be_false } + it { is_expected.to be_falsey } end end end - describe :active? do + describe '#active?' do subject { build.active? } %w(pending running).each do |state| context "if build.status is #{state}" do before { build.status = state } - it { should be_true } + it { is_expected.to be_truthy } end end @@ -104,19 +104,19 @@ describe Build do context "if build.status is #{state}" do before { build.status = state } - it { should be_false } + it { is_expected.to be_falsey } end end end - describe :complete? do + describe '#complete?' do subject { build.complete? } %w(success failed canceled).each do |state| context "if build.status is #{state}" do before { build.status = state } - it { should be_true } + it { is_expected.to be_truthy } end end @@ -124,12 +124,12 @@ describe Build do context "if build.status is #{state}" do before { build.status = state } - it { should be_false } + it { is_expected.to be_falsey } end end end - describe :ignored? do + describe '#ignored?' do subject { build.ignored? } context 'if build is not allowed to fail' do @@ -138,13 +138,13 @@ describe Build do context 'and build.status is success' do before { build.status = 'success' } - it { should be_false } + it { is_expected.to be_falsey } end context 'and build.status is failed' do before { build.status = 'failed' } - it { should be_false } + it { is_expected.to be_falsey } end end @@ -154,41 +154,41 @@ describe Build do context 'and build.status is success' do before { build.status = 'success' } - it { should be_false } + it { is_expected.to be_falsey } end context 'and build.status is failed' do before { build.status = 'failed' } - it { should be_true } + it { is_expected.to be_truthy } end end end - describe :trace do + describe '#trace' do subject { build.trace_html } - it { should be_empty } + it { is_expected.to be_empty } context 'if build.trace contains text' do let(:text) { 'example output' } before { build.trace = text } - it { should include(text) } - it { should have_at_least(text.length).items } + it { is_expected.to include(text) } + it { expect(subject.length).to be >= text.length } end end - describe :timeout do + describe '#timeout' do subject { build.timeout } - it { should eq(commit.project.timeout) } + it { is_expected.to eq(commit.project.timeout) } end - describe :duration do + describe '#duration' do subject { build.duration } - it { should eq(120.0) } + it { is_expected.to eq(120.0) } context 'if the building process has not started yet' do before do @@ -196,7 +196,7 @@ describe Build do build.finished_at = nil end - it { should be_nil } + it { is_expected.to be_nil } end context 'if the building process has started' do @@ -205,12 +205,12 @@ describe Build do build.finished_at = nil end - it { should be_a(Float) } - it { should > 0.0 } + it { is_expected.to be_a(Float) } + it { is_expected.to be > 0.0 } end end - describe :options do + describe '#options' do let(:options) { { :image => "ruby:2.1", @@ -221,90 +221,90 @@ describe Build do } subject { build.options } - it { should eq(options) } + it { is_expected.to eq(options) } end - describe :ref do + describe '#ref' do subject { build.ref } - it { should eq(commit.ref) } + it { is_expected.to eq(commit.ref) } end - describe :sha do + describe '#sha' do subject { build.sha } - it { should eq(commit.sha) } + it { is_expected.to eq(commit.sha) } end - describe :short_sha do + describe '#short_sha' do subject { build.short_sha } - it { should eq(commit.short_sha) } + it { is_expected.to eq(commit.short_sha) } end - describe :before_sha do + describe '#before_sha' do subject { build.before_sha } - it { should eq(commit.before_sha) } + it { is_expected.to eq(commit.before_sha) } end - describe :allow_git_fetch do + describe '#allow_git_fetch' do subject { build.allow_git_fetch } - it { should eq(project.allow_git_fetch) } + it { is_expected.to eq(project.allow_git_fetch) } end - describe :project do + describe '#project' do subject { build.project } - it { should eq(commit.project) } + it { is_expected.to eq(commit.project) } end - describe :project_id do + describe '#project_id' do subject { build.project_id } - it { should eq(commit.project_id) } + it { is_expected.to eq(commit.project_id) } end - describe :project_name do + describe '#project_name' do subject { build.project_name } - it { should eq(project.name) } + it { is_expected.to eq(project.name) } end - describe :repo_url do + describe '#repo_url' do subject { build.repo_url } - it { should eq(project.repo_url_with_auth) } + it { is_expected.to eq(project.repo_url_with_auth) } end - describe :extract_coverage do + describe '#extract_coverage' do context 'valid content & regex' do subject { build.extract_coverage('Coverage 1033 / 1051 LOC (98.29%) covered', '\(\d+.\d+\%\) covered') } - it { should eq(98.29) } + it { is_expected.to eq(98.29) } end context 'valid content & bad regex' do subject { build.extract_coverage('Coverage 1033 / 1051 LOC (98.29%) covered', 'very covered') } - it { should be_nil } + it { is_expected.to be_nil } end context 'no coverage content & regex' do subject { build.extract_coverage('No coverage for today :sad:', '\(\d+.\d+\%\) covered') } - it { should be_nil } + it { is_expected.to be_nil } end context 'multiple results in content & regex' do subject { build.extract_coverage(' (98.39%) covered. (98.29%) covered', '\(\d+.\d+\%\) covered') } - it { should eq(98.29) } + it { is_expected.to eq(98.29) } end end - describe :variables do + describe '#variables' do context 'returns variables' do subject { build.variables } @@ -314,7 +314,7 @@ describe Build do ] } - it { should eq(variables) } + it { is_expected.to eq(variables) } context 'and secure variables' do let(:secure_variables) { @@ -327,7 +327,7 @@ describe Build do build.project.variables << Variable.new(key: 'SECRET_KEY', value: 'secret_value') end - it { should eq(variables + secure_variables) } + it { is_expected.to eq(variables + secure_variables) } context 'and trigger variables' do let(:trigger) { FactoryGirl.create :trigger, project: project } @@ -342,7 +342,7 @@ describe Build do build.trigger_request = trigger_request end - it { should eq(variables + secure_variables + trigger_variables) } + it { is_expected.to eq(variables + secure_variables + trigger_variables) } end end end diff --git a/spec/models/commit_spec.rb b/spec/models/commit_spec.rb index 6f644d2..24b6520 100644 --- a/spec/models/commit_spec.rb +++ b/spec/models/commit_spec.rb @@ -23,29 +23,29 @@ describe Commit do let(:commit_with_project) { FactoryGirl.create :commit, project: project } let(:config_processor) { GitlabCiYamlProcessor.new(gitlab_ci_yaml) } - it { should belong_to(:project) } - it { should have_many(:builds) } - it { should validate_presence_of :before_sha } - it { should validate_presence_of :sha } - it { should validate_presence_of :ref } - it { should validate_presence_of :push_data } - - it { should respond_to :git_author_name } - it { should respond_to :git_author_email } - it { should respond_to :short_sha } - - describe :last_build do + it { is_expected.to belong_to(:project) } + it { is_expected.to have_many(:builds) } + it { is_expected.to validate_presence_of :before_sha } + it { is_expected.to validate_presence_of :sha } + it { is_expected.to validate_presence_of :ref } + it { is_expected.to validate_presence_of :push_data } + + it { is_expected.to respond_to :git_author_name } + it { is_expected.to respond_to :git_author_email } + it { is_expected.to respond_to :short_sha } + + describe '#last_build' do subject { commit.last_build } before do @first = FactoryGirl.create :build, commit: commit, created_at: Date.yesterday @second = FactoryGirl.create :build, commit: commit end - it { should be_a(Build) } - it('returns with the most recently created build') { should eq(@second) } + it { is_expected.to be_a(Build) } + it('returns with the most recently created build') { is_expected.to eq(@second) } end - describe :retry do + describe '#retry' do before do @first = FactoryGirl.create :build, commit: commit, created_at: Date.yesterday @second = FactoryGirl.create :build, commit: commit @@ -58,7 +58,7 @@ describe Commit do end end - describe :project_recipients do + describe '#project_recipients' do context 'always sending notification' do it 'should return commit_pusher_email as only recipient when no additional recipients are given' do @@ -67,8 +67,8 @@ describe Commit do email_recipients: '' commit = FactoryGirl.create :commit, project: project expected = 'commit_pusher_email' - commit.stub(:push_data) { { user_email: expected } } - commit.project_recipients.should == [expected] + allow(commit).to receive(:push_data) { { user_email: expected } } + expect(commit.project_recipients).to eq [expected] end it 'should return commit_pusher_email and additional recipients' do @@ -77,8 +77,8 @@ describe Commit do email_recipients: 'rec1 rec2' commit = FactoryGirl.create :commit, project: project expected = 'commit_pusher_email' - commit.stub(:push_data) { { user_email: expected } } - commit.project_recipients.should == ['rec1', 'rec2', expected] + allow(commit).to receive(:push_data) { { user_email: expected } } + expect(commit.project_recipients).to eq ['rec1', 'rec2', expected] end it 'should return recipients' do @@ -86,7 +86,7 @@ describe Commit do email_add_pusher: false, email_recipients: 'rec1 rec2' commit = FactoryGirl.create :commit, project: project - commit.project_recipients.should == ['rec1', 'rec2'] + expect(commit.project_recipients).to eq ['rec1', 'rec2'] end it 'should return unique recipients only' do @@ -95,76 +95,76 @@ describe Commit do email_recipients: 'rec1 rec1 rec2' commit = FactoryGirl.create :commit, project: project expected = 'rec2' - commit.stub(:push_data) { { user_email: expected } } - commit.project_recipients.should == ['rec1', 'rec2'] + allow(commit).to receive(:push_data) { { user_email: expected } } + expect(commit.project_recipients).to eq ['rec1', 'rec2'] end end end - describe :valid_commit_sha do + describe '#valid_commit_sha' do context 'commit.sha can not start with 00000000' do before do commit.sha = '0' * 40 commit.valid_commit_sha end - it('commit errors should not be empty') { commit.errors.should_not be_empty } + it('commit errors should not be empty') { expect(commit.errors).not_to be_empty } end end - describe :compare? do + describe '#compare?' do subject { commit_with_project.compare? } context 'if commit.before_sha are not nil' do - it { should be_true } + it { is_expected.to be_truthy } end end - describe :short_sha do + describe '#short_before_sha' do subject { commit.short_before_sha } - it { should have(8).items } - it { commit.before_sha.should start_with(subject) } + it { expect(subject.length).to eq 8 } + it { expect(commit.before_sha).to start_with(subject) } end - describe :short_sha do + describe '#short_sha' do subject { commit.short_sha } - it { should have(8).items } - it { commit.sha.should start_with(subject) } + it { expect(subject.length).to eq 8 } + it { expect(commit.sha).to start_with(subject) } end - describe :create_next_builds do + describe '#create_next_builds' do before do - commit.stub(:config_processor).and_return(config_processor) + allow(commit).to receive(:config_processor).and_return(config_processor) end it "creates builds for next type" do - commit.create_builds.should be_true + expect(commit.create_builds).to be_truthy commit.builds.reload - commit.builds.size.should == 2 + expect(commit.builds.size).to eq 2 - commit.create_next_builds(nil).should be_true + expect(commit.create_next_builds(nil)).to be_truthy commit.builds.reload - commit.builds.size.should == 4 + expect(commit.builds.size).to eq 4 - commit.create_next_builds(nil).should be_true + expect(commit.create_next_builds(nil)).to be_truthy commit.builds.reload - commit.builds.size.should == 5 + expect(commit.builds.size).to eq 5 - commit.create_next_builds(nil).should be_false + expect(commit.create_next_builds(nil)).to be_falsey end end - describe :create_builds do + describe '#create_builds' do before do - commit.stub(:config_processor).and_return(config_processor) + allow(commit).to receive(:config_processor).and_return(config_processor) end it 'creates builds' do - commit.create_builds.should be_true + expect(commit.create_builds).to be_truthy commit.builds.reload - commit.builds.size.should == 2 + expect(commit.builds.size).to eq 2 end context 'for build triggers' do @@ -172,29 +172,29 @@ describe Commit do let(:trigger_request) { FactoryGirl.create :trigger_request, commit: commit, trigger: trigger } it 'creates builds' do - commit.create_builds(trigger_request).should be_true + expect(commit.create_builds(trigger_request)).to be_truthy commit.builds.reload - commit.builds.size.should == 2 + expect(commit.builds.size).to eq 2 end it 'rebuilds commit' do - commit.create_builds.should be_true + expect(commit.create_builds).to be_truthy commit.builds.reload - commit.builds.size.should == 2 + expect(commit.builds.size).to eq 2 - commit.create_builds(trigger_request).should be_true + expect(commit.create_builds(trigger_request)).to be_truthy commit.builds.reload - commit.builds.size.should == 4 + expect(commit.builds.size).to eq 4 end it 'creates next builds' do - commit.create_builds(trigger_request).should be_true + expect(commit.create_builds(trigger_request)).to be_truthy commit.builds.reload - commit.builds.size.should == 2 + expect(commit.builds.size).to eq 2 - commit.create_next_builds(trigger_request).should be_true + expect(commit.create_next_builds(trigger_request)).to be_truthy commit.builds.reload - commit.builds.size.should == 4 + expect(commit.builds.size).to eq 4 end context 'for [ci skip]' do @@ -204,11 +204,11 @@ describe Commit do end it 'rebuilds commit' do - commit.status.should == 'skipped' - commit.create_builds(trigger_request).should be_true + expect(commit.status).to eq 'skipped' + expect(commit.create_builds(trigger_request)).to be_truthy commit.builds.reload - commit.builds.size.should == 2 - commit.status.should == 'pending' + expect(commit.builds.size).to eq 2 + expect(commit.status).to eq 'pending' end end end @@ -222,13 +222,13 @@ describe Commit do build = FactoryGirl.create :build, commit: commit, finished_at: Time.now - 60 build1 = FactoryGirl.create :build, commit: commit, finished_at: Time.now - 120 - commit.finished_at.to_i.should == build.finished_at.to_i + expect(commit.finished_at.to_i).to eq build.finished_at.to_i end it "returns nil if there is no finished build" do build = FactoryGirl.create :not_started_build, commit: commit - commit.finished_at.should be_nil + expect(commit.finished_at).to be_nil end end @@ -239,26 +239,26 @@ describe Commit do it "calculates average when there are two builds with coverage" do FactoryGirl.create :build, name: "rspec", coverage: 30, commit: commit FactoryGirl.create :build, name: "rubocop", coverage: 40, commit: commit - commit.coverage.should == "35.00" + expect(commit.coverage).to eq "35.00" end it "calculates average when there are two builds with coverage and one with nil" do FactoryGirl.create :build, name: "rspec", coverage: 30, commit: commit FactoryGirl.create :build, name: "rubocop", coverage: 40, commit: commit FactoryGirl.create :build, commit: commit - commit.coverage.should == "35.00" + expect(commit.coverage).to eq "35.00" end it "calculates average when there are two builds with coverage and one is retried" do FactoryGirl.create :build, name: "rspec", coverage: 30, commit: commit FactoryGirl.create :build, name: "rubocop", coverage: 30, commit: commit FactoryGirl.create :build, name: "rubocop", coverage: 40, commit: commit - commit.coverage.should == "35.00" + expect(commit.coverage).to eq "35.00" end it "calculates average when there is one build without coverage" do FactoryGirl.create :build, commit: commit - commit.coverage.should be_nil + expect(commit.coverage).to be_nil end end end diff --git a/spec/models/mail_service_spec.rb b/spec/models/mail_service_spec.rb index d66a659..27803aa 100644 --- a/spec/models/mail_service_spec.rb +++ b/spec/models/mail_service_spec.rb @@ -16,7 +16,7 @@ require 'spec_helper' describe MailService do describe "Associations" do - it { should belong_to :project } + it { is_expected.to belong_to :project } end describe "Validations" do @@ -28,7 +28,7 @@ describe MailService do end describe 'Sends email for' do - let(:mail) { MailService.new } + let(:mail) { described_class.new } describe 'failed build' do let(:project) { FactoryGirl.create(:project, email_add_pusher: true) } @@ -36,9 +36,7 @@ describe MailService do let(:build) { FactoryGirl.create(:build, status: :failed, commit: commit) } before do - mail.stub( - project: project - ) + allow(mail).to receive_messages(project: project) end it do @@ -47,8 +45,8 @@ describe MailService do end def should_email(email) - Notify.should_receive(:build_fail_email).with(build.id, email) - Notify.should_not_receive(:build_success_email).with(build.id, email) + expect(Notify).to receive(:build_fail_email).with(build.id, email) + expect(Notify).not_to receive(:build_success_email).with(build.id, email) end end @@ -58,9 +56,7 @@ describe MailService do let(:build) { FactoryGirl.create(:build, status: :success, commit: commit) } before do - mail.stub( - project: project - ) + allow(mail).to receive_messages(project: project) end it do @@ -69,8 +65,8 @@ describe MailService do end def should_email(email) - Notify.should_receive(:build_success_email).with(build.id, email) - Notify.should_not_receive(:build_fail_email).with(build.id, email) + expect(Notify).to receive(:build_success_email).with(build.id, email) + expect(Notify).not_to receive(:build_fail_email).with(build.id, email) end end @@ -85,9 +81,7 @@ describe MailService do let(:build) { FactoryGirl.create(:build, status: :success, commit: commit) } before do - mail.stub( - project: project - ) + allow(mail).to receive_messages(project: project) end it do @@ -97,8 +91,8 @@ describe MailService do end def should_email(email) - Notify.should_receive(:build_success_email).with(build.id, email) - Notify.should_not_receive(:build_fail_email).with(build.id, email) + expect(Notify).to receive(:build_success_email).with(build.id, email) + expect(Notify).not_to receive(:build_fail_email).with(build.id, email) end end @@ -113,9 +107,7 @@ describe MailService do let(:build) { FactoryGirl.create(:build, status: :success, commit: commit) } before do - mail.stub( - project: project - ) + allow(mail).to receive_messages(project: project) end it do @@ -125,8 +117,8 @@ describe MailService do end def should_email(email) - Notify.should_not_receive(:build_success_email).with(build.id, email) - Notify.should_not_receive(:build_fail_email).with(build.id, email) + expect(Notify).not_to receive(:build_success_email).with(build.id, email) + expect(Notify).not_to receive(:build_fail_email).with(build.id, email) end end @@ -141,14 +133,12 @@ describe MailService do let(:build) { FactoryGirl.create(:build, status: :success, commit: commit) } before do - mail.stub( - project: project - ) + allow(mail).to receive_messages(project: project) build end it do - mail.can_test?.should == true + expect(mail.can_test?).to eq true end end @@ -163,9 +153,7 @@ describe MailService do let(:build) { FactoryGirl.create(:build, status: :failed, commit: commit) } before do - mail.stub( - project: project - ) + allow(mail).to receive_messages(project: project) end it do @@ -176,8 +164,8 @@ describe MailService do end def should_email(email) - Notify.should_not_receive(:build_success_email).with(build.id, email) - Notify.should_not_receive(:build_fail_email).with(build.id, email) + expect(Notify).not_to receive(:build_success_email).with(build.id, email) + expect(Notify).not_to receive(:build_fail_email).with(build.id, email) end end end diff --git a/spec/models/network_spec.rb b/spec/models/network_spec.rb index b80adba..9c40e32 100644 --- a/spec/models/network_spec.rb +++ b/spec/models/network_spec.rb @@ -1,54 +1,54 @@ require 'spec_helper' describe Network do - let(:network) { Network.new } + let(:network) { described_class.new } - describe :enable_ci do + describe '#enable_ci' do subject { network.enable_ci '', '', '' } context 'on success' do before do response = double - response.stub(:code) { 200 } - network.class.stub(:put) { response } + allow(response).to receive(:code) { 200 } + allow(network.class).to receive(:put) { response } end - it { should be_true } + it { is_expected.to be_truthy } end context 'on failure' do before do response = double - response.stub(:code) { 404 } - network.class.stub(:put) { response } + allow(response).to receive(:code) { 404 } + allow(network.class).to receive(:put) { response } end - it { should be_nil } + it { is_expected.to be_nil } end end - describe :disable_ci do + describe '#disable_ci' do let(:response) { double } subject { network.disable_ci '', '' } context 'on success' do let(:parsed_response) { 'parsed' } before do - response.stub(:code) { 200 } - response.stub(:parsed_response) { parsed_response } - network.class.stub(:delete) { response } + allow(response).to receive(:code) { 200 } + allow(response).to receive(:parsed_response) { parsed_response } + allow(network.class).to receive(:delete) { response } end - it { should equal(parsed_response) } + it { is_expected.to equal(parsed_response) } end context 'on failure' do before do - response.stub(:code) { 404 } - network.class.stub(:delete) { response } + allow(response).to receive(:code) { 404 } + allow(network.class).to receive(:delete) { response } end - it { should be_nil } + it { is_expected.to be_nil } end end end diff --git a/spec/models/project_services/hip_chat_message_spec.rb b/spec/models/project_services/hip_chat_message_spec.rb index f1ad875..db088c7 100644 --- a/spec/models/project_services/hip_chat_message_spec.rb +++ b/spec/models/project_services/hip_chat_message_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe HipChatMessage do - subject { HipChatMessage.new(build) } + subject { described_class.new(build) } let(:project) { FactoryGirl.create(:project) } @@ -18,7 +18,7 @@ describe HipChatMessage do build.update(status: "success") expect( subject.status_color ).to eq 'green' - expect( subject.notify? ).to be_false + expect( subject.notify? ).to be_falsey expect( subject.to_s ).to match(/Build '[^']+' #\d+/) expect( subject.to_s ).to match(/Successful in \d+ second\(s\)\./) end @@ -29,7 +29,7 @@ describe HipChatMessage do build.update(status: "failed") expect( subject.status_color ).to eq 'red' - expect( subject.notify? ).to be_true + expect( subject.notify? ).to be_truthy expect( subject.to_s ).to match(/Build '[^']+' #\d+/) expect( subject.to_s ).to match(/Failed in \d+ second\(s\)\./) end @@ -50,7 +50,7 @@ describe HipChatMessage do commit.reload expect( subject.status_color ).to eq 'green' - expect( subject.notify? ).to be_false + expect( subject.notify? ).to be_falsey expect( subject.to_s ).to match(/Commit #\d+/) expect( subject.to_s ).to match(/Successful in \d+ second\(s\)\./) end @@ -65,7 +65,7 @@ describe HipChatMessage do second_build.update(status: "failed") expect( subject.status_color ).to eq 'red' - expect( subject.notify? ).to be_true + expect( subject.notify? ).to be_truthy expect( subject.to_s ).to match(/Commit #\d+/) expect( subject.to_s ).to match(/Failed in \d+ second\(s\)\./) end diff --git a/spec/models/project_services/hip_chat_service_spec.rb b/spec/models/project_services/hip_chat_service_spec.rb index 37ce490..71cdf4f 100644 --- a/spec/models/project_services/hip_chat_service_spec.rb +++ b/spec/models/project_services/hip_chat_service_spec.rb @@ -24,22 +24,22 @@ describe HipChatService do subject.active = true end - it { should validate_presence_of :hipchat_room } - it { should validate_presence_of :hipchat_token } + it { is_expected.to validate_presence_of :hipchat_room } + it { is_expected.to validate_presence_of :hipchat_token } end end describe "Execute" do - let(:service) { HipChatService.new } + let(:service) { described_class.new } let(:project) { FactoryGirl.create :project } let(:commit) { FactoryGirl.create :commit, project: project } let(:build) { FactoryGirl.create :build, commit: commit, status: 'failed' } let(:api_url) { 'https://api.hipchat.com/v2/room/123/notification?auth_token=a1b2c3d4e5f6' } before do - service.stub( + allow(service).to receive_messages( project: project, project_id: project.id, notify_only_broken_builds: false, diff --git a/spec/models/project_services/slack_message_spec.rb b/spec/models/project_services/slack_message_spec.rb index 88e0f37..6bfdd48 100644 --- a/spec/models/project_services/slack_message_spec.rb +++ b/spec/models/project_services/slack_message_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe SlackMessage do - subject { SlackMessage.new(commit) } + subject { described_class.new(commit) } let(:project) { FactoryGirl.create :project } @@ -19,11 +19,11 @@ describe SlackMessage do it 'returns a message with succeeded build' do build.update(status: "success") - subject.color.should == color - subject.fallback.should include('Build') - subject.fallback.should include("\##{build.id}") - subject.fallback.should include('succeeded') - subject.attachments.first[:fields].should be_empty + expect(subject.color).to eq color + expect(subject.fallback).to include('Build') + expect(subject.fallback).to include("\##{build.id}") + expect(subject.fallback).to include('succeeded') + expect(subject.attachments.first[:fields]).to be_empty end end @@ -33,11 +33,11 @@ describe SlackMessage do it 'returns a message with failed build' do build.update(status: "failed") - subject.color.should == color - subject.fallback.should include('Build') - subject.fallback.should include("\##{build.id}") - subject.fallback.should include('failed') - subject.attachments.first[:fields].should be_empty + expect(subject.color).to eq color + expect(subject.fallback).to include('Build') + expect(subject.fallback).to include("\##{build.id}") + expect(subject.fallback).to include('failed') + expect(subject.attachments.first[:fields]).to be_empty end end end @@ -53,11 +53,11 @@ describe SlackMessage do commit.builds.update_all(status: "success") commit.reload - subject.color.should == color - subject.fallback.should include('Commit') - subject.fallback.should include("\##{commit.id}") - subject.fallback.should include('succeeded') - subject.attachments.first[:fields].should be_empty + expect(subject.color).to eq color + expect(subject.fallback).to include('Commit') + expect(subject.fallback).to include("\##{commit.id}") + expect(subject.fallback).to include('succeeded') + expect(subject.attachments.first[:fields]).to be_empty end end @@ -71,13 +71,13 @@ describe SlackMessage do first_build.update(status: "success") second_build.update(status: "failed") - subject.color.should == color - subject.fallback.should include('Commit') - subject.fallback.should include("\##{commit.id}") - subject.fallback.should include('failed') - subject.attachments.first[:fields].size.should == 1 - subject.attachments.first[:fields].first[:title].should == second_build.name - subject.attachments.first[:fields].first[:value].should include("\##{second_build.id}") + expect(subject.color).to eq color + expect(subject.fallback).to include('Commit') + expect(subject.fallback).to include("\##{commit.id}") + expect(subject.fallback).to include('failed') + expect(subject.attachments.first[:fields].size).to eq 1 + expect(subject.attachments.first[:fields].first[:title]).to eq second_build.name + expect(subject.attachments.first[:fields].first[:value]).to include("\##{second_build.id}") end end end diff --git a/spec/models/project_services/slack_service_spec.rb b/spec/models/project_services/slack_service_spec.rb index e1c1428..2a00415 100644 --- a/spec/models/project_services/slack_service_spec.rb +++ b/spec/models/project_services/slack_service_spec.rb @@ -16,7 +16,7 @@ require 'spec_helper' describe SlackService do describe "Associations" do - it { should belong_to :project } + it { is_expected.to belong_to :project } end describe "Validations" do @@ -25,12 +25,12 @@ describe SlackService do subject.active = true end - it { should validate_presence_of :webhook } + it { is_expected.to validate_presence_of :webhook } end end describe "Execute" do - let(:slack) { SlackService.new } + let(:slack) { described_class.new } let(:project) { FactoryGirl.create :project } let(:commit) { FactoryGirl.create :commit, project: project } let(:build) { FactoryGirl.create :build, commit: commit, status: 'failed' } @@ -38,7 +38,7 @@ describe SlackService do let(:notify_only_broken_builds) { false } before do - slack.stub( + allow(slack).to receive_messages( project: project, project_id: project.id, webhook: webhook_url, @@ -52,7 +52,7 @@ describe SlackService do slack.execute(build) SlackNotifierWorker.drain - WebMock.should have_requested(:post, webhook_url).once + expect(WebMock).to have_requested(:post, webhook_url).once end end end diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index b6027a8..fcd4ee7 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -30,21 +30,21 @@ require 'spec_helper' describe Project do subject { FactoryGirl.build :project } - it { should have_many(:commits) } + it { is_expected.to have_many(:commits) } - it { should validate_presence_of :name } - it { should validate_presence_of :timeout } - it { should validate_presence_of :default_ref } + it { is_expected.to validate_presence_of :name } + it { is_expected.to validate_presence_of :timeout } + it { is_expected.to validate_presence_of :default_ref } describe 'before_validation' do it 'should set an random token if none provided' do project = FactoryGirl.create :project_without_token - project.token.should_not == "" + expect(project.token).not_to eq "" end it 'should not set an random toke if one provided' do project = FactoryGirl.create :project - project.token.should == "iPWx6WM4lhHNedGfBpPJNP" + expect(project.token).to eq "iPWx6WM4lhHNedGfBpPJNP" end end @@ -57,7 +57,7 @@ describe Project do FactoryGirl.create :commit, committed_at: 1.hour.ago, project: newest_project FactoryGirl.create :commit, committed_at: 2.hour.ago, project: oldest_project - Project.ordered_by_last_commit_date.should == [newest_project, oldest_project, project_without_commits] + expect(described_class.ordered_by_last_commit_date).to eq [newest_project, oldest_project, project_without_commits] end end @@ -88,116 +88,116 @@ describe Project do FactoryGirl.create(:build, commit: commit) end - it { project.status.should == 'pending' } - it { project.last_commit.should be_kind_of(Commit) } - it { project.human_status.should == 'pending' } + it { expect(project.status).to eq 'pending' } + it { expect(project.last_commit).to be_kind_of(Commit) } + it { expect(project.human_status).to eq 'pending' } end end describe '#email_notification?' do it do project = FactoryGirl.create :project, email_add_pusher: true - project.email_notification?.should == true + expect(project.email_notification?).to eq true end it do project = FactoryGirl.create :project, email_add_pusher: false, email_recipients: 'test tesft' - project.email_notification?.should == true + expect(project.email_notification?).to eq true end it do project = FactoryGirl.create :project, email_add_pusher: false, email_recipients: '' - project.email_notification?.should == false + expect(project.email_notification?).to eq false end end describe '#broken_or_success?' do it { project = FactoryGirl.create :project, email_add_pusher: true - project.stub(:broken?).and_return(true) - project.stub(:success?).and_return(true) - project.broken_or_success?.should == true + allow(project).to receive(:broken?).and_return(true) + allow(project).to receive(:success?).and_return(true) + expect(project.broken_or_success?).to eq true } it { project = FactoryGirl.create :project, email_add_pusher: true - project.stub(:broken?).and_return(true) - project.stub(:success?).and_return(false) - project.broken_or_success?.should == true + allow(project).to receive(:broken?).and_return(true) + allow(project).to receive(:success?).and_return(false) + expect(project.broken_or_success?).to eq true } it { project = FactoryGirl.create :project, email_add_pusher: true - project.stub(:broken?).and_return(false) - project.stub(:success?).and_return(true) - project.broken_or_success?.should == true + allow(project).to receive(:broken?).and_return(false) + allow(project).to receive(:success?).and_return(true) + expect(project.broken_or_success?).to eq true } it { project = FactoryGirl.create :project, email_add_pusher: true - project.stub(:broken?).and_return(false) - project.stub(:success?).and_return(false) - project.broken_or_success?.should == false + allow(project).to receive(:broken?).and_return(false) + allow(project).to receive(:success?).and_return(false) + expect(project.broken_or_success?).to eq false } end - describe 'Project.parse' do + describe '.parse' do let(:project_dump) { YAML.load File.read(Rails.root.join('spec/support/gitlab_stubs/raw_project.yml')) } - let(:parsed_project) { Project.parse(project_dump) } + let(:parsed_project) { described_class.parse(project_dump) } - it { parsed_project.should be_valid } - it { parsed_project.should be_kind_of(Project) } - it { parsed_project.name.should eq("GitLab / api.gitlab.org") } - it { parsed_project.gitlab_id.should eq(189) } - it { parsed_project.gitlab_url.should eq("http://demo.gitlab.com/gitlab/api-gitlab-org") } + it { expect(parsed_project).to be_valid } + it { expect(parsed_project).to be_kind_of(described_class) } + it { expect(parsed_project.name).to eq("GitLab / api.gitlab.org") } + it { expect(parsed_project.gitlab_id).to eq(189) } + it { expect(parsed_project.gitlab_url).to eq("http://demo.gitlab.com/gitlab/api-gitlab-org") } it "parses plain hash" do - Project.parse(project_dump).name.should eq("GitLab / api.gitlab.org") + expect(described_class.parse(project_dump).name).to eq("GitLab / api.gitlab.org") end end - describe :repo_url_with_auth do + describe '#repo_url_with_auth' do let(:project) { FactoryGirl.create :project } subject { project.repo_url_with_auth } - it { should be_a(String) } - it { should end_with(".git") } - it { should start_with(project.gitlab_url[0..6]) } - it { should include(project.token) } - it { should include('gitlab-ci-token') } - it { should include(project.gitlab_url[7..-1]) } + it { is_expected.to be_a(String) } + it { is_expected.to end_with(".git") } + it { is_expected.to start_with(project.gitlab_url[0..6]) } + it { is_expected.to include(project.token) } + it { is_expected.to include('gitlab-ci-token') } + it { is_expected.to include(project.gitlab_url[7..-1]) } end - describe :search do + describe '.search' do let!(:project) { FactoryGirl.create(:project, name: "foo") } - it { Project.search('fo').should include(project) } - it { Project.search('bar').should be_empty } + it { expect(described_class.search('fo')).to include(project) } + it { expect(described_class.search('bar')).to be_empty } end - describe :any_runners do + describe '#any_runners' do it "there are no runners available" do project = FactoryGirl.create(:project) - project.any_runners?.should be_false + expect(project.any_runners?).to be_falsey end it "there is a specific runner" do project = FactoryGirl.create(:project) project.runners << FactoryGirl.create(:specific_runner) - project.any_runners?.should be_true + expect(project.any_runners?).to be_truthy end it "there is a shared runner" do project = FactoryGirl.create(:project, shared_runners_enabled: true) FactoryGirl.create(:shared_runner) - project.any_runners?.should be_true + expect(project.any_runners?).to be_truthy end it "there is a shared runner, but they are prohibited to use" do project = FactoryGirl.create(:project) FactoryGirl.create(:shared_runner) - project.any_runners?.should be_false + expect(project.any_runners?).to be_falsey end end end diff --git a/spec/models/runner_project_spec.rb b/spec/models/runner_project_spec.rb deleted file mode 100644 index cbefb24..0000000 --- a/spec/models/runner_project_spec.rb +++ /dev/null @@ -1,16 +0,0 @@ -# == Schema Information -# -# Table name: runner_projects -# -# id :integer not null, primary key -# runner_id :integer not null -# project_id :integer not null -# created_at :datetime -# updated_at :datetime -# - -require 'spec_helper' - -describe RunnerProject do - pending "add some examples to (or delete) #{__FILE__}" -end diff --git a/spec/models/runner_spec.rb b/spec/models/runner_spec.rb index 6902c0a..650b3a1 100644 --- a/spec/models/runner_spec.rb +++ b/spec/models/runner_spec.rb @@ -37,15 +37,15 @@ describe Runner do end end - describe :assign_to do + describe '#assign_to' do let!(:project) { FactoryGirl.create :project } let!(:shared_runner) { FactoryGirl.create(:shared_runner) } before { shared_runner.assign_to(project) } - it { shared_runner.should be_specific } - it { shared_runner.projects.should == [project] } - it { shared_runner.only_for?(project).should be_true } + it { expect(shared_runner).to be_specific } + it { expect(shared_runner.projects).to eq [project] } + it { expect(shared_runner.only_for?(project)).to be_truthy } end describe "belongs_to_one_project?" do @@ -56,7 +56,7 @@ describe Runner do project.runners << runner project1.runners << runner - runner.belongs_to_one_project?.should be_false + expect(runner.belongs_to_one_project?).to be_falsey end it "returns true" do @@ -64,7 +64,7 @@ describe Runner do project = FactoryGirl.create(:project) project.runners << runner - runner.belongs_to_one_project?.should be_true + expect(runner.belongs_to_one_project?).to be_truthy end end end diff --git a/spec/models/service_spec.rb b/spec/models/service_spec.rb index 22a49e1..7d10551 100644 --- a/spec/models/service_spec.rb +++ b/spec/models/service_spec.rb @@ -17,7 +17,7 @@ require 'spec_helper' describe Service do describe "Associations" do - it { should belong_to :project } + it { is_expected.to belong_to :project } end describe "Mass assignment" do @@ -25,7 +25,7 @@ describe Service do describe "Test Button" do before do - @service = Service.new + @service = described_class.new end describe "Testable" do @@ -34,15 +34,13 @@ describe Service do let (:build) { FactoryGirl.create :build, commit: commit } before do - @service.stub( - project: project - ) + allow(@service).to receive_messages(project: project) build @testable = @service.can_test? end - describe :can_test do - it { @testable.should == true } + describe '#can_test' do + it { expect(@testable).to eq true } end end end diff --git a/spec/models/trigger_spec.rb b/spec/models/trigger_spec.rb index bba638e..4d58a4c 100644 --- a/spec/models/trigger_spec.rb +++ b/spec/models/trigger_spec.rb @@ -6,12 +6,12 @@ describe Trigger do describe 'before_validation' do it 'should set an random token if none provided' do trigger = FactoryGirl.create :trigger_without_token, project: project - trigger.token.should_not be_nil + expect(trigger.token).not_to be_nil end it 'should not set an random token if one provided' do trigger = FactoryGirl.create :trigger, project: project - trigger.token.should == 'token' + expect(trigger.token).to eq 'token' end end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 73a7a7d..affd2cb 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -4,7 +4,7 @@ describe User do describe "has_developer_access?" do before do - @user = User.new({}) + @user = described_class.new({}) end let(:project_with_owner_access) do @@ -40,39 +40,39 @@ describe User do end it "returns false for reporter" do - @user.stub(:project_info).and_return(project_with_reporter_access) + allow(@user).to receive(:project_info).and_return(project_with_reporter_access) - @user.has_developer_access?(1).should be_false + expect(@user.has_developer_access?(1)).to be_falsey end it "returns true for owner" do - @user.stub(:project_info).and_return(project_with_owner_access) + allow(@user).to receive(:project_info).and_return(project_with_owner_access) - @user.has_developer_access?(1).should be_true + expect(@user.has_developer_access?(1)).to be_truthy end end describe "authorized_projects" do - let (:user) { User.new({}) } + let (:user) { described_class.new({}) } before do FactoryGirl.create :project, gitlab_id: 1 FactoryGirl.create :project, gitlab_id: 2 gitlab_project = OpenStruct.new({id: 1}) gitlab_project1 = OpenStruct.new({id: 2}) - User.any_instance.stub(:gitlab_projects).and_return([gitlab_project, gitlab_project1]) + allow_any_instance_of(described_class).to receive(:gitlab_projects).and_return([gitlab_project, gitlab_project1]) end it "returns projects" do - User.any_instance.stub(:can_manage_project?).and_return(true) + allow_any_instance_of(described_class).to receive(:can_manage_project?).and_return(true) - user.authorized_projects.count.should == 2 + expect(user.authorized_projects.count).to eq 2 end it "empty list if user miss manage permission" do - User.any_instance.stub(:can_manage_project?).and_return(false) + allow_any_instance_of(described_class).to receive(:can_manage_project?).and_return(false) - user.authorized_projects.count.should == 0 + expect(user.authorized_projects.count).to eq 0 end end @@ -82,9 +82,9 @@ describe User do project1 = FactoryGirl.create :project, gitlab_id: 2 gitlab_project = OpenStruct.new({id: 1}) gitlab_project1 = OpenStruct.new({id: 2}) - User.any_instance.stub(:gitlab_projects).and_return([gitlab_project, gitlab_project1]) - User.any_instance.stub(:can_manage_project?).and_return(true) - user = User.new({}) + allow_any_instance_of(described_class).to receive(:gitlab_projects).and_return([gitlab_project, gitlab_project1]) + allow_any_instance_of(described_class).to receive(:can_manage_project?).and_return(true) + user = described_class.new({}) runner = FactoryGirl.create :specific_runner runner1 = FactoryGirl.create :specific_runner @@ -93,8 +93,8 @@ describe User do project.runners << runner project1.runners << runner1 - user.authorized_runners.should include(runner, runner1) - user.authorized_runners.should_not include(runner2) + expect(user.authorized_runners).to include(runner, runner1) + expect(user.authorized_runners).not_to include(runner2) end end end diff --git a/spec/models/variable_spec.rb b/spec/models/variable_spec.rb index 4575115..a41ba4e 100644 --- a/spec/models/variable_spec.rb +++ b/spec/models/variable_spec.rb @@ -14,7 +14,7 @@ require 'spec_helper' describe Variable do - subject { Variable.new } + subject { described_class.new } let(:secret_value) { 'secret' } @@ -22,23 +22,24 @@ describe Variable do subject.value = secret_value end - describe :value do + describe '#value' do it 'stores the encrypted value' do - subject.encrypted_value.should_not be_nil + expect(subject.encrypted_value).not_to be_nil end it 'stores an iv for value' do - subject.encrypted_value_iv.should_not be_nil + expect(subject.encrypted_value_iv).not_to be_nil end it 'stores a salt for value' do - subject.encrypted_value_salt.should_not be_nil + expect(subject.encrypted_value_salt).not_to be_nil end it 'fails to decrypt if iv is incorrect' do subject.encrypted_value_iv = nil subject.instance_variable_set(:@value, nil) - expect { subject.value }.to raise_error + expect { subject.value }. + to raise_error(OpenSSL::Cipher::CipherError, 'bad decrypt') end end end diff --git a/spec/models/web_hook_spec.rb b/spec/models/web_hook_spec.rb index 0f0f175..735440e 100644 --- a/spec/models/web_hook_spec.rb +++ b/spec/models/web_hook_spec.rb @@ -13,22 +13,22 @@ require 'spec_helper' describe WebHook do describe "Associations" do - it { should belong_to :project } + it { is_expected.to belong_to :project } end describe "Validations" do - it { should validate_presence_of(:url) } + it { is_expected.to validate_presence_of(:url) } context "url format" do - it { should allow_value("http://example.com").for(:url) } - it { should allow_value("https://excample.com").for(:url) } - it { should allow_value("http://test.com/api").for(:url) } - it { should allow_value("http://test.com/api?key=abc").for(:url) } - it { should allow_value("http://test.com/api?key=abc&type=def").for(:url) } - - it { should_not allow_value("example.com").for(:url) } - it { should_not allow_value("ftp://example.com").for(:url) } - it { should_not allow_value("herp-and-derp").for(:url) } + it { is_expected.to allow_value("http://example.com").for(:url) } + it { is_expected.to allow_value("https://excample.com").for(:url) } + it { is_expected.to allow_value("http://test.com/api").for(:url) } + it { is_expected.to allow_value("http://test.com/api?key=abc").for(:url) } + it { is_expected.to allow_value("http://test.com/api?key=abc&type=def").for(:url) } + + it { is_expected.not_to allow_value("example.com").for(:url) } + it { is_expected.not_to allow_value("ftp://example.com").for(:url) } + it { is_expected.not_to allow_value("herp-and-derp").for(:url) } end end @@ -43,22 +43,21 @@ describe WebHook do it "POSTs to the web hook URL" do @web_hook.execute(@data) - WebMock.should have_requested(:post, @web_hook.url).once + expect(WebMock).to have_requested(:post, @web_hook.url).once end it "POSTs the data as JSON" do json = @data.to_json @web_hook.execute(@data) - WebMock.should have_requested(:post, @web_hook.url).with(body: json).once + expect(WebMock).to have_requested(:post, @web_hook.url).with(body: json).once end it "catches exceptions" do - WebHook.should_receive(:post).and_raise("Some HTTP Post error") + expect(described_class).to receive(:post).and_raise("Some HTTP Post error") - lambda { - @web_hook.execute(@data) - }.should raise_error + expect { @web_hook.execute(@data) }. + to raise_error(RuntimeError, 'Some HTTP Post error') end end end |