Commit 8dcf085c4d20f7039de15d6ea80d10f708dbd9e9

Authored by Rafael Manzo
1 parent b83ceca0

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>
app/models/kalibro_configuration.rb
@@ -25,6 +25,7 @@ class KalibroConfiguration &lt; KalibroClient::Entities::Configurations::KalibroCon @@ -25,6 +25,7 @@ class KalibroConfiguration &lt; 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 =&gt; :model do @@ -77,15 +77,25 @@ describe KalibroConfiguration, :type =&gt; :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