2012-10-02 18:57:13 -04:00
require 'spec_helper'
describe Commit do
2014-01-22 14:03:52 -05:00
let ( :project ) { create :project }
2013-05-30 19:16:49 -04:00
let ( :commit ) { project . repository . commit }
2012-10-02 18:57:13 -04:00
2013-04-01 09:56:25 -04:00
describe '#title' do
it " returns no_commit_message when safe_message is blank " do
commit . stub ( :safe_message ) . and_return ( '' )
commit . title . should == " --no commit message "
end
2012-10-02 18:57:13 -04:00
2013-08-13 05:24:10 -04:00
it " truncates a message without a newline at 80 characters " do
2014-08-01 11:06:28 -04:00
message = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sodales id felis id blandit. Vivamus egestas lacinia lacus, sed rutrum mauris.'
2012-10-02 18:57:13 -04:00
2013-04-01 09:56:25 -04:00
commit . stub ( :safe_message ) . and_return ( message )
2013-08-13 05:24:10 -04:00
commit . title . should == " #{ message [ 0 .. 79 ] } … "
2013-04-01 09:56:25 -04:00
end
2012-10-02 18:57:13 -04:00
2013-04-01 09:56:25 -04:00
it " truncates a message with a newline before 80 characters at the newline " do
message = commit . safe_message . split ( " " ) . first
2012-10-02 18:57:13 -04:00
2013-04-01 09:56:25 -04:00
commit . stub ( :safe_message ) . and_return ( message + " \n " + message )
commit . title . should == message
end
2012-10-02 18:57:13 -04:00
2014-08-01 11:06:28 -04:00
it " does not truncates a message with a newline after 80 but less 100 characters " do
message = <<eos
Lorem ipsum dolor sit amet , consectetur adipiscing elit . Donec sodales id felis id blandit .
Vivamus egestas lacinia lacus , sed rutrum mauris .
eos
2012-10-02 18:57:13 -04:00
2013-04-01 09:56:25 -04:00
commit . stub ( :safe_message ) . and_return ( message )
2014-08-01 11:06:28 -04:00
commit . title . should == message . split ( " \n " ) . first
2012-10-02 18:57:13 -04:00
end
end
2013-01-03 12:11:14 -05:00
describe " delegation " do
subject { commit }
it { should respond_to ( :message ) }
it { should respond_to ( :authored_date ) }
it { should respond_to ( :committed_date ) }
2013-04-03 08:55:08 -04:00
it { should respond_to ( :committer_email ) }
it { should respond_to ( :author_email ) }
2013-01-03 12:11:14 -05:00
it { should respond_to ( :parents ) }
it { should respond_to ( :date ) }
it { should respond_to ( :diffs ) }
it { should respond_to ( :tree ) }
it { should respond_to ( :id ) }
it { should respond_to ( :to_patch ) }
end
2013-05-30 19:16:49 -04:00
describe '#closes_issues' do
let ( :issue ) { create :issue , project : project }
2014-10-03 01:48:35 -04:00
let ( :other_project ) { create :project , :public }
let ( :other_issue ) { create :issue , project : other_project }
2013-05-30 19:16:49 -04:00
it 'detects issues that this commit is marked as closing' do
2014-10-03 01:48:35 -04:00
commit . stub ( safe_message : " Fixes # #{ issue . iid } " )
2013-05-30 19:16:49 -04:00
commit . closes_issues ( project ) . should == [ issue ]
end
2014-10-03 01:48:35 -04:00
it 'does not detect issues from other projects' do
ext_ref = " #{ other_project . path_with_namespace } # #{ other_issue . iid } "
commit . stub ( safe_message : " Fixes #{ ext_ref } " )
commit . closes_issues ( project ) . should be_empty
end
2013-05-30 19:16:49 -04:00
end
it_behaves_like 'a mentionable' do
let ( :subject ) { commit }
let ( :mauthor ) { create :user , email : commit . author_email }
2014-10-10 09:30:14 -04:00
let ( :backref_text ) { " commit #{ subject . id } " }
2013-05-30 19:16:49 -04:00
let ( :set_mentionable_text ) { - > ( txt ) { subject . stub ( safe_message : txt ) } }
# Include the subject in the repository stub.
let ( :extra_commits ) { [ subject ] }
end
2012-10-02 18:57:13 -04:00
end