From 75cf1123cfcf572e2c4e108d3ad828fca4090e6e Mon Sep 17 00:00:00 2001 From: Gopesh Tulsyan Date: Mon, 7 Jul 2014 17:55:34 +0530 Subject: [PATCH 1/5] Adds email template and settings for conference dates updates --- app/models/email_settings.rb | 4 +++- app/views/admin/emails/index.html.haml | 3 +++ ...20158_add_conference_dates_updates_to_email_settings.rb | 7 +++++++ db/schema.rb | 3 +++ 4 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20140707120158_add_conference_dates_updates_to_email_settings.rb diff --git a/app/models/email_settings.rb b/app/models/email_settings.rb index 532869cc..876a1c1a 100644 --- a/app/models/email_settings.rb +++ b/app/models/email_settings.rb @@ -3,7 +3,9 @@ class EmailSettings < ActiveRecord::Base :send_on_confirmed_without_registration, :registration_email_template, :accepted_email_template, :rejected_email_template, :confirmed_email_template, :registration_subject, :accepted_subject, :rejected_subject, - :confirmed_without_registration_subject + :confirmed_without_registration_subject, + :send_on_updated_conferences_dates, :updated_conference_dates_subject + :updated_conference_dates_template def get_values(conference, user, event = nil) h = { diff --git a/app/views/admin/emails/index.html.haml b/app/views/admin/emails/index.html.haml index c33b0596..43474048 100644 --- a/app/views/admin/emails/index.html.haml +++ b/app/views/admin/emails/index.html.haml @@ -35,6 +35,9 @@ = 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_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.action :submit, :as => :button, :button_html => {:class => "btn btn-primary"} :javascript diff --git a/db/migrate/20140707120158_add_conference_dates_updates_to_email_settings.rb b/db/migrate/20140707120158_add_conference_dates_updates_to_email_settings.rb new file mode 100644 index 00000000..24889597 --- /dev/null +++ b/db/migrate/20140707120158_add_conference_dates_updates_to_email_settings.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index ad4bad11..f2d0733a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -164,6 +164,9 @@ ActiveRecord::Schema.define(version: 20140714141156) do t.string "accepted_subject" t.string "rejected_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" end create_table "event_attachments", force: true do |t| From 861c1af729916f59e13780cbc9c5e257c808fdb5 Mon Sep 17 00:00:00 2001 From: Gopesh Tulsyan Date: Tue, 8 Jul 2014 15:42:35 +0530 Subject: [PATCH 2/5] Conference date update email notification completed Added tests --- app/controllers/admin/conference_controller.rb | 7 +++++++ app/mailers/mailbot.rb | 9 +++++++++ app/models/email_settings.rb | 2 +- spec/factories/email_settings.rb | 2 ++ spec/views/admin/emails/index.html.haml_spec.rb | 9 +++++---- 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/app/controllers/admin/conference_controller.rb b/app/controllers/admin/conference_controller.rb index 6093d2d2..a30905e5 100644 --- a/app/controllers/admin/conference_controller.rb +++ b/app/controllers/admin/conference_controller.rb @@ -1,4 +1,5 @@ class Admin::ConferenceController < ApplicationController + include HomeHelper before_filter :verify_organizer def index @@ -74,6 +75,12 @@ class Admin::ConferenceController < ApplicationController def update @conference = Conference.find_by(short_title: params[:id]) 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.update_attributes(params[:conference]) redirect_to(edit_admin_conference_path(id: @conference.short_title), notice: 'Conference was successfully updated.') diff --git a/app/mailers/mailbot.rb b/app/mailers/mailbot.rb index abc60968..fefaed2c 100644 --- a/app/mailers/mailbot.rb +++ b/app/mailers/mailbot.rb @@ -38,6 +38,15 @@ class Mailbot < ActionMailer::Base conference.email_settings.confirmed_but_not_registered_email(event)) 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 build_email(conference, to, subject, body) mail(:to => to, :from => conference.contact_email, diff --git a/app/models/email_settings.rb b/app/models/email_settings.rb index 876a1c1a..5735a2f0 100644 --- a/app/models/email_settings.rb +++ b/app/models/email_settings.rb @@ -4,7 +4,7 @@ class EmailSettings < ActiveRecord::Base :accepted_email_template, :rejected_email_template, :confirmed_email_template, :registration_subject, :accepted_subject, :rejected_subject, :confirmed_without_registration_subject, - :send_on_updated_conferences_dates, :updated_conference_dates_subject + :send_on_updated_conference_dates, :updated_conference_dates_subject, :updated_conference_dates_template def get_values(conference, user, event = nil) diff --git a/spec/factories/email_settings.rb b/spec/factories/email_settings.rb index e0856537..cda8bcc6 100644 --- a/spec/factories/email_settings.rb +++ b/spec/factories/email_settings.rb @@ -6,6 +6,8 @@ FactoryGirl.define do send_on_accepted false send_on_rejected false send_on_confirmed_without_registration false + send_on_updated_conference_dates true + updated_conference_dates_subject 'Conference dates have been updated' registration_subject 'Lorem Ipsum Dolsum' registration_email_template 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit' end diff --git a/spec/views/admin/emails/index.html.haml_spec.rb b/spec/views/admin/emails/index.html.haml_spec.rb index de09ac8f..fec814f9 100644 --- a/spec/views/admin/emails/index.html.haml_spec.rb +++ b/spec/views/admin/emails/index.html.haml_spec.rb @@ -1,19 +1,20 @@ require 'spec_helper' describe 'admin/emails/index' do - it 'renders email templates' do + it 'renders email templates' do @conference = create(:conference) assign :conference, @conference @settings = create(:email_settings) assign :settings, @settings render expect(rendered). - to have_selector("input[type='checkbox'][value='1']", count: 4) + to have_selector("input[type='checkbox'][value='1']", count: 5) 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: 2) expect(rendered).to include('Lorem Ipsum Dolsum') expect(rendered). to include('Lorem ipsum dolor sit amet, consectetuer adipiscing elit') + expect(rendered). + to include('Conference dates have been updated') end - end From c16d76c9b894ebcbf56f5b04276a41632188464e Mon Sep 17 00:00:00 2001 From: Gopesh Tulsyan Date: Thu, 10 Jul 2014 18:41:28 +0530 Subject: [PATCH 3/5] Adds migration for Conference Registration Dates to Email Settings --- app/models/email_settings.rb | 3 ++- ...egistration_dates_updates_to_email_settings.rb | 7 +++++++ db/schema.rb | 15 +++++++++------ 3 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 db/migrate/20140710130608_add_conference_registration_dates_updates_to_email_settings.rb diff --git a/app/models/email_settings.rb b/app/models/email_settings.rb index 5735a2f0..633c6834 100644 --- a/app/models/email_settings.rb +++ b/app/models/email_settings.rb @@ -5,7 +5,8 @@ class EmailSettings < ActiveRecord::Base :registration_subject, :accepted_subject, :rejected_subject, :confirmed_without_registration_subject, :send_on_updated_conference_dates, :updated_conference_dates_subject, - :updated_conference_dates_template + :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) h = { diff --git a/db/migrate/20140710130608_add_conference_registration_dates_updates_to_email_settings.rb b/db/migrate/20140710130608_add_conference_registration_dates_updates_to_email_settings.rb new file mode 100644 index 00000000..6313619b --- /dev/null +++ b/db/migrate/20140710130608_add_conference_registration_dates_updates_to_email_settings.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index f2d0733a..1cc455ee 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # 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| t.uuid "visit_id" @@ -150,10 +150,10 @@ ActiveRecord::Schema.define(version: 20140714141156) do create_table "email_settings", force: true do |t| t.integer "conference_id" - t.boolean "send_on_registration", default: true - t.boolean "send_on_accepted", default: true - t.boolean "send_on_rejected", default: true - t.boolean "send_on_confirmed_without_registration", default: true + t.boolean "send_on_registration", default: true + t.boolean "send_on_accepted", default: true + t.boolean "send_on_rejected", default: true + t.boolean "send_on_confirmed_without_registration", default: true t.text "registration_email_template" t.text "accepted_email_template" t.text "rejected_email_template" @@ -164,9 +164,12 @@ ActiveRecord::Schema.define(version: 20140714141156) do t.string "accepted_subject" t.string "rejected_subject" t.string "confirmed_without_registration_subject" - t.boolean "send_on_updated_conference_dates", default: true + 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 create_table "event_attachments", force: true do |t| From 6d847547b7a786279eedfb1f00c67ee72760e021 Mon Sep 17 00:00:00 2001 From: Gopesh Tulsyan Date: Thu, 10 Jul 2014 22:11:27 +0530 Subject: [PATCH 4/5] Adds email template and settings for conference registration dates updates Added tests Minor typo --- app/controllers/admin/conference_controller.rb | 8 +++++++- app/mailers/mailbot.rb | 11 ++++++++++- app/views/admin/emails/index.html.haml | 3 +++ spec/factories/email_settings.rb | 2 ++ spec/views/admin/emails/index.html.haml_spec.rb | 6 ++++-- 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/app/controllers/admin/conference_controller.rb b/app/controllers/admin/conference_controller.rb index a30905e5..b4d25a43 100644 --- a/app/controllers/admin/conference_controller.rb +++ b/app/controllers/admin/conference_controller.rb @@ -1,5 +1,4 @@ class Admin::ConferenceController < ApplicationController - include HomeHelper before_filter :verify_organizer def index @@ -81,6 +80,13 @@ class Admin::ConferenceController < ApplicationController 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]) redirect_to(edit_admin_conference_path(id: @conference.short_title), notice: 'Conference was successfully updated.') diff --git a/app/mailers/mailbot.rb b/app/mailers/mailbot.rb index fefaed2c..a7bd0807 100644 --- a/app/mailers/mailbot.rb +++ b/app/mailers/mailbot.rb @@ -39,7 +39,7 @@ class Mailbot < ActionMailer::Base 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 + 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| @@ -47,6 +47,15 @@ class Mailbot < ActionMailer::Base 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) mail(:to => to, :from => conference.contact_email, diff --git a/app/views/admin/emails/index.html.haml b/app/views/admin/emails/index.html.haml index 43474048..0cf146ff 100644 --- a/app/views/admin/emails/index.html.haml +++ b/app/views/admin/emails/index.html.haml @@ -38,6 +38,9 @@ = 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"} :javascript diff --git a/spec/factories/email_settings.rb b/spec/factories/email_settings.rb index cda8bcc6..a21238ac 100644 --- a/spec/factories/email_settings.rb +++ b/spec/factories/email_settings.rb @@ -7,7 +7,9 @@ FactoryGirl.define do send_on_rejected false send_on_confirmed_without_registration false send_on_updated_conference_dates true + send_on_updated_conference_registration_dates true updated_conference_dates_subject 'Conference dates have been updated' + updated_conference_registration_dates_subject 'Conference registration dates have been updated' registration_subject 'Lorem Ipsum Dolsum' registration_email_template 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit' end diff --git a/spec/views/admin/emails/index.html.haml_spec.rb b/spec/views/admin/emails/index.html.haml_spec.rb index fec814f9..c6acb8d1 100644 --- a/spec/views/admin/emails/index.html.haml_spec.rb +++ b/spec/views/admin/emails/index.html.haml_spec.rb @@ -8,13 +8,15 @@ describe 'admin/emails/index' do assign :settings, @settings render expect(rendered). - to have_selector("input[type='checkbox'][value='1']", count: 5) + to have_selector("input[type='checkbox'][value='1']", count: 6) expect(rendered). - to have_selector("input[checked='checked'][type='checkbox'][value='1']", count: 2) + 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 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 From 8acf3c088a5be3e35ad2bb6b5b74b4ebf32c00e4 Mon Sep 17 00:00:00 2001 From: Gopesh Tulsyan Date: Sun, 13 Jul 2014 11:55:42 +0530 Subject: [PATCH 5/5] Added test for email notification on conference dates and registration dates updates --- .../admin/conferences_controller_spec.rb | 21 ++++++++++++++++++- spec/factories/conferences.rb | 4 +++- spec/factories/email_settings.rb | 2 ++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/spec/controllers/admin/conferences_controller_spec.rb b/spec/controllers/admin/conferences_controller_spec.rb index d1845584..86523fc1 100644 --- a/spec/controllers/admin/conferences_controller_spec.rb +++ b/spec/controllers/admin/conferences_controller_spec.rb @@ -21,7 +21,6 @@ describe Admin::ConferenceController do it 'locates the requested conference' do patch :update, id: conference.short_title, conference: attributes_for(:conference, title: 'Example Con') - expect(assigns(:conference)).to eq(conference) end @@ -42,6 +41,26 @@ describe Admin::ConferenceController do expect(response).to redirect_to edit_admin_conference_path( conference.short_title) 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 context 'invalid attributes' do diff --git a/spec/factories/conferences.rb b/spec/factories/conferences.rb index 3b07782c..e4b6732f 100644 --- a/spec/factories/conferences.rb +++ b/spec/factories/conferences.rb @@ -8,7 +8,9 @@ FactoryGirl.define do timezone 'Amsterdam' contact_email 'admin@example.com' 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 venue end diff --git a/spec/factories/email_settings.rb b/spec/factories/email_settings.rb index a21238ac..ec4887ed 100644 --- a/spec/factories/email_settings.rb +++ b/spec/factories/email_settings.rb @@ -8,8 +8,10 @@ FactoryGirl.define do 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_email_template 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit' end