Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ jobs:
- gemfiles/rails_5_2.gemfile
- gemfiles/rails_6_0.gemfile
- gemfiles/rails_7_0.gemfile
- gemfiles/rails_7_1.gemfile
db:
- sqlite
- mysql
Expand All @@ -38,31 +39,43 @@ jobs:
devise-token-auth-orm: mongoid
- ruby: 2.7
gemfile: gemfiles/rails_7_0.gemfile
- ruby: 2.7
gemfile: gemfiles/rails_7_1.gemfile
- ruby: '3.0'
gemfile: gemfiles/rails_7_0.gemfile
- ruby: '3.0'
gemfile: gemfiles/rails_7_0_mongoid_7.gemfile
devise-token-auth-orm: mongoid
- ruby: '3.0'
gemfile: gemfiles/rails_7_1.gemfile
- ruby: 3.1
gemfile: gemfiles/rails_7_0.gemfile
- ruby: 3.1
gemfile: gemfiles/rails_7_0_mongoid_7.gemfile
devise-token-auth-orm: mongoid
- ruby: 3.1
gemfile: gemfiles/rails_7_1.gemfile
- ruby: 3.2
gemfile: gemfiles/rails_7_0.gemfile
- ruby: 3.2
gemfile: gemfiles/rails_7_0_mongoid_7.gemfile
devise-token-auth-orm: mongoid
- ruby: 3.2
gemfile: gemfiles/rails_7_1.gemfile
- ruby: 3.3
gemfile: gemfiles/rails_7_0.gemfile
- ruby: 3.3
gemfile: gemfiles/rails_7_0_mongoid_7.gemfile
devise-token-auth-orm: mongoid
- ruby: 3.3
gemfile: gemfiles/rails_7_1.gemfile
- ruby: 3.4
gemfile: gemfiles/rails_7_0.gemfile
- ruby: 3.4
gemfile: gemfiles/rails_7_0_mongoid_7.gemfile
devise-token-auth-orm: mongoid
- ruby: 3.4
gemfile: gemfiles/rails_7_1.gemfile
exclude:
- ruby: 2.7
gemfile: gemfiles/rails_4_2.gemfile
Expand Down
2 changes: 1 addition & 1 deletion devise_token_auth.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,6 @@ Gem::Specification.new do |s|
s.add_development_dependency 'sqlite3', '~> 1.4'
s.add_development_dependency 'pg'
s.add_development_dependency 'mysql2'
s.add_development_dependency 'mongoid', '>= 4', '< 8'
s.add_development_dependency 'mongoid', '>= 4', '< 9'
s.add_development_dependency 'mongoid-locker', '>= 1.0', '< 3.0'
end
48 changes: 48 additions & 0 deletions gemfiles/rails_7_1.gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# This file was generated by Appraisal

source "https://rubygems.org"

gem "omniauth"
gem "omniauth-rails_csrf_protection"
gem "rails", "~> 7.1"
gem "sqlite3"
gem "mysql2"
gem "pg"
gem 'concurrent-ruby'

group :development, :test do
gem "attr_encrypted"
gem "figaro"
gem "omniauth-facebook"
gem "omniauth-github"
gem "omniauth-google-oauth2"
gem 'omniauth-apple'
gem "rack-cors"
gem "thor"
gem "database_cleaner"
gem "factory_bot_rails"
gem "faker"
gem "fuzz_ball"
gem "guard"
gem "guard-minitest"
gem "minitest"
gem "minitest-focus"
gem "minitest-rails"
gem "minitest-reporters"
gem "mocha"
gem "pry"
gem "pry-byebug"
gem "pry-remote"
gem "rubocop", require: false
end

group :test do
gem "rails-controller-testing"
gem "simplecov", require: false
end

group :development do
gem "github_changelog_generator"
end

gemspec path: "../"
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,26 @@ def token_and_client_config_from(body)
end

test 'redirect url includes token params' do
assert @token_params.all? { |param| response.body.include?(param) }
assert response.body.include?('account_confirmation_success')
puts "\n" + "="*80
puts "DEBUG: redirect url includes token params test (authenticated)"
puts "Token params: #{@token_params.inspect}"
puts "Response status: #{response.status}"
puts "Response location: #{response.location}"
puts "Response body length: #{response.body.length}"
puts "Response body (first 500 chars):"
puts response.body[0..500]

# For 302 redirects, check the location header instead of body
redirect_location = response.location || response.body
@token_params.each do |param|
result = redirect_location.include?(param)
puts " Param '#{param}' included: #{result}"
end
puts "account_confirmation_success included: #{redirect_location.include?('account_confirmation_success')}"
puts "="*80 + "\n"

assert @token_params.all? { |param| redirect_location.include?(param) }
assert redirect_location.include?('account_confirmation_success')
end
end

