Merge pull request #298 from gopesht/notify_on_date_change

Notify on date change
This commit is contained in:
James Mason 2014-07-15 08:10:21 -07:00
commit 143e20d1a3
11 changed files with 102 additions and 12 deletions

View file

@ -74,6 +74,19 @@ class Admin::ConferenceController < ApplicationController
def update def update
@conference = Conference.find_by(short_title: params[:id]) @conference = Conference.find_by(short_title: params[:id])
short_title = @conference.short_title short_title = @conference.short_title
@conference.assign_attributes(params[:conference])
if @conference.start_date_changed? || @conference.end_date_changed?
if @conference.email_settings.send_on_updated_conference_dates
Mailbot.conference_date_update_mail(@conference,date_string(@conference.start_date, @conference.end_date)).deliver
end
end
if @conference.registration_start_date_changed? || @conference.registration_end_date_changed?
if @conference.email_settings.send_on_updated_conference_registration_dates
Mailbot.conference_registration_date_update_mail(@conference,date_string(@conference.registration_start_date, @conference.registration_end_date)).deliver
end
end
if @conference.update_attributes(params[:conference]) if @conference.update_attributes(params[:conference])
redirect_to(edit_admin_conference_path(id: @conference.short_title), redirect_to(edit_admin_conference_path(id: @conference.short_title),
notice: 'Conference was successfully updated.') notice: 'Conference was successfully updated.')

View file

