Skip to content

Commit

Permalink
Allow users to change email reminder preference (#59)
Browse files Browse the repository at this point in the history
This commit adds a new column `receive_reminder_email` to the users
 table and made it possible for users to view and edit their preference
 through the application.
  • Loading branch information
kurtisnotcurtis authored and Anthony M committed Dec 8, 2020
1 parent 2fef380 commit 784774d
Show file tree
Hide file tree
Showing 9 changed files with 56 additions and 9 deletions.
2 changes: 1 addition & 1 deletion app/controllers/users_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,6 @@ def create
private

def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password)
params.require(:user).permit(:first_name, :last_name, :email, :password, :receive_reminder_email)
end
end
15 changes: 9 additions & 6 deletions app/mailers/commitment_reminder_mailer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,31 @@ class CommitmentReminderMailer < ApplicationMailer
def post_call_reminder(call)
@call = call
build_commitment_summaries
mail(to: recipients,
mail(to: user_emails,
subject: "Commitments This Week",
template_name: "reminder")
end

def mid_week_reminder(call)
@call = call
build_commitment_summaries
mail(to: recipients,
mail(to: user_emails,
subject: "How's this week's commitment going?",
template_name: "reminder")
end

private

def build_commitment_summaries
@user_commitment_summaries = @call
.users
@user_commitment_summaries = call_users
.map { |user| UserCommitmentSummary.new(user, @call) }
end

def recipients
@call.users.map(&:email)
def user_emails
call_users.map(&:email)
end

def call_users
@call.users.receives_reminders
end
end
2 changes: 2 additions & 0 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ class User < ApplicationRecord
has_many :groups, through: :memberships
has_many :created_groups, class_name: "Group", foreign_key: :creator_id

scope :receives_reminders, -> { where(receive_reminder_email: true) }

def full_name
"#{first_name} #{last_name}"
end
Expand Down
5 changes: 5 additions & 0 deletions app/views/users/edit.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@
<%= form.text_field :email %>
</div>

<div class="form-field">
<%= form.label :receive_reminder_email %>
<%= form.check_box :receive_reminder_email %>
</div>

<div class="form-field">
<%= form.submit %>
</div>
Expand Down
5 changes: 5 additions & 0 deletions app/views/users/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
<div class="card-title"><%= current_user.full_name %></div>
<div class="card-content">
<div class="list-item"><%= current_user.email %></div>
<% if current_user.receive_reminder_email %>
<div class="list-item">Subscribed to reminder emails</div>
<% else %>
<div class="list-item">Not subscribed to reminder emails</div>
<% end %>
</div>
<div class="card-footer">
<%= link_to "Edit Profile", edit_user_path %>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class AddReceiveReminderEmailToUsers < ActiveRecord::Migration[6.0]
def change
add_column :users, :receive_reminder_email, :boolean, null: false, index: true, default: true
end
end
3 changes: 2 additions & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 2020_09_05_132222) do
ActiveRecord::Schema.define(version: 2020_11_28_221225) do

# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
Expand Down Expand Up @@ -113,6 +113,7 @@
t.string "first_name", null: false
t.string "last_name", null: false
t.string "role", default: "member", null: false
t.boolean "receive_reminder_email", default: true, null: false
t.index ["email"], name: "index_users_on_email"
t.index ["remember_token"], name: "index_users_on_remember_token"
end
Expand Down
24 changes: 24 additions & 0 deletions spec/mailers/commit_reminder_mailer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,18 @@

expect(mailer.to).to eq [user.email]
end

it "doesn't send to users who are unsubscribed from reminders" do
group = create(:group)
subscribed_user = create(:user, receive_reminder_email: true)
unsubscribed_user = create(:user, receive_reminder_email: false)
group.users << [subscribed_user, unsubscribed_user]
call = create(:call, group: group)

mailer = CommitmentReminderMailer.post_call_reminder(call)

expect(mailer.to).to eq [subscribed_user.email]
end
end

describe ".mid_week_reminder" do
Expand All @@ -23,5 +35,17 @@

expect(mailer.to).to eq [user.email]
end

it "doesn't send to users who are unsubscribed from reminders" do
group = create(:group)
subscribed_user = create(:user, receive_reminder_email: true)
unsubscribed_user = create(:user, receive_reminder_email: false)
group.users << [subscribed_user, unsubscribed_user]
call = create(:call, group: group)

mailer = CommitmentReminderMailer.mid_week_reminder(call)

expect(mailer.to).to eq [subscribed_user.email]
end
end
end
4 changes: 3 additions & 1 deletion spec/system/user_edits_profile_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
RSpec.describe "User edits their profile" do
context "as a signed in user" do
it "updates their profile" do
user = create(:user)
user = create(:user, receive_reminder_email: false)
first_name = "new"
last_name = "name"
email = "new@example.com"
Expand All @@ -14,13 +14,15 @@
fill_in :user_first_name, with: first_name
fill_in :user_last_name, with: last_name
fill_in :user_email, with: email
check :user_receive_reminder_email
click_on "Update User"

user.reload

expect(user.first_name).to eq first_name
expect(user.last_name).to eq last_name
expect(user.email).to eq email
expect(user.receive_reminder_email).to be true
end
end

Expand Down

0 comments on commit 784774d

Please sign in to comment.