Commit c61a54f7 authored by Rémy Coutable's avatar Rémy Coutable

Fix initial implementation to actually render the unsubscribe page

Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
parent b3357308
......@@ -2,12 +2,15 @@ class SentNotificationsController < ApplicationController
skip_before_action :authenticate_user!
def unsubscribe
return redirect_to new_user_session_path unless current_user || params[:force]
@sent_notification = SentNotification.for(params[:id])
return render_404 unless @sent_notification && @sent_notification.unsubscribable?
return unsubscribe_and_redirect if current_user || params[:force]
end
private
def unsubscribe_and_redirect
noteable = @sent_notification.noteable
noteable.unsubscribe(@sent_notification.recipient)
......
%h3.page-title
Are you sure you want to unsubscribe from this thread?
- noteable = @sent_notification.noteable
- noteable_type = @sent_notification.noteable_type.humanize(capitalize: false)
- noteable_text = %(#{noteable_type} "#{noteable.title}" (#{noteable.to_reference}))
- title = "Unsubscribe from #{noteable_text}"
= link_to "Unsubscribe", unsubscribe_sent_notification_path(@sent_notification, force: true), class: 'btn btn-primary wide'
- page_title title
%h3.page-title= title
%p= "Are you sure you want to unsubscribe from #{noteable_text}?"
%p
= link_to 'Unsubscribe', unsubscribe_sent_notification_path(@sent_notification, force: true),
class: 'btn btn-primary append-right-10'
= link_to 'Cancel', new_user_session_path, class: 'btn append-right-10'
......@@ -41,7 +41,7 @@ describe SentNotificationsController, type: :controller do
end
it 'redirects to the login page' do
expect(response).to redirect_to(new_user_session_path)
expect(response).to render_template :unsubscribe
end
end
end
......@@ -83,19 +83,25 @@ describe SentNotificationsController, type: :controller do
end
context 'when the force param is not passed' do
let(:merge_request) do
create(:merge_request, source_project: project, author: user) do |merge_request|
merge_request.subscriptions.create(user: user, subscribed: true)
end
end
let(:sent_notification) { create(:sent_notification, noteable: merge_request, recipient: user) }
before { get(:unsubscribe, id: sent_notification.reply_key) }
it 'unsubscribes the user' do
expect(issue.subscribed?(user)).to be_falsey
expect(merge_request.subscribed?(user)).to be_falsey
end
it 'sets the flash message' do
expect(controller).to set_flash[:notice].to(/unsubscribed/).now
end
it 'redirects to the issue page' do
it 'redirects to the merge request page' do
expect(response).
to redirect_to(namespace_project_issue_path(project.namespace, project, issue))
to redirect_to(namespace_project_merge_request_path(project.namespace, project, merge_request))
end
end
end
......
......@@ -19,11 +19,32 @@ describe 'Unsubscribe links', feature: true do
end
context 'when logged out' do
it 'redirects to the login page when visiting the link from the body' do
visit body_link
context 'when visiting the link from the body' do
it 'shows the unsubscribe confirmation page and redirects to root path when confirming' do
visit body_link
expect(current_path).to eq unsubscribe_sent_notification_path(SentNotification.last)
expect(page).to have_text(%(Unsubscribe from issue "#{issue.title}" (#{issue.to_reference})))
expect(page).to have_text(%(Are you sure you want to unsubscribe from issue "#{issue.title}" (#{issue.to_reference})?))
expect(issue.subscribed?(recipient)).to be_truthy
click_link 'Unsubscribe'
expect(issue.subscribed?(recipient)).to be_falsey
expect(current_path).to eq new_user_session_path
end
it 'shows the unsubscribe confirmation page and redirects to root path when canceling' do
visit body_link
expect(current_path).to eq unsubscribe_sent_notification_path(SentNotification.last)
expect(issue.subscribed?(recipient)).to be_truthy
click_link 'Cancel'
expect(current_path).to eq new_user_session_path
expect(issue.subscribed?(recipient)).to be_truthy
expect(issue.subscribed?(recipient)).to be_truthy
expect(current_path).to eq new_user_session_path
end
end
it 'unsubscribes from the issue when visiting the link from the header' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment