Commit 8dcf085c4d20f7039de15d6ea80d10f708dbd9e9
1 parent
b83ceca0
Exists in
colab
and in
4 other branches
KalibroConfiguration#destroy cleans attributes memoization
If the memoization was left it could lead to inconsistencies after destroying Signed off by: Heitor Reis <marcheing@gmail.com>
Showing
2 changed files
with
15 additions
and
4 deletions
Show diff stats
app/models/kalibro_configuration.rb
| @@ -25,6 +25,7 @@ class KalibroConfiguration < KalibroClient::Entities::Configurations::KalibroCon | @@ -25,6 +25,7 @@ class KalibroConfiguration < KalibroClient::Entities::Configurations::KalibroCon | ||
| 25 | 25 | ||
| 26 | def destroy | 26 | def destroy |
| 27 | attributes.destroy unless attributes.nil? | 27 | attributes.destroy unless attributes.nil? |
| 28 | + @attributes = nil | ||
| 28 | super | 29 | super |
| 29 | end | 30 | end |
| 30 | end | 31 | end |
spec/models/kalibro_configuration_spec.rb
| @@ -77,15 +77,25 @@ describe KalibroConfiguration, :type => :model do | @@ -77,15 +77,25 @@ describe KalibroConfiguration, :type => :model do | ||
| 77 | let!(:kalibro_configuration_attributes) { FactoryGirl.build(:kalibro_configuration_attributes) } | 77 | let!(:kalibro_configuration_attributes) { FactoryGirl.build(:kalibro_configuration_attributes) } |
| 78 | let!(:kalibro_configuration) { kalibro_configuration_attributes.kalibro_configuration } | 78 | let!(:kalibro_configuration) { kalibro_configuration_attributes.kalibro_configuration } |
| 79 | 79 | ||
| 80 | - before do | ||
| 81 | - kalibro_configuration.expects(:attributes).twice.returns(kalibro_configuration_attributes) | ||
| 82 | - end | ||
| 83 | - | ||
| 84 | it 'should be destroyed' do | 80 | it 'should be destroyed' do |
| 81 | + kalibro_configuration.expects(:attributes).twice.returns(kalibro_configuration_attributes) | ||
| 85 | kalibro_configuration_attributes.expects(:destroy) | 82 | kalibro_configuration_attributes.expects(:destroy) |
| 86 | KalibroClient::Entities::Configurations::KalibroConfiguration.any_instance.expects(:destroy).returns(kalibro_configuration) | 83 | KalibroClient::Entities::Configurations::KalibroConfiguration.any_instance.expects(:destroy).returns(kalibro_configuration) |
| 87 | kalibro_configuration.destroy | 84 | kalibro_configuration.destroy |
| 88 | end | 85 | end |
| 86 | + | ||
| 87 | + it 'is expected to clean the attributes memoization' do | ||
| 88 | + # Call attributes once so it memoizes | ||
| 89 | + KalibroConfigurationAttributes.expects(:find_by).with(kalibro_configuration_id: kalibro_configuration.id).returns(kalibro_configuration_attributes) | ||
| 90 | + expect(kalibro_configuration.attributes).to eq(kalibro_configuration_attributes) | ||
| 91 | + | ||
| 92 | + # Destroying | ||
| 93 | + kalibro_configuration.destroy | ||
| 94 | + | ||
| 95 | + # The expectation call will try to find the attributes on the database which should be nil since it was destroyed | ||
| 96 | + KalibroConfigurationAttributes.expects(:find_by).with(kalibro_configuration_id: kalibro_configuration.id).returns(nil) | ||
| 97 | + expect(kalibro_configuration.attributes).to be_nil | ||
| 98 | + end | ||
| 89 | end | 99 | end |
| 90 | end | 100 | end |
| 91 | end | 101 | end |