Skip to content

Commit b63bb5e

Browse files
committed
Add newsletter index route for current user
1 parent b12225d commit b63bb5e

File tree

3 files changed

+47
-8
lines changed

3 files changed

+47
-8
lines changed

app/controllers/users/newsletter_subscriptions_controller.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
class Users::NewsletterSubscriptionsController < ApplicationController
22
invisible_captcha only: [:create]
33

4-
# TODO: Implement singular resource index action for logged in user
5-
# before_action :authenticate_user!, only: [:index]
4+
before_action :authenticate_user_or_not_found!, only: [:index]
65

7-
# def index
8-
# @newsletter_subscription = current_user.newsletter_subscription || current_user.build_newsletter_subscription
9-
# render :show
10-
# end
6+
def index
7+
@newsletter_subscription = current_user.newsletter_subscription || current_user.build_newsletter_subscription
8+
9+
render Users::NewsletterSubscriptions::ShowView.new(newsletter_subscription: @newsletter_subscription)
10+
end
1111

1212
def show
1313
@newsletter_subscription = NewsletterSubscription.find(params[:id]) or raise ActiveRecord::RecordNotFound
@@ -59,7 +59,7 @@ def unsubscribe
5959
# all because has_one is not enforced as a constraint
6060
NewsletterSubscription.where(subscriber: current_user).destroy_all
6161
else
62-
raise ActiveRecord::RecordNotFound
62+
not_found!
6363
end
6464

6565
if request.post? && params["List-Unsubscribe"] == "One-Click"

config/routes.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
resources :confirmations, only: [:new, :create, :edit, :update], param: :token
3838
resources :passwords, only: [:new, :create, :edit, :update], param: :token
3939

40-
resources :newsletter_subscriptions, only: [:new, :create, :show]
40+
resources :newsletter_subscriptions, only: [:new, :create, :index, :show]
4141
resources :newsletter_subscriptions, only: [], param: :token do
4242
match :unsubscribe, on: :collection, via: [:get, :post, :delete]
4343
match :unsubscribe, on: :member, via: [:get, :post, :delete]

spec/requests/users/newsletter_subscriptions_spec.rb

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,45 @@
1919
end
2020
end
2121

22+
describe "GET show" do
23+
it "succeeds for existing subscription" do
24+
subscription = FactoryBot.create(:newsletter_subscription)
25+
get users_newsletter_subscription_path(subscription)
26+
27+
expect(response).to have_http_status(:ok)
28+
end
29+
30+
it "fails otherwise" do
31+
get users_newsletter_subscription_path("not-found")
32+
33+
expect(response).to have_http_status(:not_found)
34+
end
35+
end
36+
37+
describe "GET index" do
38+
it "succeeds for logged in user with subscription" do
39+
login_user FactoryBot.create(:user, :subscribed)
40+
41+
get users_newsletter_subscriptions_path
42+
43+
expect(response).to have_http_status(:ok)
44+
end
45+
46+
it "succeeds for logged in user without subscription" do
47+
login_user FactoryBot.create(:user, :unsubscribed)
48+
49+
get users_newsletter_subscriptions_path
50+
51+
expect(response).to have_http_status(:ok)
52+
end
53+
54+
it "requires authentication" do
55+
get users_newsletter_subscriptions_path
56+
57+
expect(response).to have_http_status(:not_found)
58+
end
59+
end
60+
2261
describe "POST create" do
2362
it "succeeds for unauthenticated request" do
2463
email = FactoryBot.generate(:email)

0 commit comments

Comments
 (0)