Skip to content

Commit

Permalink
Email delegate when someone requests a WCA id. This fixes #260.
Browse files Browse the repository at this point in the history
  • Loading branch information
jfly committed Dec 10, 2015
1 parent 8955f15 commit 7d0aa32
Show file tree
Hide file tree
Showing 9 changed files with 82 additions and 18 deletions.
1 change: 1 addition & 0 deletions WcaOnRails/app/controllers/users_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ def do_request_wca_id
@user.requesting_wca_id = true
if @user.update_attributes(user_request_wca_id_params)
flash[:success] = "Successfully requested WCA id #{@user.unconfirmed_wca_id}. Check your email, and wait for #{@user.delegate_to_handle_wca_id_request.name} to approve it!"
WcaIdRequestMailer.notify_delegate_of_wca_id_request(@user).deliver_now
redirect_to profile_request_wca_id_path
else
render :request_wca_id
Expand Down
11 changes: 11 additions & 0 deletions WcaOnRails/app/mailers/wca_id_request_mailer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class WcaIdRequestMailer < ApplicationMailer
def notify_delegate_of_wca_id_request(user_requesting_wca_id)
@user_requesting_wca_id = user_requesting_wca_id
mail(
to: user_requesting_wca_id.delegate_to_handle_wca_id_request.email,
cc: user_requesting_wca_id.email,
reply_to: user_requesting_wca_id.email,
subject: "#{user_requesting_wca_id.email} just requested WCA id #{user_requesting_wca_id.unconfirmed_wca_id}",
)
end
end
2 changes: 1 addition & 1 deletion WcaOnRails/app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def name_must_match_person_name
before_validation :maybe_clear_requested_wca_id
def maybe_clear_requested_wca_id
if !requesting_wca_id && unconfirmed_wca_id_was.present?
if wca_id == unconfirmed_wca_id_was
if wca_id == unconfirmed_wca_id_was || unconfirmed_wca_id.blank?
self.unconfirmed_wca_id = nil
self.delegate_to_handle_wca_id_request = nil
end
Expand Down
3 changes: 2 additions & 1 deletion WcaOnRails/app/views/shared/_wca_id.html.erb
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<span class="wca-id">
<%= link_to wca_id, "/results/p.php?i=#{wca_id}" -%>
<%# We use a full url because this can be rendered inside of emails %>
<%= link_to wca_id, "#{root_url}results/p.php?i=#{wca_id}" -%>
</span>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<h1>
<%= @user_requesting_wca_id.name %> just requested WCA id
<%= render "shared/wca_id", wca_id: @user_requesting_wca_id.unconfirmed_wca_id %>
</h1>

<p>
@<%= @user_requesting_wca_id.delegate_to_handle_wca_id_request.name %>: You can approve or reject this request <%= link_to "here", edit_user_url(@user_requesting_wca_id.id, anchor: "user_wca_id") %>.
For a complete list of unconfirmed WCA id requests see your <%= link_to "notifications", notifications_url %>.
</p>
21 changes: 16 additions & 5 deletions WcaOnRails/spec/controllers/users_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,19 @@
end

describe "request wca id" do
let(:person) { FactoryGirl.create(:person) }
let(:delegate) { FactoryGirl.create(:delegate) }
let(:user) { FactoryGirl.create(:user) }
let!(:person) { FactoryGirl.create(:person) }
let!(:delegate) { FactoryGirl.create(:delegate) }
let!(:user) { FactoryGirl.create(:user) }

before :each do
sign_in user
end

it "works" do
patch :do_request_wca_id, user: { unconfirmed_wca_id: person.id, delegate_id_to_handle_wca_id_request: delegate.id }
expect(WcaIdRequestMailer).to receive(:notify_delegate_of_wca_id_request).with(user).and_call_original
expect do
patch :do_request_wca_id, user: { unconfirmed_wca_id: person.id, delegate_id_to_handle_wca_id_request: delegate.id }
end.to change { ActionMailer::Base.deliveries.length }.by(1)
new_user = assigns(:user)
expect(new_user).to be_valid
expect(user.reload.unconfirmed_wca_id).to eq person.id
Expand All @@ -47,7 +50,7 @@
patch :do_request_wca_id, user: { unconfirmed_wca_id: person.id, delegate_id_to_handle_wca_id_request: delegate.id }
new_user = assigns(:user)
expect(new_user).to be_invalid
expect(user.reload.unconfirmed_wca_id).to be nil
expect(user.reload.unconfirmed_wca_id).to be_nil
end
end

