60 lines
1.6 KiB
Ruby
60 lines
1.6 KiB
Ruby
|
require 'spec_helper'
|
||
|
|
||
|
describe CommitCollection do
|
||
|
let(:project) { create(:project, :repository) }
|
||
|
let(:commit) { project.commit }
|
||
|
|
||
|
describe '#each' do
|
||
|
it 'yields every commit' do
|
||
|
collection = described_class.new(project, [commit])
|
||
|
|
||
|
expect { |b| collection.each(&b) }.to yield_with_args(commit)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#with_pipeline_status' do
|
||
|
it 'sets the pipeline status for every commit so no additional queries are necessary' do
|
||
|
create(
|
||
|
:ci_empty_pipeline,
|
||
|
ref: 'master',
|
||
|
sha: commit.id,
|
||
|
status: 'success',
|
||
|
project: project
|
||
|
)
|
||
|
|
||
|
collection = described_class.new(project, [commit])
|
||
|
collection.with_pipeline_status
|
||
|
|
||
|
recorder = ActiveRecord::QueryRecorder.new do
|
||
|
expect(commit.status).to eq('success')
|
||
|
end
|
||
|
|
||
|
expect(recorder.count).to be_zero
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#respond_to_missing?' do
|
||
|
it 'returns true when the underlying Array responds to the message' do
|
||
|
collection = described_class.new(project, [])
|
||
|
|
||
|
expect(collection.respond_to?(:last)).to eq(true)
|
||
|
end
|
||
|
|
||
|
it 'returns false when the underlying Array does not respond to the message' do
|
||
|
collection = described_class.new(project, [])
|
||
|
|
||
|
expect(collection.respond_to?(:foo)).to eq(false)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#method_missing' do
|
||
|
it 'delegates undefined methods to the underlying Array' do
|
||
|
collection = described_class.new(project, [commit])
|
||
|
|
||
|
expect(collection.length).to eq(1)
|
||
|
expect(collection.last).to eq(commit)
|
||
|
expect(collection).not_to be_empty
|
||
|
end
|
||
|
end
|
||
|
end
|