Commit fdac9062c1d2ba9d42084c160b5c9ca1f34ece4b
1 parent
8dcf085c
Exists in
colab
and in
4 other branches
ReadingGroup#destroy with attributes memoization clean up and covered by unit tests
If the memoization was left it could lead to inconsistencies after destroying. Removed forgotten print. Signed off by: Heitor Reis <marcheing@gmail.com>
Showing
3 changed files
with
29 additions
and
2 deletions
Show diff stats
app/models/reading_group.rb
features/step_definitions/reading_group_steps.rb
| ... | ... | @@ -61,6 +61,7 @@ Then(/^I should be in the Edit Reading Group page$/) do |
| 61 | 61 | end |
| 62 | 62 | |
| 63 | 63 | Then(/^the Sample Reading Group should not be there$/) do |
| 64 | + expects(@reading_group.attributes).to be_nil | |
| 64 | 65 | expect { ReadingGroup.find(@reading_group.id) }.to raise_error |
| 65 | 66 | end |
| 66 | 67 | ... | ... |
spec/models/reading_group_spec.rb
| ... | ... | @@ -45,6 +45,33 @@ describe ReadingGroup, :type => :model do |
| 45 | 45 | expect(subject.readings).to include(reading) |
| 46 | 46 | end |
| 47 | 47 | end |
| 48 | + | |
| 49 | + describe 'destroy' do | |
| 50 | + context 'when attributes exist' do | |
| 51 | + let!(:reading_group_attributes) { FactoryGirl.build(:reading_group_attributes) } | |
| 52 | + let!(:reading_group) { reading_group_attributes.reading_group } | |
| 53 | + | |
| 54 | + it 'should be destroyed' do | |
| 55 | + reading_group.expects(:attributes).twice.returns(reading_group_attributes) | |
| 56 | + reading_group_attributes.expects(:destroy) | |
| 57 | + KalibroClient::Entities::Configurations::ReadingGroup.any_instance.expects(:destroy).returns(reading_group) | |
| 58 | + reading_group.destroy | |
| 59 | + end | |
| 60 | + | |
| 61 | + it 'is expected to clean the attributes memoization' do | |
| 62 | + # Call attributes once so it memoizes | |
| 63 | + ReadingGroupAttributes.expects(:find_by).with(reading_group_id: reading_group.id).returns(reading_group_attributes) | |
| 64 | + expect(reading_group.attributes).to eq(reading_group_attributes) | |
| 65 | + | |
| 66 | + # Destroying | |
| 67 | + reading_group.destroy | |
| 68 | + | |
| 69 | + # The expectation call will try to find the attributes on the database which should be nil since it was destroyed | |
| 70 | + ReadingGroupAttributes.expects(:find_by).with(reading_group_id: reading_group.id).returns(nil) | |
| 71 | + expect(reading_group.attributes).to be_nil | |
| 72 | + end | |
| 73 | + end | |
| 74 | + end | |
| 48 | 75 | end |
| 49 | 76 | |
| 50 | 77 | describe 'class methods' do |
| ... | ... | @@ -86,8 +113,6 @@ describe ReadingGroup, :type => :model do |
| 86 | 113 | end |
| 87 | 114 | |
| 88 | 115 | it 'should find all public and owned reading groups' do |
| 89 | - p all_reading_groups | |
| 90 | - | |
| 91 | 116 | expect(ReadingGroup.public_or_owned_by_user(user)).to eq(owned_or_public_reading_groups) |
| 92 | 117 | end |
| 93 | 118 | end | ... | ... |