Expand All @@ -86,8 +104,26 @@ def token_and_client_config_from(body)
end

test 'redirect url does not include token params' do
refute @token_params.any? { |param| response.body.include?(param) }
assert response.body.include?('account_confirmation_success')
puts "\n" + "="*80
puts "DEBUG: redirect url does not include token params test (unauthenticated)"
puts "Token params: #{@token_params.inspect}"
puts "Response status: #{response.status}"
puts "Response location: #{response.location}"
puts "Response body length: #{response.body.length}"
puts "Response body (first 500 chars):"
puts response.body[0..500]

# For 302 redirects, check the location header instead of body
redirect_location = response.location || response.body
@token_params.each do |param|
result = redirect_location.include?(param)
puts " Param '#{param}' included: #{result}"
end
puts "account_confirmation_success included: #{redirect_location.include?('account_confirmation_success')}"
puts "="*80 + "\n"

refute @token_params.any? { |param| redirect_location.include?(param) }
assert redirect_location.include?('account_confirmation_success')
end
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,32 @@ class OmniauthTest < ActionDispatch::IntegrationTest
end

def get_parsed_data_json
encoded_json_data = @response.body.match(/var data \= JSON.parse\(decodeURIComponent\(\'(.+)\'\)\)\;/)[1]
JSON.parse(CGI.unescape(encoded_json_data))
puts "\n" + "="*80
puts "DEBUG: get_parsed_data_json called"
puts "Response status: #{@response.status}"
puts "Response content_type: #{@response.content_type}"
puts "Response body length: #{@response.body.length}"
puts "Response body (first 500 chars):"
puts @response.body[0..500]
puts "="*80

match_result = @response.body.match(/var data \= JSON.parse\(decodeURIComponent\(\'(.+)\'\)\)\;/)
puts "DEBUG: Regex match result: #{match_result.inspect}"

if match_result.nil?
puts "ERROR: Could not find 'var data = JSON.parse(decodeURIComponent(...' pattern in response"
puts "Full response body:"
puts @response.body
puts "="*80 + "\n"
return nil
end

encoded_json_data = match_result[1]
puts "DEBUG: Encoded JSON data (first 200 chars): #{encoded_json_data[0..200]}"
decoded_data = JSON.parse(CGI.unescape(encoded_json_data))
puts "DEBUG: Decoded data: #{decoded_data.inspect}"
puts "="*80 + "\n"
decoded_data
end

describe 'success callback' do
Expand All @@ -35,6 +59,12 @@ def get_parsed_data_json

test 'request should pass correct redirect_url' do
get_success
puts "\n" + "="*80
puts "DEBUG: request should pass correct redirect_url"
puts "Expected redirect_url: #{@redirect_url}"
puts "Actual auth_origin_url: #{controller.send(:omniauth_params)['auth_origin_url'].inspect}"
puts "Full omniauth_params: #{controller.send(:omniauth_params).inspect}"
puts "="*80 + "\n"
assert_equal @redirect_url,
controller.send(:omniauth_params)['auth_origin_url']
end
Expand Down Expand Up @@ -139,6 +169,12 @@ def get_parsed_data_json
end

test 'additional attribute was passed' do
puts "\n" + "="*80
puts "DEBUG: additional attribute was passed"
puts "Expected favorite_color: #{@fav_color.inspect}"
puts "Actual favorite_color: #{@resource.favorite_color.inspect}"
puts "Resource attributes: #{@resource.attributes.inspect}"
puts "="*80 + "\n"
assert_equal @fav_color, @resource.favorite_color
end

Expand Down Expand Up @@ -245,6 +281,14 @@ def assert_expected_data_in_new_window
# We have been forwarded to a url with all the expected
# data in the query params.

puts "\n" + "="*80
puts "DEBUG: redirects to auth_origin_url with all expected query params (sameWindow)"
puts "Response status: #{response.status}"
puts "Controller params: #{controller.params.inspect}"
puts "uid param: #{controller.params['uid'].inspect}"
puts "Response location: #{response.location.inspect}"
puts "="*80 + "\n"

# Assert that a uid was passed along. We have to assume
# that the rest of the values were as well, as we don't
# have access to @resource in this test anymore
Expand Down
3 changes: 3 additions & 0 deletions test/dummy/config/environments/test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@
config.consider_all_requests_local = true
config.action_controller.perform_caching = false

# Use memory store for cache to ensure sessions persist across redirects in tests
config.cache_store = :memory_store

# Raise exceptions instead of rendering exception templates.
if Rails::VERSION::MAJOR >= 7 && Rails::VERSION::MINOR > 0
config.action_dispatch.show_exceptions = :none
Expand Down
Loading