diff options
Diffstat (limited to 'spec/models/commit_spec.rb')
-rw-r--r-- | spec/models/commit_spec.rb | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/spec/models/commit_spec.rb b/spec/models/commit_spec.rb new file mode 100644 index 0000000..380a9b1 --- /dev/null +++ b/spec/models/commit_spec.rb @@ -0,0 +1,172 @@ +# == Schema Information +# +# Table name: commits +# +# id :integer not null, primary key +# project_id :integer +# ref :string(255) +# sha :string(255) +# before_sha :string(255) +# push_data :text +# created_at :datetime +# updated_at :datetime +# + +require 'spec_helper' + +describe Commit do + let(:project) { FactoryGirl.create :project } + let(:commit) { FactoryGirl.create :commit } + let(:commit_with_project) { FactoryGirl.create :commit, project: project } + + 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 } + + it { should allow_mass_assignment_of(:project_id) } + it { should allow_mass_assignment_of(:ref) } + it { should allow_mass_assignment_of(:sha) } + it { should allow_mass_assignment_of(:before_sha) } + it { should allow_mass_assignment_of(:push_data) } + it { should allow_mass_assignment_of(:status) } + it { should allow_mass_assignment_of(:project_name) } + + 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) } + end + + describe :ci_skip? do + let(:project) { FactoryGirl.create(:project) } + let(:commit) { FactoryGirl.create(:commit, project: project) } + + it 'true if commit message contains [ci skip]' do + commit.stub(:git_commit_message) { 'Small typo [ci skip]' } + commit.ci_skip?.should == true + end + + it 'false if commit message does not contain [ci skip]' do + commit.ci_skip?.should == false + end + end + + describe :project_recipients do + + context 'always sending notification' do + it 'should return git_author_email as only recipient when no additional recipients are given' do + project = FactoryGirl.create :project, + email_add_committer: true, + email_recipients: '' + commit = FactoryGirl.create :commit, project: project + expected = 'git_author_email' + commit.stub(:git_author_email) { expected } + commit.project_recipients.should == [expected] + end + + it 'should return git_author_email and additional recipients' do + project = FactoryGirl.create :project, + email_add_committer: true, + email_recipients: 'rec1 rec2' + commit = FactoryGirl.create :commit, project: project + expected = 'git_author_email' + commit.stub(:git_author_email) { expected } + commit.project_recipients.should == ['rec1', 'rec2', expected] + end + + it 'should return recipients' do + project = FactoryGirl.create :project, + email_add_committer: false, + email_recipients: 'rec1 rec2' + commit = FactoryGirl.create :commit, project: project + expected = 'git_author_email' + commit.stub(:git_author_email) { expected } + commit.project_recipients.should == ['rec1', 'rec2'] + end + + it 'should return unique recipients only' do + project = FactoryGirl.create :project, + email_add_committer: true, + email_recipients: 'rec1 rec1 rec2' + commit = FactoryGirl.create :commit, project: project + expected = 'rec2' + commit.stub(:git_author_email) { expected } + commit.project_recipients.should == ['rec1', 'rec2'] + end + end + end + + describe :valid_commit_sha do + context 'commit.sha can not start with 00000000' do + before do + commit.sha = '0' * 32 + commit.valid_commit_sha + end + + it('commit errors should not be empty') { commit.errors.should_not be_empty } + end + end + + describe :compare? do + subject { commit_with_project.compare? } + + context 'if project.gitlab_url and commit.before_sha are not nil' do + it { should be_true } + end + end + + describe :short_sha do + subject { commit.short_before_sha } + + it { should have(9).items } + it { commit.before_sha.should start_with(subject) } + end + + describe :short_sha do + subject { commit.short_sha } + + it { should have(9).items } + it { commit.sha.should start_with(subject) } + end + + describe :repo_url do + subject { commit_with_project.repo_url } + + 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]) } + end + + describe :gitlab? do + subject { commit_with_project.gitlab? } + + it { should eq(project.gitlab?) } + end + + describe :allow_git_fetch do + subject { commit_with_project.allow_git_fetch } + + it { should eq(project.allow_git_fetch) } + end + + describe :name do + subject { commit_with_project.project_name } + + it { should eq(project.name) } + end +end |