Skip to content

Commit a92e562

Browse files
authored
Specs: add tests for redirects in app.rb (stringer-rss#561)
Also made it so that auth check applies in test mode as well. Needed to make a couple of other changes to tests to get them working.
1 parent b15da45 commit a92e562

File tree

6 files changed

+68
-31
lines changed

6 files changed

+68
-31
lines changed

.rubocop_todo.yml

+13-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This configuration was generated by
22
# `rubocop --auto-gen-config`
3-
# on 2021-03-13 20:00:37 UTC using RuboCop version 1.10.0.
3+
# on 2021-03-28 01:11:19 UTC using RuboCop version 1.10.0.
44
# The point is for the user to remove these configuration records
55
# one by one as the offenses are removed from the code base.
66
# Note that changes in the inspected code, or installation of new
@@ -44,7 +44,7 @@ Layout/MultilineMethodArgumentLineBreaks:
4444
- 'spec/controllers/sessions_controller_spec.rb'
4545
- 'spec/javascript/test_controller.rb'
4646

47-
# Offense count: 725
47+
# Offense count: 744
4848
# Configuration parameters: Only, Ignore.
4949
Lint/ConstantResolution:
5050
Enabled: false
@@ -132,7 +132,7 @@ RSpec/DescribeClass:
132132
- 'spec/integration/feed_importing_spec.rb'
133133
- 'spec/utils/i18n_support_spec.rb'
134134

135-
# Offense count: 115
135+
# Offense count: 132
136136
# Cop supports --auto-correct.
137137
# Configuration parameters: SkipBlocks, EnforcedStyle.
138138
# SupportedStyles: described_class, explicit
@@ -244,7 +244,7 @@ RSpec/MessageExpectation:
244244
RSpec/MessageSpies:
245245
Enabled: false
246246

247-
# Offense count: 94
247+
# Offense count: 96
248248
RSpec/MultipleExpectations:
249249
Max: 8
250250

@@ -331,12 +331,13 @@ Rails/HasManyOrHasOneDependent:
331331
Exclude:
332332
- 'app/models/group.rb'
333333

334-
# Offense count: 24
334+
# Offense count: 28
335335
# Cop supports --auto-correct.
336336
# Configuration parameters: Include.
337337
# Include: spec/**/*, test/**/*
338338
Rails/HttpPositionalArguments:
339339
Exclude:
340+
- 'spec/app_spec.rb'
340341
- 'spec/controllers/debug_controller_spec.rb'
341342
- 'spec/controllers/feeds_controller_spec.rb'
342343
- 'spec/controllers/first_run_controller_spec.rb'
@@ -432,11 +433,10 @@ Rails/WhereEquals:
432433
- 'app/models/feed.rb'
433434
- 'app/repositories/story_repository.rb'
434435

435-
# Offense count: 2
436+
# Offense count: 1
436437
# Cop supports --auto-correct.
437438
Rails/WhereNot:
438439
Exclude:
439-
- 'app/repositories/feed_repository.rb'
440440
- 'spec/commands/feeds/import_from_opml_spec.rb'
441441

442442
# Offense count: 2
@@ -465,7 +465,7 @@ Style/DisableCopsWithinSourceCodeDirective:
465465
Style/DocumentationMethod:
466466
Enabled: false
467467

468-
# Offense count: 151
468+
# Offense count: 152
469469
# Cop supports --auto-correct.
470470
# Configuration parameters: EnforcedStyle.
471471
# SupportedStyles: always, always_true, never
@@ -477,7 +477,7 @@ Style/InlineComment:
477477
Exclude:
478478
- 'app/utils/opml_parser.rb'
479479

480-
# Offense count: 670
480+
# Offense count: 690
481481
# Cop supports --auto-correct.
482482
# Configuration parameters: IgnoreMacros, IgnoredMethods, IgnoredPatterns, IncludedMacros, AllowParenthesesInMultilineCall, AllowParenthesesInChaining, AllowParenthesesInCamelCaseMethod, EnforcedStyle.
483483
# SupportedStyles: require_parentheses, omit_parentheses
@@ -506,7 +506,7 @@ Style/NumericPredicate:
506506
Exclude:
507507
- 'app/commands/stories/mark_group_as_read.rb'
508508

509-
# Offense count: 30
509+
# Offense count: 28
510510
# Configuration parameters: SuspiciousParamNames.
511511
# SuspiciousParamNames: options, opts, args, params, parameters
512512
Style/OptionHash:
@@ -563,13 +563,15 @@ Style/StaticClass:
563563
- 'app/utils/api_key.rb'
564564
- 'app/utils/content_sanitizer.rb'
565565

566-
# Offense count: 18
566+
# Offense count: 19
567567
# Cop supports --auto-correct.
568568
Style/StringHashKeys:
569569
Exclude:
570570
- 'fever_api.rb'
571+
- 'spec/app_spec.rb'
571572
- 'spec/controllers/debug_controller_spec.rb'
572573
- 'spec/controllers/feeds_controller_spec.rb'
574+
- 'spec/controllers/first_run_controller_spec.rb'
573575
- 'spec/controllers/sessions_controller_spec.rb'
574576
- 'spec/fever_api/read_favicons_spec.rb'
575577
- 'spec/fever_api/read_feeds_groups_spec.rb'

app/helpers/authentication_helpers.rb

-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ def authenticated?
99
end
1010

1111
def needs_authentication?(path)
12-
return false if ENV["RACK_ENV"] == "test"
1312
return false unless UserRepository.setup_complete?
1413
return false if %w(/login /logout /heroku).include?(path)
1514
return false if path =~ /css|js|img/

spec/app_spec.rb

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
require "spec_helper"
2+
require "support/active_record"
3+
4+
describe "App" do
5+
context "when user is not authenticated and page requires authentication" do
6+
it "sets the session redirect_to" do
7+
create_user(:setup_complete)
8+
9+
get("/news")
10+
11+
expect(session[:redirect_to]).to eq("/news")
12+
end
13+
14+
it "redirects to /login" do
15+
create_user(:setup_complete)
16+
17+
get("/news")
18+
19+
expect(last_response).to be_redirect
20+
expect(last_response.headers["Location"]).to end_with("/login")
21+
end
22+
end
23+
24+
it "does not redirect when page needs no authentication" do
25+
create_user(:setup_complete)
26+
27+
get("/login")
28+
29+
expect(last_response).not_to be_redirect
30+
end
31+
32+
it "does not redirect when user is authenticated" do
33+
user = create_user(:setup_complete)
34+
35+
get("/news", {}, "rack.session" => { user_id: user.id })
36+
37+
expect(last_response).not_to be_redirect
38+
end
39+
end

spec/controllers/first_run_controller_spec.rb

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require "spec_helper"
2+
require "support/active_record"
23

34
app_require "controllers/first_run_controller"
45

@@ -72,20 +73,19 @@
7273
end
7374

7475
context "when a user has been setup" do
75-
before do
76-
allow(UserRepository).to receive(:setup_complete?).and_return(true)
77-
end
78-
7976
it "should redirect any requests to first run stuff" do
80-
get "/"
77+
user = create_user(:setup_complete)
78+
session = { "rack.session" => { user_id: user.id } }
79+
80+
get "/", {}, session
8181
expect(last_response.status).to be 302
8282
expect(URI.parse(last_response.location).path).to eq "/news"
8383

84-
get "/setup/password"
84+
get "/setup/password", {}, session
8585
expect(last_response.status).to be 302
8686
expect(URI.parse(last_response.location).path).to eq "/news"
8787

88-
get "/setup/tutorial"
88+
get "/setup/tutorial", {}, session
8989
expect(last_response.status).to be 302
9090
expect(URI.parse(last_response.location).path).to eq "/news"
9191
end

spec/factories/users.rb

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
module Factories
2-
def create_user(params = {})
3-
build_user(params).tap(&:save!)
2+
USER_TRAITS = {
3+
setup_complete: -> { { setup_complete: true } }
4+
}.freeze
5+
6+
def create_user(*traits, **params)
7+
build_user(*traits, **params).tap(&:save!)
48
end
59

6-
def build_user(params = {})
10+
def build_user(*traits, **params)
11+
traits.each { |trait| params.merge!(USER_TRAITS.fetch(trait).call) }
12+
713
User.new(password: "super-secret", **params)
814
end
915
end

spec/helpers/authentications_helper_spec.rb

-9
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,9 @@ class Helper # rubocop:disable Lint/ConstantDefinitionInBlock
1313
let(:authenticated_path) { "/news" }
1414

1515
before do
16-
stub_const("ENV", "RACK_ENV" => "not-test")
1716
allow(UserRepository).to receive(:setup_complete?).and_return(true)
1817
end
1918

20-
context "when `RACK_ENV` is 'test'" do
21-
it "returns false" do
22-
stub_const("ENV", "RACK_ENV" => "test")
23-
24-
expect(helper.needs_authentication?(authenticated_path)).to eq(false)
25-
end
26-
end
27-
2819
context "when setup in not complete" do
2920
it "returns false" do
3021
allow(UserRepository).to receive(:setup_complete?).and_return(false)

0 commit comments

Comments
 (0)