signatures_spec.rb 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. require "rails_helper"
  2. require "rake"
  3. describe "signatures namespace rake tasks" do
  4. before do
  5. Rake.application.rake_require("tasks/signatures")
  6. Rake::Task.define_task(:environment)
  7. end
  8. describe "signatures:deduplicate" do
  9. after { Rake.application["signatures:deduplicate"].reenable }
  10. it "should delete signatures with non-unique emails from petitions" do
  11. regular_petition = FactoryGirl.create(:petition_complete_with_one_hundred_signatures)
  12. petition_with_dups = FactoryGirl.create(:petition_complete_with_one_hundred_signatures)
  13. petition_with_dups.signatures.take(20).each { |sig| sig.update_column(:email, "dup1@example.com") }
  14. petition_with_dups.signatures.take(10).each { |sig| sig.update_column(:email, "dup2@example.com") }
  15. distinct_emails = petition_with_dups.signatures.pluck(:email).uniq
  16. expect(regular_petition.signatures.select("email").distinct.count).to eq(100)
  17. expect(petition_with_dups.signatures.select("email").distinct.count).to eq(82)
  18. Rake.application.invoke_task "signatures:deduplicate"
  19. # Check that regular petition was unaffected and that the other contains no duplicates
  20. expect(regular_petition.signatures.reload.count).to eq(100)
  21. expect(petition_with_dups.signatures.reload.count).to eq(82)
  22. expect(petition_with_dups.signatures.reload.pluck(:email)).to contain_exactly(*distinct_emails)
  23. end
  24. context "with duplicate subscriptions" do
  25. let(:subscription) { FactoryGirl.create(:subscription) }
  26. let(:email) { subscription.email }
  27. let(:partner) { subscription.partner }
  28. let!(:owner_subscription2) do
  29. FactoryGirl.create(:subscription, email: email)
  30. end
  31. let!(:partner_subscription2) do
  32. FactoryGirl.create(:subscription, partner: partner)
  33. end
  34. let!(:dup_subscription) do
  35. FactoryGirl.create(:subscription, email: email, partner: partner)
  36. end
  37. it "removes the newer duplicates" do
  38. expect(Subscription.where(email: email, partner: partner).count).to eq(2)
  39. expect(Subscription.where(email: email).count).to eq(3)
  40. expect(Subscription.where(partner: partner).count).to eq(3)
  41. expect { Rake.application.invoke_task "signatures:deduplicate" }
  42. .to change(Subscription, :count).by(-1)
  43. expect(Subscription.where(email: email, partner: partner).count).to eq(1)
  44. expect(Subscription.where(email: email).count).to eq(2)
  45. expect(Subscription.where(partner: partner).count).to eq(2)
  46. end
  47. end
  48. end
  49. end