Skip to content

Commit 75fc313

Browse files
committed
Update linkable model request specs
1 parent 6302ee9 commit 75fc313

File tree

6 files changed

+245
-43
lines changed

6 files changed

+245
-43
lines changed

app/controllers/resources_controller.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ def create
6161
else
6262
@resource = @resource.decorate
6363
set_form_variables
64-
flash[:alert] = "Unable to save #{@resource.title.titleize}"
65-
render :new
64+
flash[:alert] = "Unable to save #{@resource.title.presence || 'resource'}"
65+
render :new, status: :unprocessable_content
6666
end
6767
end
6868

@@ -75,7 +75,7 @@ def update
7575
else
7676
set_form_variables
7777
flash[:alert] = "Failed to update Resource."
78-
render :edit
78+
render :edit, status: :unprocessable_content
7979
end
8080
end
8181

app/models/concerns/view_countable.rb

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,31 @@
11
module ViewCountable
22
extend ActiveSupport::Concern
33

4-
# def increment_view_count!(session:, request:)
5-
# return unless request.get?
6-
# return unless request.format.html?
7-
# # return if request.headers["Turbo-Frame"]
8-
#
9-
# session_key = :"viewed_#{self.class.name}_ids"
10-
# session[session_key] ||= []
11-
# return if session[session_key].include?(id)
12-
#
13-
# increment!(:view_count)
14-
# session[session_key] << id
15-
# end
16-
17-
def increment_view_count!(session:, request:)
18-
Rails.logger.warn do
19-
"[VIEW COUNT] called " \
20-
"model=#{self.class.name} " \
21-
"id=#{id} " \
22-
"path=#{request.fullpath} " \
23-
"format=#{request.format} " \
24-
"ua=#{request.user_agent}"
4+
def increment_view_count!(session:, request: nil)
5+
# Rails.logger.warn do
6+
# "[VIEW COUNT] called " \
7+
# "model=#{self.class.name} " \
8+
# "id=#{id} " \
9+
# "path=#{request.fullpath} " \
10+
# "format=#{request.format} " \
11+
# "ua=#{request.user_agent}"
12+
# end
13+
14+
if request
15+
return unless request.request_method.in?(%w[GET HEAD])
16+
return unless request.format.html? || request.format.turbo_stream?
2517
end
2618

27-
return unless request.request_method.in?(%w[GET HEAD])
28-
return unless request.format.html? || request.format.turbo_stream?
29-
3019
session_key = :"viewed_#{self.class.name}_ids"
3120
session[session_key] ||= []
3221
return if session[session_key].include?(id)
3322

3423
increment!(:view_count)
3524
session[session_key] << id
3625

37-
Rails.logger.warn do
38-
"[VIEW COUNT] incremented id=#{id} new_value=#{view_count}"
39-
end
26+
# Rails.logger.warn do
27+
# "[VIEW COUNT] incremented id=#{id} new_value=#{view_count}"
28+
# end
4029
end
4130

4231

spec/models/concerns/view_countable_spec.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
it "increments view_count once per session" do
88
workshop = create(:workshop, view_count: 0)
99

10-
workshop.increment_view_count!(session: session, request: request)
11-
workshop.increment_view_count!(session: session, request: request)
10+
workshop.increment_view_count!(session: session, request: nil)
11+
workshop.increment_view_count!(session: session, request: nil)
1212

1313
expect(workshop.reload.view_count).to eq(1)
1414
end
@@ -17,8 +17,8 @@
1717
workshop = create(:workshop, view_count: 0)
1818
resource = create(:resource, view_count: 0)
1919

20-
workshop.increment_view_count!(session: session, request: request)
21-
resource.increment_view_count!(session: session, request: request)
20+
workshop.increment_view_count!(session: session, request: nil)
21+
resource.increment_view_count!(session: session, request: nil)
2222

2323
expect(workshop.reload.view_count).to eq(1)
2424
expect(resource.reload.view_count).to eq(1)

