diff --git a/Changelog.md b/Changelog.md index fc711262e..f90fdafb8 100644 --- a/Changelog.md +++ b/Changelog.md @@ -68,6 +68,7 @@ With the port to Bootstrap 3, app/views/terms/default.haml has a new structure. * Prevent multiple comment boxes on mobile [#6363](https://github.com/diaspora/diaspora/pull/6363) * Correctly display location in post preview [#6429](https://github.com/diaspora/diaspora/pull/6429) * Do not fail when submitting an empty comment in the mobile view [#6543](https://github.com/diaspora/diaspora/pull/6543) +* Limit flash message width on small devices [#6529](https://github.com/diaspora/diaspora/pull/6529) ## Features * Support color themes [#6033](https://github.com/diaspora/diaspora/pull/6033) @@ -94,7 +95,7 @@ With the port to Bootstrap 3, app/views/terms/default.haml has a new structure. * Correctly skip setting sidekiq logfile on Heroku [#6500](https://github.com/diaspora/diaspora/pull/6500) * Fix notifications for interactions by non-contacts [#6498](https://github.com/diaspora/diaspora/pull/6498) * Fix issue where the publisher was broken on profile pages [#6503](https://github.com/diaspora/diaspora/pull/6503) -* Limit flash message width on small devices [#6529](https://github.com/diaspora/diaspora/pull/6529) +* Prevent participations being created for invalid interactions [#6552](https://github.com/diaspora/diaspora/pull/6552) ## Features diff --git a/app/models/user/social_actions.rb b/app/models/user/social_actions.rb index 2b3ff4a4a..b3a4c6b58 100644 --- a/app/models/user/social_actions.rb +++ b/app/models/user/social_actions.rb @@ -1,7 +1,8 @@ module User::SocialActions def comment!(target, text, opts={}) - update_or_create_participation!(target) - Comment::Generator.new(self, target, text).create!(opts) + Comment::Generator.new(self, target, text).create!(opts).tap do + update_or_create_participation!(target) + end end def participate!(target, opts={}) @@ -9,21 +10,23 @@ module User::SocialActions end def like!(target, opts={}) - update_or_create_participation!(target) - Like::Generator.new(self, target).create!(opts) + Like::Generator.new(self, target).create!(opts).tap do + update_or_create_participation!(target) + end end def participate_in_poll!(target, answer, opts={}) - update_or_create_participation!(target) - PollParticipation::Generator.new(self, target, answer).create!(opts) + PollParticipation::Generator.new(self, target, answer).create!(opts).tap do + update_or_create_participation!(target) + end end def reshare!(target, opts={}) - update_or_create_participation!(target) - reshare = build_post(:reshare, :root_guid => target.guid) - reshare.save! - Postzord::Dispatcher.defer_build_and_post(self, reshare) - reshare + build_post(:reshare, :root_guid => target.guid).tap do |reshare| + reshare.save! + update_or_create_participation!(target) + Postzord::Dispatcher.defer_build_and_post(self, reshare) + end end def build_comment(options={}) diff --git a/spec/models/comment_spec.rb b/spec/models/comment_spec.rb index 9d62b3046..c9631f928 100644 --- a/spec/models/comment_spec.rb +++ b/spec/models/comment_spec.rb @@ -77,6 +77,15 @@ describe Comment, :type => :model do participations = Participation.where(target_id: comment_alice.commentable_id, author_id: comment_alice.author_id) expect(participations.count).to eq(1) end + + it "does not create a participation if comment validation failed" do + begin + alice.comment!(status_bob, " ") + rescue ActiveRecord::RecordInvalid + end + participations = Participation.where(target_id: status_bob, author_id: alice.person.id) + expect(participations.count).to eq(0) + end end describe "counter cache" do