@ -38,6 +38,24 @@ class Mailbot < ActionMailer::Base
conference.email_settings.confirmed_but_not_registered_email(event)) conference.email_settings.confirmed_but_not_registered_email(event))
end end
def conference_date_update_mail(conference,dates)
subject = conference.email_settings.updated_conference_dates_subject.blank? ? "#{conference.title} Dates Updated" : conference.email_settings.updated_conference_dates_subject
partial = "#{conference.title}\n New Dates : #{dates}\n For more information visit #{Rails.application.routes.url_helpers.conference_path(conference.short_title, host: CONFIG['url_for_emails'])}"
body = conference.email_settings.updated_conference_dates_template.blank? ? "#{partial}" : "#{conference.email_settings.updated_conference_dates_template}\n #{partial}"
conference.registrations.each do |u|
build_email(conference, u.user.email, subject, body)
end
end
def conference_registration_date_update_mail(conference, dates)
subject = conference.email_settings.updated_conference_registration_dates_subject.blank? ? "#{conference.title} Registration Dates Updated" : conference.email_settings.updated_conference_registration_dates_subject
partial = "#{conference.title}\n New Registration Dates : #{dates}\n For more information visit #{Rails.application.routes.url_helpers.conference_path(conference.short_title, host: CONFIG['url_for_emails'])}"
body = conference.email_settings.updated_conference_registration_dates_template.blank? ? "#{partial}" : "#{conference.email_settings.updated_conference_dates_template}\n #{partial}"
conference.registrations.each do |u|
build_email(conference, u.user.email, subject, body)
end
end
def build_email(conference, to, subject, body) def build_email(conference, to, subject, body)
mail(:to => to, mail(:to => to,
:from => conference.contact_email, :from => conference.contact_email,

View file

@ -3,7 +3,10 @@ class EmailSettings < ActiveRecord::Base
:send_on_confirmed_without_registration, :registration_email_template, :send_on_confirmed_without_registration, :registration_email_template,
:accepted_email_template, :rejected_email_template, :confirmed_email_template, :accepted_email_template, :rejected_email_template, :confirmed_email_template,
:registration_subject, :accepted_subject, :rejected_subject, :registration_subject, :accepted_subject, :rejected_subject,
:confirmed_without_registration_subject :confirmed_without_registration_subject,
:send_on_updated_conference_dates, :updated_conference_dates_subject,
:updated_conference_dates_template, :send_on_updated_conference_registration_dates,
:updated_conference_registration_dates_subject, :updated_conference_registration_dates_template
def get_values(conference, user, event = nil) def get_values(conference, user, event = nil)
h = { h = {

View file

@ -35,6 +35,12 @@
= f.input :send_on_confirmed_without_registration, :label => false, :hint => "Send an email when a user has a confirmed proposal, but isn't yet registered?" = f.input :send_on_confirmed_without_registration, :label => false, :hint => "Send an email when a user has a confirmed proposal, but isn't yet registered?"
= f.input :confirmed_without_registration_subject = f.input :confirmed_without_registration_subject
= f.input :confirmed_email_template, :input_html => { :rows => 10, :cols => 20 } = f.input :confirmed_email_template, :input_html => { :rows => 10, :cols => 20 }
= f.input :send_on_updated_conference_dates, hint: "This is to notify all participants that the conference dates has been changed."
= f.input :updated_conference_dates_subject
= f.input :updated_conference_dates_template, :input_html => { :rows => 10, :cols => 20 }
= f.input :send_on_updated_conference_registration_dates, hint: "This is to notify all participants that the conference registration dates has been changed."
= f.input :updated_conference_registration_dates_subject
= f.input :updated_conference_registration_dates_template, :input_html => { :rows => 10, :cols => 20 }
= f.action :submit, :as => :button, :button_html => {:class => "btn btn-primary"} = f.action :submit, :as => :button, :button_html => {:class => "btn btn-primary"}
:javascript :javascript

View file

@ -0,0 +1,7 @@
class AddConferenceDatesUpdatesToEmailSettings < ActiveRecord::Migration
def change
add_column :email_settings, :send_on_updated_conference_dates, :boolean, default: true
add_column :email_settings, :updated_conference_dates_subject, :string
add_column :email_settings, :updated_conference_dates_template, :text
end
end

View file

@ -0,0 +1,7 @@
class AddConferenceRegistrationDatesUpdatesToEmailSettings < ActiveRecord::Migration
def change
add_column :email_settings, :send_on_updated_conference_registration_dates, :boolean, default: true
add_column :email_settings, :updated_conference_registration_dates_subject, :string
add_column :email_settings, :updated_conference_registration_dates_template, :text
end
end

View file

@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20140714141156) do ActiveRecord::Schema.define(version: 20140710130608) do
create_table "ahoy_events", force: true do |t| create_table "ahoy_events", force: true do |t|
t.uuid "visit_id" t.uuid "visit_id"
@ -150,10 +150,10 @@ ActiveRecord::Schema.define(version: 20140714141156) do
create_table "email_settings", force: true do |t| create_table "email_settings", force: true do |t|
t.integer "conference_id" t.integer "conference_id"
t.boolean "send_on_registration", default: true t.boolean "send_on_registration", default: true
t.boolean "send_on_accepted", default: true t.boolean "send_on_accepted", default: true
t.boolean "send_on_rejected", default: true t.boolean "send_on_rejected", default: true
t.boolean "send_on_confirmed_without_registration", default: true t.boolean "send_on_confirmed_without_registration", default: true
t.text "registration_email_template" t.text "registration_email_template"
t.text "accepted_email_template" t.text "accepted_email_template"
t.text "rejected_email_template" t.text "rejected_email_template"
@ -164,6 +164,12 @@ ActiveRecord::Schema.define(version: 20140714141156) do
t.string "accepted_subject" t.string "accepted_subject"
t.string "rejected_subject" t.string "rejected_subject"
t.string "confirmed_without_registration_subject" t.string "confirmed_without_registration_subject"
t.boolean "send_on_updated_conference_dates", default: true
t.string "updated_conference_dates_subject"
t.text "updated_conference_dates_template"
t.boolean "send_on_updated_conference_registration_dates", default: true
t.string "updated_conference_registration_dates_subject"
t.text "updated_conference_registration_dates_template"
end end
create_table "event_attachments", force: true do |t| create_table "event_attachments", force: true do |t|

View file

@ -21,7 +21,6 @@ describe Admin::ConferenceController do
it 'locates the requested conference' do it 'locates the requested conference' do
patch :update, id: conference.short_title, conference: patch :update, id: conference.short_title, conference:
attributes_for(:conference, title: 'Example Con') attributes_for(:conference, title: 'Example Con')
expect(assigns(:conference)).to eq(conference) expect(assigns(:conference)).to eq(conference)
end end
@ -42,6 +41,26 @@ describe Admin::ConferenceController do
expect(response).to redirect_to edit_admin_conference_path( expect(response).to redirect_to edit_admin_conference_path(
conference.short_title) conference.short_title)
end end
it 'sends email notification on conference date update' do
mailer = double
allow(mailer).to receive(:deliver)
conference.email_settings = create(:email_settings)
patch :update, id: conference.short_title, conference:
attributes_for(:conference, start_date: Date.today + 2.days, end_date: Date.today + 4.days)
conference.reload
allow(Mailbot).to receive(:conference_date_update_mail).and_return(mailer)
end
it 'sends email notification on conference registration date update' do
mailer = double
allow(mailer).to receive(:deliver)
conference.email_settings = create(:email_settings)
patch :update, id: conference.short_title, conference:
attributes_for(:conference, registration_start_date: Date.today + 2.days, registration_end_date: Date.today + 4.days)
conference.reload
allow(Mailbot).to receive(:conference_registration_date_update_mail).and_return(mailer)
end
end end
context 'invalid attributes' do context 'invalid attributes' do

View file

@ -8,7 +8,9 @@ FactoryGirl.define do
timezone 'Amsterdam' timezone 'Amsterdam'
contact_email 'admin@example.com' contact_email 'admin@example.com'
start_date Date.today start_date Date.today
end_date Date.tomorrow end_date Date.today + 6.days
registration_start_date Date.today + 3.days
registration_end_date Date.today + 5.days
make_conference_public true make_conference_public true
venue venue
end end

View file

@ -6,6 +6,12 @@ FactoryGirl.define do
send_on_accepted false send_on_accepted false
send_on_rejected false send_on_rejected false
send_on_confirmed_without_registration false send_on_confirmed_without_registration false
send_on_updated_conference_dates true
send_on_updated_conference_registration_dates true
updated_conference_dates_template 'Sample Conference\n New Dates: January 17 - 21 2014'
updated_conference_dates_subject 'Conference dates have been updated'
updated_conference_registration_dates_subject 'Conference registration dates have been updated'
updated_conference_registration_dates_template 'Sample Conference\n New Dates: January 17 - 21 2014'
registration_subject 'Lorem Ipsum Dolsum' registration_subject 'Lorem Ipsum Dolsum'
registration_email_template 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit' registration_email_template 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit'
end end

View file

@ -1,19 +1,22 @@
require 'spec_helper' require 'spec_helper'
describe 'admin/emails/index' do describe 'admin/emails/index' do
it 'renders email templates' do it 'renders email templates' do
@conference = create(:conference) @conference = create(:conference)
assign :conference, @conference assign :conference, @conference
@settings = create(:email_settings) @settings = create(:email_settings)
assign :settings, @settings assign :settings, @settings
render render
expect(rendered). expect(rendered).
to have_selector("input[type='checkbox'][value='1']", count: 4) to have_selector("input[type='checkbox'][value='1']", count: 6)
expect(rendered). expect(rendered).
to have_selector("input[checked='checked'][type='checkbox'][value='1']", count: 1) to have_selector("input[checked='checked'][type='checkbox'][value='1']", count: 3)
expect(rendered).to include('Lorem Ipsum Dolsum') expect(rendered).to include('Lorem Ipsum Dolsum')
expect(rendered). expect(rendered).
to include('Lorem ipsum dolor sit amet, consectetuer adipiscing elit') to include('Lorem ipsum dolor sit amet, consectetuer adipiscing elit')
expect(rendered).
to include('Conference dates have been updated')
expect(rendered).
to include('Conference registration dates have been updated')
end end
end end