# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/ require 'rails_helper' RSpec.describe Issue3346Xoauth2TokenNotFetched, type: :db_migration do shared_examples 'XOAUTH2 channel migration' do |channel_type| context 'when valid Channel is present' do before do channel = create(channel_type) channel.options[:inbound][:options][:password] = 'some_password' channel.save! end it "doesn't refresh the token" do allow(ExternalCredential).to receive(:refresh_token) migrate expect(ExternalCredential).not_to have_received(:refresh_token) end end context 'when broken Channel is present' do before do channel = create(channel_type) channel.options[:inbound][:options].delete(:password) channel.save! end it 'refreshes the token' do allow(ExternalCredential).to receive(:refresh_token) migrate expect(ExternalCredential).to have_received(:refresh_token) end it "doesn't break if refresh fails" do allow(ExternalCredential).to receive(:refresh_token).and_raise(RuntimeError) expect { migrate }.not_to raise_error end end end context 'when Microsoft365 Channel is present' do it_behaves_like 'XOAUTH2 channel migration', :microsoft365_channel end context 'when Google Channel is present' do it_behaves_like 'XOAUTH2 channel migration', :google_channel end end