Expand Down Expand Up @@ -92,5 +95,13 @@
expect(user.unconfirmed_wca_id).to eq person2.id
expect(user.delegate_to_handle_wca_id_request).to eq delegate
end

it "can clear requested id" do
person2 = FactoryGirl.create :person
patch :update, id: user, user: { unconfirmed_wca_id: "" }
user.reload
expect(user.unconfirmed_wca_id).to be_nil
expect(user.delegate_to_handle_wca_id_request).to be_nil
end
end
end
22 changes: 11 additions & 11 deletions WcaOnRails/spec/mailers/competitions_mailer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@

RSpec.describe CompetitionsMailer, type: :mailer do
describe "notify_board_of_confirmed_competition" do
before :each do
@delegate = FactoryGirl.create :delegate
@competition = FactoryGirl.create :competition, delegates: [@delegate]
@mail = CompetitionsMailer.notify_board_of_confirmed_competition(@delegate, @competition)
end
let(:delegate) { FactoryGirl.create :delegate }
let(:competition) { FactoryGirl.create :competition, delegates: [delegate] }
let(:mail) { CompetitionsMailer.notify_board_of_confirmed_competition(delegate, competition) }

it "renders" do
expect(@mail.subject).to eq("#{@delegate.name} just confirmed #{@competition.name}")
expect(@mail.to).to eq(["[email protected]"])
expect(@mail.from).to eq(["[email protected]"])
expect(@mail.reply_to).to eq([@delegate.email])
expect(@mail.body.encoded).to match("#{@competition.name} is confirmed")
expect(@mail.body.encoded).to match(admin_edit_competition_url(@competition))
expect(mail.to).to eq(["[email protected]"])
expect(mail.cc).to eq([delegate.email])
expect(mail.from).to eq(["[email protected]"])
expect(mail.reply_to).to eq([delegate.email])

expect(mail.subject).to eq("#{delegate.name} just confirmed #{competition.name}")
expect(mail.body.encoded).to match("#{competition.name} is confirmed")
expect(mail.body.encoded).to match(admin_edit_competition_url(competition))
end
end
end
11 changes: 11 additions & 0 deletions WcaOnRails/spec/mailers/previews/wca_id_request_mailer_preview.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Preview all emails at http://localhost:3000/rails/mailers/wca_id_request_mailer
class WcaIdRequestMailerPreview < ActionMailer::Preview

def notify_delegate_of_wca_id_request
ActiveRecord::Base.transaction do
user_requesting_wca_id = User.where.not(unconfirmed_wca_id: nil).first
WcaIdRequestMailer.notify_delegate_of_wca_id_request(user_requesting_wca_id)
end
end

end
20 changes: 20 additions & 0 deletions WcaOnRails/spec/mailers/wca_id_request_mailer_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
require "rails_helper"

RSpec.describe WcaIdRequestMailer, type: :mailer do
describe "notify_board_of_confirmed_competition" do
let(:delegate) { FactoryGirl.create :delegate }
let(:person) { FactoryGirl.create :person }
let(:user_requesting_wca_id) { FactoryGirl.create :user, unconfirmed_wca_id: person.id, delegate_to_handle_wca_id_request: delegate }
let(:mail) { WcaIdRequestMailer.notify_delegate_of_wca_id_request(user_requesting_wca_id) }

it "renders" do
expect(mail.to).to eq([delegate.email])
expect(mail.cc).to eq([user_requesting_wca_id.email])
expect(mail.from).to eq(["[email protected]"])
expect(mail.reply_to).to eq([user_requesting_wca_id.email])

expect(mail.subject).to eq("#{user_requesting_wca_id.email} just requested WCA id #{person.id}")
expect(mail.body.encoded).to match(edit_user_path(user_requesting_wca_id.id, anchor: "user_wca_id"))
end
end
end

0 comments on commit 7d0aa32

Please sign in to comment.