Skip to content

Commit f2b3a01

Browse files
committed
Add rake task to send welcome email to recently confirmed users
1 parent 95a6570 commit f2b3a01

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

app/models/user.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ class User < ApplicationRecord
88

99
has_one :newsletter_subscription, as: :subscriber, dependent: :destroy
1010

11+
scope :recently_confirmed, -> { where("confirmed_at > ?", 2.weeks.ago) }
12+
1113
accepts_nested_attributes_for :email_exchanges, limit: 1
1214

1315
validates :email, presence: true, uniqueness: true, format: {with: URI::MailTo::EMAIL_REGEXP}

lib/tasks/emails/welcome.rake

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace :emails do
2+
task welcome: :environment do
3+
User.recently_confirmed.find_each do |user|
4+
WelcomeNotifier.deliver_to(user)
5+
end
6+
end
7+
end

spec/models/user_spec.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,14 @@ def create_user!(email:, password: "password", password_confirmation: "password"
3434
}.to raise_error(ActiveRecord::RecordInvalid, "Validation failed: Email has already been taken")
3535
end
3636
end
37+
38+
describe ".recently_confirmed" do
39+
it "returns recently (within 2 weeks) confirmed users" do
40+
FactoryBot.create(:user, confirmed_at: 1.month.ago)
41+
recently_confirmed_user = FactoryBot.create(:user, confirmed_at: 1.week.ago)
42+
FactoryBot.create(:user, :unconfirmed)
43+
44+
expect(User.recently_confirmed).to eq([recently_confirmed_user])
45+
end
46+
end
3747
end

0 commit comments

Comments
 (0)