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 |