Skip to content
Merged
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
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ GEM
rb-fsevent (0.11.1)
rb-inotify (0.10.1)
ffi (~> 1.0)
redcarpet (3.5.1)
redcarpet (3.6.1)
redis (4.7.1)
regexp_parser (2.5.0)
responders (3.0.1)
Expand Down
2 changes: 2 additions & 0 deletions app/controllers/users/omniauth_callbacks_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ def google_sign_in(access_token)
user = User.find_by_email data['email']
user ||= new_user_from_google(data)
update_user_info_from_google user, data
# Automatically mark user as "confirmed" if logging in via Google SSO
user.confirmed_at = Time.now.in_time_zone(LAST_COMPETITION_TIME_ZONE) if user.confirmed_at.blank?
user.save
user
end
Expand Down
2 changes: 2 additions & 0 deletions config/environments/test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
# ActionMailer::Base.deliveries array.
config.action_mailer.delivery_method = :test

config.action_mailer.default_url_options = { host: ENV['DOMAIN'] || 'localhost' }

# Print deprecation notices to the stderr.
config.active_support.deprecation = :stderr

Expand Down
98 changes: 98 additions & 0 deletions test/controllers/users/omniauth_callbacks_controller_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# frozen_string_literal: true

require 'test_helper'

class Users::OmniauthCallbacksControllerTest < ActionDispatch::IntegrationTest
GOOGLE_USER = 'test@google.com'
CONFIRM_DATE = Time.new(2025, 1, 1)

setup do
OmniAuth.config.test_mode = true
end

test 'should confirm a new user' do
OmniAuth.config.mock_auth[:google] = OmniAuth::AuthHash.new(
{
provider: 'google',
uid: '1234567890',
info: {
email: GOOGLE_USER,
name: 'Google User',
image: 'google avatar',
},
},
)

assert_difference('User.count', 1) do
User.find_by_email(GOOGLE_USER).tap do |user|
assert_nil user
end

get '/users/auth/google/callback'

User.find_by_email(GOOGLE_USER).tap do |user|
assert user.confirmed?
end
end
end

test 'should confirm an existing un-confirmed user' do
OmniAuth.config.mock_auth[:google] = OmniAuth::AuthHash.new(
{
provider: 'google',
uid: '1234567890',
info: {
email: GOOGLE_USER,
name: 'Google User',
image: 'google avatar',
},
},
)

assert_difference('User.count', 1) do
User.create!(email: GOOGLE_USER, password: Devise.friendly_token[0, 20])

User.find_by_email(GOOGLE_USER).tap do |user|
assert_not user.confirmed?
end

get '/users/auth/google/callback'

User.find_by_email(GOOGLE_USER).tap do |user|
assert user.confirmed?
end
end
end

test 'should not re-confirm an existing confirmed user' do
OmniAuth.config.mock_auth[:google] = OmniAuth::AuthHash.new(
{
provider: 'google',
uid: '1234567890',
info: {
email: GOOGLE_USER,
name: 'Google User',
image: 'google avatar',
},
},
)

assert_difference('User.count', 1) do
User.create!(email: GOOGLE_USER, password: Devise.friendly_token[0, 20], confirmed_at: CONFIRM_DATE)

User.find_by_email(GOOGLE_USER).tap do |user|
assert user.confirmed?
end

get '/users/auth/google/callback'

User.find_by_email(GOOGLE_USER).tap do |user|
assert user.confirmed?
end

User.find_by_email(GOOGLE_USER).tap do |user|
assert_equal user.confirmed_at, CONFIRM_DATE
end
end
end
end
Loading