Commit 6534f0eabadb2d0d07d1f4b0914460432e872f9c

Authored by Rafael Manzo
1 parent fbc36e89

Project as a KalibroClient subclass

1 GIT 1 GIT
  2 + remote: https://github.com/mezuro/kalibro_client
  3 + revision: cd1f8d931432a7257d0fe1abcacdaf50b8fd3976
  4 + specs:
  5 + kalibro_client (0.0.1)
  6 + activeresource (~> 4.0.0)
  7 +
  8 +GIT
2 remote: https://github.com/seyhunak/twitter-bootstrap-rails.git 9 remote: https://github.com/seyhunak/twitter-bootstrap-rails.git
3 revision: 67f160dd2ff5cc7cd843a17866c3b6bc8e7f2794 10 revision: 67f160dd2ff5cc7cd843a17866c3b6bc8e7f2794
4 specs: 11 specs:
@@ -8,13 +15,6 @@ GIT @@ -8,13 +15,6 @@ GIT
8 rails (>= 3.1) 15 rails (>= 3.1)
9 railties (>= 3.1) 16 railties (>= 3.1)
10 17
11 -GIT  
12 - remote: https://github.com/mezuro/kalibro_client  
13 - revision: cd1f8d931432a7257d0fe1abcacdaf50b8fd3976  
14 - specs:  
15 - kalibro_client (0.0.1)  
16 - activeresource (~> 4.0.0)  
17 -  
18 GEM 18 GEM
19 remote: https://rubygems.org/ 19 remote: https://rubygems.org/
20 specs: 20 specs:
app/models/project.rb
1 -require "validators/kalibro_uniqueness_validator.rb"  
2 -  
3 -class Project < KalibroGatekeeperClient::Entities::Project  
4 - include KalibroRecord  
5 -  
6 - attr_accessor :name  
7 - validates :name, presence: true, kalibro_uniqueness: true  
8 -  
9 - def repositories  
10 - Repository.repositories_of(self.id)  
11 - end  
12 - 1 +class Project < KalibroClient::Processor::Project
13 def self.latest(count = 1) 2 def self.latest(count = 1)
14 all.sort { |a,b| b.id <=> a.id }.first(count) 3 all.sort { |a,b| b.id <=> a.id }.first(count)
15 end 4 end
spec/controllers/projects_controller_spec.rb
@@ -27,13 +27,11 @@ describe ProjectsController, :type =&gt; :controller do @@ -27,13 +27,11 @@ describe ProjectsController, :type =&gt; :controller do
27 27
28 context 'rendering the show' do 28 context 'rendering the show' do
29 before :each do 29 before :each do
30 - Project.expects(:exists?).returns(true)  
31 -  
32 post :create, :project => subject_params 30 post :create, :project => subject_params
33 end 31 end
34 32
35 it 'should redirect to the show view' do 33 it 'should redirect to the show view' do
36 - expect(response).to redirect_to project_path(project) 34 + expect(response).to redirect_to project_path(project.id)
37 end 35 end
38 end 36 end
39 37
@@ -234,12 +232,11 @@ describe ProjectsController, :type =&gt; :controller do @@ -234,12 +232,11 @@ describe ProjectsController, :type =&gt; :controller do
234 232
235 context 'rendering the show' do 233 context 'rendering the show' do
236 before :each do 234 before :each do
237 - Project.expects(:exists?).returns(true)  
238 post :update, :id => @subject.id, :project => @subject_params 235 post :update, :id => @subject.id, :project => @subject_params
239 end 236 end
240 237
241 it 'should redirect to the show view' do 238 it 'should redirect to the show view' do
242 - expect(response).to redirect_to project_path(@subject) 239 + expect(response).to redirect_to project_path(@subject.id)
243 end 240 end
244 end 241 end
245 242
spec/models/project_spec.rb
@@ -2,17 +2,6 @@ require &#39;rails_helper&#39; @@ -2,17 +2,6 @@ require &#39;rails_helper&#39;
2 2
3 describe Project, :type => :model do 3 describe Project, :type => :model do
4 describe 'methods' do 4 describe 'methods' do
5 - describe 'persisted?' do  
6 - before :each do  
7 - @subject = FactoryGirl.build(:project)  
8 - Project.expects(:exists?).with(@subject.id).returns(false)  
9 - end  
10 -  
11 - it 'should return false' do  
12 - expect(@subject.persisted?).to eq(false)  
13 - end  
14 - end  
15 -  
16 describe 'latest' do 5 describe 'latest' do
17 before :each do 6 before :each do
18 @qt = FactoryGirl.build(:project) 7 @qt = FactoryGirl.build(:project)
@@ -31,63 +20,5 @@ describe Project, :type =&gt; :model do @@ -31,63 +20,5 @@ describe Project, :type =&gt; :model do
31 end 20 end
32 end 21 end
33 end 22 end
34 -  
35 - describe 'update' do  
36 - before :each do  
37 - @qt = FactoryGirl.build(:project)  
38 - @qt_params = Hash[FactoryGirl.attributes_for(:project).map { |k,v| [k.to_s, v.to_s] }] #FIXME: Mocha is creating the expectations with strings, but FactoryGirl returns everything with sybols and integers  
39 - end  
40 -  
41 - context 'with valid attributes' do  
42 - before :each do  
43 - @qt.expects(:save).returns(true)  
44 - end  
45 -  
46 - it 'should return true' do  
47 - expect(@qt.update(@qt_params)).to eq(true)  
48 - end  
49 - end  
50 -  
51 - context 'with invalid attributes' do  
52 - before :each do  
53 - @qt.expects(:save).returns(false)  
54 - end  
55 -  
56 - it 'should return false' do  
57 - expect(@qt.update(@qt_params)).to eq(false)  
58 - end  
59 - end  
60 - end  
61 -  
62 - describe 'repositories' do  
63 - subject { FactoryGirl.build(:project) }  
64 - let(:repository) { FactoryGirl.build(:repository) }  
65 -  
66 - it 'should call repositories_of on the Repository model' do  
67 - Repository.expects(:repositories_of).with(subject.id).returns([repository])  
68 -  
69 - expect(subject.repositories).to include(repository)  
70 - end  
71 - end  
72 - end  
73 -  
74 - describe 'validations' do  
75 - subject {FactoryGirl.build(:project)}  
76 - context 'active model validations' do  
77 - before :each do  
78 - Project.expects(:all).at_least_once.returns([])  
79 - end  
80 - it { is_expected.to validate_presence_of(:name) }  
81 - end  
82 -  
83 - context 'kalibro validations' do  
84 - before :each do  
85 - Project.expects(:request).returns(42)  
86 - end  
87 -  
88 - it 'should validate uniqueness' do  
89 - subject.save  
90 - end  
91 - end  
92 end 23 end
93 end 24 end
spec/models/validators/kalibro_uniqueness_validator_spec.rb
@@ -1,35 +0,0 @@ @@ -1,35 +0,0 @@
1 -require 'rails_helper'  
2 -require 'validators/range_overlapping_validator'  
3 -  
4 -describe KalibroUniquenessValidator, :type => :model do  
5 - pending 'waiting for kalibro configurations integration' do  
6 - describe 'methods' do  
7 - describe 'validate_each' do  
8 - context 'without saved projects' do  
9 - before :each do  
10 - Project.expects(:all).returns([])  
11 - Project.expects(:request).returns(42)  
12 - end  
13 -  
14 - subject { FactoryGirl.build(:project) }  
15 - it 'should contain no errors' do  
16 - subject.save  
17 - expect(subject.errors).to be_empty  
18 - end  
19 - end  
20 -  
21 - context 'with name already taken by another project' do  
22 - before :each do  
23 - @subject = FactoryGirl.build(:project)  
24 - Project.expects(:all).returns([FactoryGirl.build(:project, id: @subject.id + 1)])  
25 - end  
26 -  
27 - it 'should contain errors' do  
28 - @subject.save  
29 - expect(@subject.errors[:name]).to eq(["There is already a Project with name #{@subject.name}! Please, choose another one."])  
30 - end  
31 - end  
32 - end  
33 - end  
34 - end  
35 -end  
spec/models/validators/range_overlapping_validator_spec.rb
@@ -1,44 +0,0 @@ @@ -1,44 +0,0 @@
1 -require 'rails_helper'  
2 -  
3 -describe RangeOverlappingValidator, :type => :model do  
4 - pending 'waiting for kalibro configurations integration' do  
5 - describe 'methods' do  
6 - describe 'validate' do  
7 - let(:metric_configuration) { FactoryGirl.build(:metric_configuration) }  
8 - let(:range) { FactoryGirl.build(:mezuro_range, beginning: '-INF', end: 0.0, metric_configuration_id: metric_configuration.id) }  
9 -  
10 - before :each do  
11 - BeginningUniquenessValidator.any_instance.stubs(:validate_each)  
12 - GreaterThanBeginningValidator.any_instance.stubs(:validate_each)  
13 - end  
14 -  
15 - context 'not overlapping' do  
16 - let!(:not_overlapping_range) { FactoryGirl.build(:mezuro_range, id: 31, beginning: 0.0, end: 'INF', metric_configuration_id: metric_configuration.id) }  
17 -  
18 - before :each do  
19 - MezuroRange.expects(:ranges_of).with(metric_configuration.id).returns([range, not_overlapping_range])  
20 - end  
21 -  
22 - it 'is expected to not return errors' do  
23 - range.save  
24 - expect(range.errors).to be_empty  
25 - end  
26 - end  
27 -  
28 -  
29 - context 'overlapping' do  
30 - let!(:overlapping_range) { FactoryGirl.build(:mezuro_range, id: 31, beginning: '-INF', end: 'INF', metric_configuration_id: metric_configuration.id) }  
31 -  
32 - before :each do  
33 - MezuroRange.expects(:ranges_of).with(metric_configuration.id).returns([range, overlapping_range])  
34 - end  
35 -  
36 - it 'is expected to return errors' do  
37 - range.save  
38 - expect(range.errors[:beginning]).to eq(["There is already a #{range.class} within these boundaries! Please, choose another interval."])  
39 - end  
40 - end  
41 - end  
42 - end  
43 - end  
44 -end