Commit acba8492289dedb770c5ca26cbdfb548f91f3d37
1 parent
937d1828
Exists in
colab
and in
4 other branches
Project#destroy overrided so it destroys the attributes
Signed off by: Heitor Reis <marcheing@gmail.com>
Showing
2 changed files
with
33 additions
and
0 deletions
Show diff stats
app/models/project.rb
| ... | ... | @@ -11,4 +11,10 @@ class Project < KalibroClient::Entities::Processor::Project |
| 11 | 11 | @project_attributes ||= ProjectAttributes.find_by_project_id(self.id) |
| 12 | 12 | @project_attributes.nil? ? ProjectAttributes.new : @project_attributes |
| 13 | 13 | end |
| 14 | + | |
| 15 | + def destroy | |
| 16 | + self.attributes.destroy if self.attributes | |
| 17 | + @project_attributes = nil | |
| 18 | + super | |
| 19 | + end | |
| 14 | 20 | end | ... | ... |
spec/models/project_spec.rb
| ... | ... | @@ -38,5 +38,32 @@ describe Project, :type => :model do |
| 38 | 38 | expect(subject.attributes).to eq(project_attributes) |
| 39 | 39 | end |
| 40 | 40 | end |
| 41 | + | |
| 42 | + describe 'destroy' do | |
| 43 | + context 'when attributes exist' do | |
| 44 | + let!(:project) { FactoryGirl.build(:project) } | |
| 45 | + let!(:project_attributes) { FactoryGirl.build(:project_attributes, project_id: project.id) } | |
| 46 | + | |
| 47 | + it 'should be destroyed' do | |
| 48 | + project.expects(:attributes).twice.returns(project_attributes) | |
| 49 | + project_attributes.expects(:destroy) | |
| 50 | + KalibroClient::Entities::Processor::Project.any_instance.expects(:destroy).returns(project) | |
| 51 | + project.destroy | |
| 52 | + end | |
| 53 | + | |
| 54 | + it 'is expected to clean the attributes memoization' do | |
| 55 | + # Call attributes once so it memoizes | |
| 56 | + ProjectAttributes.expects(:find_by).with(project_id: project.id).returns(project_attributes) | |
| 57 | + expect(project.attributes).to eq(project_attributes) | |
| 58 | + | |
| 59 | + # Destroying | |
| 60 | + project.destroy | |
| 61 | + | |
| 62 | + # The expectation call will try to find the attributes on the database which should be nil since it was destroyed | |
| 63 | + ProjectAttributes.expects(:find_by).with(project_id: project.id).returns(nil) | |
| 64 | + expect(project.attributes).to_not eq(project_attributes) | |
| 65 | + end | |
| 66 | + end | |
| 67 | + end | |
| 41 | 68 | end |
| 42 | 69 | end | ... | ... |