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:
Dimitris
2017-07-15 03:02:03 +03:00
committed by Stella Rouzi
parent 8bd066afbc
commit 2bf7e4bbd3
3 changed files with 8 additions and 7 deletions

View File

@@ -5,17 +5,19 @@ class SubscriptionsController < ApplicationController
def create
@subscription = current_user.subscriptions.build(conference_id: @conference.id)
if @subscription.save!
redirect_to root_path, notice: "You have been subscribed to receive email notifications for #{@conference.short_title}."
if @subscription.save
redirect_to root_path, notice: "You have subscribed to receive email notifications for #{@conference.title}."
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
def destroy
@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
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
redirect_to root_path, error: @subscription.errors.full_messages.to_sentence
end

View File

@@ -1,5 +1,4 @@
class Subscription < ActiveRecord::Base
validates :user_id, uniqueness: { scope: [:conference_id] }
belongs_to :conference
belongs_to :user

View File

@@ -24,7 +24,7 @@ describe SubscriptionsController do
it 'shows success message in flash notice' do
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
it 'subscribes user to conference' do
@@ -47,7 +47,7 @@ describe SubscriptionsController do
it 'shows success message in flash notice' do
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