2014-09-02 18:07:02 +05:30
require 'spec_helper'
describe Commit do
2015-09-11 14:41:01 +05:30
let ( :project ) { create ( :project ) }
let ( :commit ) { project . commit }
describe 'modules' do
subject { described_class }
it { is_expected . to include_module ( Mentionable ) }
it { is_expected . to include_module ( Participable ) }
it { is_expected . to include_module ( Referable ) }
it { is_expected . to include_module ( StaticModel ) }
end
describe '#to_reference' do
it 'returns a String reference to the object' do
expect ( commit . to_reference ) . to eq commit . id
end
it 'supports a cross-project reference' do
cross = double ( 'project' )
expect ( commit . to_reference ( cross ) ) . to eq " #{ project . to_reference } @ #{ commit . id } "
end
end
2014-09-02 18:07:02 +05:30
describe '#title' do
it " returns no_commit_message when safe_message is blank " do
2015-04-26 12:48:37 +05:30
allow ( commit ) . to receive ( :safe_message ) . and_return ( '' )
expect ( commit . title ) . to eq ( " --no commit message " )
2014-09-02 18:07:02 +05:30
end
it " truncates a message without a newline at 80 characters " do
message = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sodales id felis id blandit. Vivamus egestas lacinia lacus, sed rutrum mauris.'
2015-04-26 12:48:37 +05:30
allow ( commit ) . to receive ( :safe_message ) . and_return ( message )
expect ( commit . title ) . to eq ( " #{ message [ 0 .. 79 ] } … " )
2014-09-02 18:07:02 +05:30
end
it " truncates a message with a newline before 80 characters at the newline " do
message = commit . safe_message . split ( " " ) . first
2015-04-26 12:48:37 +05:30
allow ( commit ) . to receive ( :safe_message ) . and_return ( message + " \n " + message )
expect ( commit . title ) . to eq ( message )
2014-09-02 18:07:02 +05:30
end
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
2015-04-26 12:48:37 +05:30
allow ( commit ) . to receive ( :safe_message ) . and_return ( message )
expect ( commit . title ) . to eq ( message . split ( " \n " ) . first )
2014-09-02 18:07:02 +05:30
end
end
describe " delegation " do
subject { commit }
2015-04-26 12:48:37 +05:30
it { is_expected . to respond_to ( :message ) }
it { is_expected . to respond_to ( :authored_date ) }
it { is_expected . to respond_to ( :committed_date ) }
it { is_expected . to respond_to ( :committer_email ) }
it { is_expected . to respond_to ( :author_email ) }
it { is_expected . to respond_to ( :parents ) }
it { is_expected . to respond_to ( :date ) }
it { is_expected . to respond_to ( :diffs ) }
it { is_expected . to respond_to ( :tree ) }
it { is_expected . to respond_to ( :id ) }
it { is_expected . to respond_to ( :to_patch ) }
2014-09-02 18:07:02 +05:30
end
describe '#closes_issues' do
let ( :issue ) { create :issue , project : project }
2015-04-26 12:48:37 +05:30
let ( :other_project ) { create :project , :public }
let ( :other_issue ) { create :issue , project : other_project }
2014-09-02 18:07:02 +05:30
it 'detects issues that this commit is marked as closing' do
2015-09-11 14:41:01 +05:30
allow ( commit ) . to receive ( :safe_message ) . and_return ( " Fixes # #{ issue . iid } " )
expect ( commit . closes_issues ) . to eq ( [ issue ] )
2015-04-26 12:48:37 +05:30
end
it 'does not detect issues from other projects' do
ext_ref = " #{ other_project . path_with_namespace } # #{ other_issue . iid } "
2015-09-11 14:41:01 +05:30
allow ( commit ) . to receive ( :safe_message ) . and_return ( " Fixes #{ ext_ref } " )
expect ( commit . closes_issues ) . to be_empty
2014-09-02 18:07:02 +05:30
end
end
it_behaves_like 'a mentionable' do
2015-10-24 18:46:33 +05:30
subject { create ( :project ) . commit }
2015-09-11 14:41:01 +05:30
2015-10-24 18:46:33 +05:30
let ( :author ) { create ( :user , email : subject . author_email ) }
2015-04-26 12:48:37 +05:30
let ( :backref_text ) { " commit #{ subject . id } " }
2015-09-11 14:41:01 +05:30
let ( :set_mentionable_text ) do
- > ( txt ) { allow ( subject ) . to receive ( :safe_message ) . and_return ( txt ) }
end
2014-09-02 18:07:02 +05:30
# Include the subject in the repository stub.
let ( :extra_commits ) { [ subject ] }
end
end