Fix user already subscribed exception
Prevent excpetion at user subscription when already is subscribed to a conference and add hanling to the similar unsubscribe event. remove double validation at app/models/subscription.rb update subscription_controller_spec
This commit is contained in:
parent
8bd066afbc
commit
2bf7e4bbd3
3 changed files with 8 additions and 7 deletions
|
|
@ -5,17 +5,19 @@ class SubscriptionsController < ApplicationController
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@subscription = current_user.subscriptions.build(conference_id: @conference.id)
|
@subscription = current_user.subscriptions.build(conference_id: @conference.id)
|
||||||
if @subscription.save!
|
if @subscription.save
|
||||||
redirect_to root_path, notice: "You have been subscribed to receive email notifications for #{@conference.short_title}."
|
redirect_to root_path, notice: "You have subscribed to receive email notifications for #{@conference.title}."
|
||||||
else
|
else
|
||||||
redirect_to root_path, error: subscription.errors.full_messages.to_sentence
|
redirect_to root_path, error: @subscription.errors.full_messages.to_sentence
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@subscription = current_user.subscriptions.find_by(conference_id: @conference.id)
|
@subscription = current_user.subscriptions.find_by(conference_id: @conference.id)
|
||||||
|
|
||||||
|
redirect_to(root_path, error: "You are not subscribed to #{@conference.title}.") && return unless @subscription
|
||||||
if @subscription.destroy
|
if @subscription.destroy
|
||||||
redirect_to root_path, notice: "You have been unsubscribed and now you will not be receiving email notifications for #{@conference.short_title}."
|
redirect_to root_path, notice: "You have unsubscribed and you will not be receiving email notifications for #{@conference.title}."
|
||||||
else
|
else
|
||||||
redirect_to root_path, error: @subscription.errors.full_messages.to_sentence
|
redirect_to root_path, error: @subscription.errors.full_messages.to_sentence
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
class Subscription < ActiveRecord::Base
|
class Subscription < ActiveRecord::Base
|
||||||
validates :user_id, uniqueness: { scope: [:conference_id] }
|
|
||||||
belongs_to :conference
|
belongs_to :conference
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ describe SubscriptionsController do
|
||||||
|
|
||||||
it 'shows success message in flash notice' do
|
it 'shows success message in flash notice' do
|
||||||
post :create, conference_id: conference.short_title
|
post :create, conference_id: conference.short_title
|
||||||
expect(flash[:notice]).to match("You have been subscribed to receive email notifications for #{conference.short_title}")
|
expect(flash[:notice]).to match("You have subscribed to receive email notifications for #{conference.title}")
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'subscribes user to conference' do
|
it 'subscribes user to conference' do
|
||||||
|
|
@ -47,7 +47,7 @@ describe SubscriptionsController do
|
||||||
|
|
||||||
it 'shows success message in flash notice' do
|
it 'shows success message in flash notice' do
|
||||||
delete :destroy, conference_id: conference.short_title
|
delete :destroy, conference_id: conference.short_title
|
||||||
expect(flash[:notice]).to match("You have been unsubscribed and now you will not be receiving email notifications for #{conference.short_title}.")
|
expect(flash[:notice]).to match("You have unsubscribed and you will not be receiving email notifications for #{conference.title}.")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue