Commit 4b2585504136c21a81ffce6690abb1d4ce2fafd5
1 parent
f6b35fcc
Exists in
colab
and in
2 other branches
Improve Repository#latest to return only public repositories
Showing
2 changed files
with
33 additions
and
10 deletions
Show diff stats
app/models/repository.rb
| @@ -17,7 +17,7 @@ class Repository < KalibroClient::Entities::Processor::Repository | @@ -17,7 +17,7 @@ class Repository < KalibroClient::Entities::Processor::Repository | ||
| 17 | end | 17 | end |
| 18 | 18 | ||
| 19 | def self.latest(count=1) | 19 | def self.latest(count=1) |
| 20 | - all.sort { |one, another| another.id <=> one.id }.first(count) | 20 | + all.sort { |one, another| another.id <=> one.id }.select { |repository| repository.attributes.public }.first(count) |
| 21 | end | 21 | end |
| 22 | 22 | ||
| 23 | def attributes | 23 | def attributes |
spec/models/repository_spec.rb
| @@ -31,20 +31,43 @@ describe Repository do | @@ -31,20 +31,43 @@ describe Repository do | ||
| 31 | 31 | ||
| 32 | describe 'class method' do | 32 | describe 'class method' do |
| 33 | describe 'latest' do | 33 | describe 'latest' do |
| 34 | - let!(:repository) { FactoryGirl.build(:repository, id: 1) } | ||
| 35 | - let!(:another_repository) { FactoryGirl.build(:another_repository, id: 2) } | 34 | + let!(:repository) { FactoryGirl.build(:repository) } |
| 35 | + let!(:another_repository) { FactoryGirl.build(:repository, id: 2) } | ||
| 36 | + let!(:repository_attributes) { FactoryGirl.build(:repository_attributes) } | ||
| 36 | 37 | ||
| 37 | - before do | ||
| 38 | - Repository.expects(:all).returns([repository, another_repository]) | 38 | + before :each do |
| 39 | + repository.expects(:attributes).returns(repository_attributes) | ||
| 40 | + another_repository.expects(:attributes).returns(repository_attributes) | ||
| 39 | end | 41 | end |
| 40 | 42 | ||
| 41 | - it 'should return the two repositorys ordered' do | ||
| 42 | - expect(Repository.latest(2)).to eq([another_repository, repository]) | 43 | + context 'without private repositories' do |
| 44 | + before :each do | ||
| 45 | + Repository.expects(:all).returns([repository, another_repository]) | ||
| 46 | + end | ||
| 47 | + | ||
| 48 | + it 'is expected to return the two repositories ordered' do | ||
| 49 | + expect(Repository.latest(2)).to eq([another_repository, repository]) | ||
| 50 | + end | ||
| 51 | + | ||
| 52 | + context 'when no parameter is passed' do | ||
| 53 | + it 'is expected to return just the most recent repository' do | ||
| 54 | + expect(Repository.latest).to eq([another_repository]) | ||
| 55 | + end | ||
| 56 | + end | ||
| 43 | end | 57 | end |
| 44 | 58 | ||
| 45 | - context 'when no parameter is passed' do | ||
| 46 | - it 'should return just the most recent repository' do | ||
| 47 | - expect(Repository.latest).to eq([another_repository]) | 59 | + context 'with private repositories' do |
| 60 | + let(:private_repository) { FactoryGirl.build(:repository, id: 3) } | ||
| 61 | + let(:private_attributes) { FactoryGirl.build(:repository_attributes, :private) } | ||
| 62 | + | ||
| 63 | + before :each do | ||
| 64 | + private_repository.expects(:attributes).returns(private_attributes) | ||
| 65 | + | ||
| 66 | + Repository.expects(:all).returns([repository, another_repository, private_repository]) | ||
| 67 | + end | ||
| 68 | + | ||
| 69 | + it 'is expected to return only the public ones' do | ||
| 70 | + expect(Repository.latest(2)).to eq([another_repository, repository]) | ||
| 48 | end | 71 | end |
| 49 | end | 72 | end |
| 50 | end | 73 | end |