spec/requests/community_news_spec.rb

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
{
2424
title: "Title2",
2525
body: "MyText",
26-
youtube_url: "Youtube Url",
2726
published: false,
2827
featured: false,
2928
author_id: admin.id,
@@ -59,13 +58,37 @@
5958
end
6059

6160
describe "GET /show" do
62-
it "renders a successful response" do
63-
community_news = CommunityNews.create! valid_attributes
64-
get community_news_url(community_news)
65-
expect(response).to be_successful
61+
context "when community_news has NO external link" do
62+
let(:community_news) do
63+
CommunityNews.create!(
64+
valid_attributes.merge(reference_url: nil)
65+
)
66+
end
67+
68+
it "renders the show page" do
69+
get community_news_url(community_news)
70+
71+
expect(response).to have_http_status(:ok)
72+
end
73+
end
74+
75+
context "when community_news HAS an external link" do
76+
let(:community_news) do
77+
CommunityNews.create!(
78+
valid_attributes.merge(reference_url: "www.google.com")
79+
)
80+
end
81+
82+
it "redirects to the external URL" do
83+
get community_news_url(community_news)
84+
85+
expect(response).to have_http_status(:found)
86+
expect(response).to redirect_to("https://www.google.com")
87+
end
6688
end
6789
end
6890

91+
6992
describe "GET /new" do
7093
it "renders a successful response" do
7194
get new_community_news_url

spec/requests/resources_spec.rb

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
require "rails_helper"
2+
3+
RSpec.describe "/resources", type: :request do
4+
let(:user) { create(:user) }
5+
let(:windows_type) { create(:windows_type) }
6+
let(:project) { create(:project) }
7+
8+
let(:valid_attributes) do
9+
{
10+
title: "Helpful Resource",
11+
text: "This is a very helpful resource.",
12+
url: "https://www.example.com",
13+
inactive: false,
14+
kind: Resource::PUBLISHED_KINDS.first,
15+
windows_type_id: windows_type.id,
16+
user_id: user.id,
17+
}
18+
end
19+
20+
let(:invalid_attributes) do
21+
{
22+
title: nil,
23+
text: "",
24+
kind: nil,
25+
user_id: user.id # REQUIRED
26+
}
27+
end
28+
29+
before do
30+
sign_in user
31+
end
32+
33+
describe "GET /index" do
34+
it "renders a successful response" do
35+
Resource.create! valid_attributes
36+
get resources_url
37+
38+
expect(response).to have_http_status(:ok)
39+
end
40+
end
41+
42+
describe "GET /show" do
43+
context "when resource has NO external link" do
44+
let(:resource) do
45+
Resource.create!(valid_attributes.merge(url: nil))
46+
end
47+
48+
it "renders the show page" do
49+
get resource_url(resource)
50+
51+
expect(response).to have_http_status(:ok)
52+
end
53+
end
54+
55+
context "when resource HAS an external link" do
56+
let(:resource) do
57+
Resource.create!(
58+
valid_attributes.merge(url: "www.google.com")
59+
)
60+
end
61+
62+
it "redirects to the external URL" do
63+
get resource_url(resource)
64+
65+
expect(response).to have_http_status(:found)
66+
expect(response).to redirect_to("https://www.google.com")
67+
end
68+
end
69+
end
70+
71+
describe "GET /new" do
72+
it "renders a successful response" do
73+
get new_resource_url
74+
75+
expect(response).to have_http_status(:ok)
76+
end
77+
end
78+
79+
describe "GET /edit" do
80+
it "renders a successful response" do
81+
resource = Resource.create! valid_attributes
82+
get edit_resource_url(resource)
83+
84+
expect(response).to have_http_status(:ok)
85+
end
86+
end
87+
88+
describe "POST /create" do
89+
context "with valid parameters" do
90+
it "creates a new Resource" do
91+
expect {
92+
post resources_url, params: { resource: valid_attributes }
93+
}.to change(Resource, :count).by(1)
94+
end
95+
96+
it "redirects to the resources index" do
97+
post resources_url, params: { resource: valid_attributes }
98+
99+
expect(response).to redirect_to(resources_url)
100+
end
101+
end
102+
103+
context "with invalid parameters" do
104+
it "does not create a new Resource" do
105+
expect {
106+
post resources_url, params: { resource: invalid_attributes }
107+
}.not_to change(Resource, :count)
108+
end
109+
110+
it "renders a response with 422 status" do
111+
post resources_url, params: { resource: invalid_attributes }
112+
113+
expect(response).to have_http_status(:unprocessable_content)
114+
end
115+
end
116+
end
117+
118+
describe "PATCH /update" do
119+
context "with valid parameters" do
120+
let(:new_attributes) do
121+
valid_attributes.merge(title: "Updated Resource Title")
122+
end
123+
124+
it "updates the requested resource" do
125+
resource = Resource.create! valid_attributes
126+
patch resource_url(resource), params: { resource: new_attributes }
127+
128+
resource.reload
129+
expect(resource.title).to eq("Updated Resource Title")
130+
end
131+
132+
it "redirects to the resources index" do
133+
resource = Resource.create! valid_attributes
134+
patch resource_url(resource), params: { resource: new_attributes }
135+
136+
expect(response).to redirect_to(resources_url)
137+
end
138+
end
139+
140+
context "with invalid parameters" do
141+
it "renders a response with 422 status" do
142+
resource = Resource.create! valid_attributes
143+
patch resource_url(resource), params: { resource: invalid_attributes }
144+
145+
expect(response).to have_http_status(:unprocessable_content)
146+
end
147+
end
148+
end
149+
150+
describe "DELETE /destroy" do
151+
it "destroys the requested resource" do
152+
resource = Resource.create! valid_attributes
153+
154+
expect {
155+
delete resource_url(resource)
156+
}.to change(Resource, :count).by(-1)
157+
end
158+
159+
it "redirects to the resources list" do
160+
resource = Resource.create! valid_attributes
161+
delete resource_url(resource)
162+
163+
expect(response).to redirect_to(resources_url)
164+
end
165+
end
166+
end

spec/requests/stories_spec.rb

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
title: "A Great Story",
2828
body: "Once upon a time, there was a great Rails developer...",
2929
youtube_url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
30+
website_url: "https://www.example.com",
3031
published: true,
3132
windows_type_id: windows_type.id,
3233
workshop_id: workshop.id,
@@ -57,10 +58,33 @@
5758
end
5859

5960
describe "GET /show" do
60-
it "renders a successful response" do
61-
story = Story.create! valid_attributes
62-
get story_url(story)
63-
expect(response).to be_successful
61+
context "when story has NO external link" do
62+
let(:story) do
63+
Story.create!(
64+
valid_attributes.merge(website_url: nil)
65+
)
66+
end
67+
68+
it "renders the show page" do
69+
get story_url(story)
70+
71+
expect(response).to have_http_status(:ok)
72+
end
73+
end
74+
75+
context "when story HAS an external link" do
76+
let(:story) do
77+
Story.create!(
78+
valid_attributes.merge(website_url: "www.google.com")
79+
)
80+
end
81+
82+
it "redirects to the external URL" do
83+
get story_url(story)
84+
85+
expect(response).to have_http_status(:found)
86+
expect(response).to redirect_to("https://www.google.com")
87+
end
6488
end
6589
end
6690

0 commit comments

Comments
 (0)