From c1bdff2e358b99a347d0fd1f7e9b0e9885f39c23 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Mon, 9 Jun 2025 16:51:13 +0530 Subject: [PATCH] test: handle state --- .../google/callbacks_controller_spec.rb | 17 +++++------------ .../microsoft/callbacks_controller_spec.rb | 17 +++++------------ 2 files changed, 10 insertions(+), 24 deletions(-) diff --git a/spec/controllers/google/callbacks_controller_spec.rb b/spec/controllers/google/callbacks_controller_spec.rb index 91535533c..a898ab395 100644 --- a/spec/controllers/google/callbacks_controller_spec.rb +++ b/spec/controllers/google/callbacks_controller_spec.rb @@ -4,11 +4,7 @@ RSpec.describe 'Google::CallbacksController', type: :request do let(:account) { create(:account) } let(:code) { SecureRandom.hex(10) } let(:email) { Faker::Internet.email } - let(:cache_key) { "google::#{email.downcase}" } - - before do - Redis::Alfred.set(cache_key, account.id) - end + let(:state) { account.to_sgid(expires_in: 15.minutes).to_s } describe 'GET /google/callback' do let(:response_body_success) do @@ -27,7 +23,7 @@ RSpec.describe 'Google::CallbacksController', type: :request do 'redirect_uri' => "#{ENV.fetch('FRONTEND_URL', 'http://localhost:3000')}/google/callback" }) .to_return(status: 200, body: response_body_success.to_json, headers: { 'Content-Type' => 'application/json' }) - get google_callback_url, params: { code: code } + get google_callback_url, params: { code: code, state: state } expect(response).to redirect_to app_email_inbox_agents_url(account_id: account.id, inbox_id: account.inboxes.last.id) expect(account.inboxes.count).to be 1 @@ -36,7 +32,6 @@ RSpec.describe 'Google::CallbacksController', type: :request do expect(inbox.channel.reload.provider_config.keys).to include('access_token', 'refresh_token', 'expires_on') expect(inbox.channel.reload.provider_config['access_token']).to eq response_body_success[:access_token] expect(inbox.channel.imap_address).to eq 'imap.gmail.com' - expect(Redis::Alfred.get(cache_key)).to be_nil end it 'updates inbox channel config if inbox exists with imap_login and authentication is successful' do @@ -49,14 +44,13 @@ RSpec.describe 'Google::CallbacksController', type: :request do 'redirect_uri' => "#{ENV.fetch('FRONTEND_URL', 'http://localhost:3000')}/google/callback" }) .to_return(status: 200, body: response_body_success.to_json, headers: { 'Content-Type' => 'application/json' }) - get google_callback_url, params: { code: code } + get google_callback_url, params: { code: code, state: state } expect(response).to redirect_to app_email_inbox_settings_url(account_id: account.id, inbox_id: inbox.id) expect(account.inboxes.count).to be 1 expect(inbox.channel.reload.provider_config.keys).to include('access_token', 'refresh_token', 'expires_on') expect(inbox.channel.reload.provider_config['access_token']).to eq response_body_success[:access_token] expect(inbox.channel.imap_address).to eq 'imap.gmail.com' - expect(Redis::Alfred.get(cache_key)).to be_nil end it 'creates inboxes with fallback_name when account name is not present in id_token' do @@ -65,7 +59,7 @@ RSpec.describe 'Google::CallbacksController', type: :request do 'redirect_uri' => "#{ENV.fetch('FRONTEND_URL', 'http://localhost:3000')}/google/callback" }) .to_return(status: 200, body: response_body_success_without_name.to_json, headers: { 'Content-Type' => 'application/json' }) - get google_callback_url, params: { code: code } + get google_callback_url, params: { code: code, state: state } expect(response).to redirect_to app_email_inbox_agents_url(account_id: account.id, inbox_id: account.inboxes.last.id) expect(account.inboxes.count).to be 1 @@ -79,10 +73,9 @@ RSpec.describe 'Google::CallbacksController', type: :request do 'redirect_uri' => "#{ENV.fetch('FRONTEND_URL', 'http://localhost:3000')}/google/callback" }) .to_return(status: 401) - get google_callback_url, params: { code: code } + get google_callback_url, params: { code: code, state: state } expect(response).to redirect_to '/' - expect(Redis::Alfred.get(cache_key).to_i).to eq account.id end end end diff --git a/spec/controllers/microsoft/callbacks_controller_spec.rb b/spec/controllers/microsoft/callbacks_controller_spec.rb index 41d8dbd29..6bd9a0583 100644 --- a/spec/controllers/microsoft/callbacks_controller_spec.rb +++ b/spec/controllers/microsoft/callbacks_controller_spec.rb @@ -4,11 +4,7 @@ RSpec.describe 'Microsoft::CallbacksController', type: :request do let(:account) { create(:account) } let(:code) { SecureRandom.hex(10) } let(:email) { Faker::Internet.email } - let(:cache_key) { "microsoft::#{email.downcase}" } - - before do - Redis::Alfred.set(cache_key, account.id) - end + let(:state) { account.to_sgid(expires_in: 15.minutes).to_s } describe 'GET /microsoft/callback' do let(:response_body_success) do @@ -27,7 +23,7 @@ RSpec.describe 'Microsoft::CallbacksController', type: :request do 'redirect_uri' => "#{ENV.fetch('FRONTEND_URL', 'http://localhost:3000')}/microsoft/callback" }) .to_return(status: 200, body: response_body_success.to_json, headers: { 'Content-Type' => 'application/json' }) - get microsoft_callback_url, params: { code: code } + get microsoft_callback_url, params: { code: code, state: state } expect(response).to redirect_to app_email_inbox_agents_url(account_id: account.id, inbox_id: account.inboxes.last.id) expect(account.inboxes.count).to be 1 @@ -36,7 +32,6 @@ RSpec.describe 'Microsoft::CallbacksController', type: :request do expect(inbox.channel.reload.provider_config.keys).to include('access_token', 'refresh_token', 'expires_on') expect(inbox.channel.reload.provider_config['access_token']).to eq response_body_success[:access_token] expect(inbox.channel.imap_address).to eq 'outlook.office365.com' - expect(Redis::Alfred.get(cache_key)).to be_nil end it 'creates updates inbox channel config if inbox exists and authentication is successful' do @@ -48,14 +43,13 @@ RSpec.describe 'Microsoft::CallbacksController', type: :request do 'redirect_uri' => "#{ENV.fetch('FRONTEND_URL', 'http://localhost:3000')}/microsoft/callback" }) .to_return(status: 200, body: response_body_success.to_json, headers: { 'Content-Type' => 'application/json' }) - get microsoft_callback_url, params: { code: code } + get microsoft_callback_url, params: { code: code, state: state } expect(response).to redirect_to app_email_inbox_settings_url(account_id: account.id, inbox_id: account.inboxes.last.id) expect(account.inboxes.count).to be 1 expect(inbox.channel.reload.provider_config.keys).to include('access_token', 'refresh_token', 'expires_on') expect(inbox.channel.reload.provider_config['access_token']).to eq response_body_success[:access_token] expect(inbox.channel.imap_address).to eq 'outlook.office365.com' - expect(Redis::Alfred.get(cache_key)).to be_nil end it 'creates inboxes with fallback_name when account name is not present in id_token' do @@ -64,7 +58,7 @@ RSpec.describe 'Microsoft::CallbacksController', type: :request do 'redirect_uri' => "#{ENV.fetch('FRONTEND_URL', 'http://localhost:3000')}/microsoft/callback" }) .to_return(status: 200, body: response_body_success_without_name.to_json, headers: { 'Content-Type' => 'application/json' }) - get microsoft_callback_url, params: { code: code } + get microsoft_callback_url, params: { code: code, state: state } expect(response).to redirect_to app_email_inbox_agents_url(account_id: account.id, inbox_id: account.inboxes.last.id) expect(account.inboxes.count).to be 1 @@ -78,10 +72,9 @@ RSpec.describe 'Microsoft::CallbacksController', type: :request do 'redirect_uri' => "#{ENV.fetch('FRONTEND_URL', 'http://localhost:3000')}/microsoft/callback" }) .to_return(status: 401) - get microsoft_callback_url, params: { code: code } + get microsoft_callback_url, params: { code: code, state: state } expect(response).to redirect_to '/' - expect(Redis::Alfred.get(cache_key).to_i).to eq account.id end end end