# frozen_string_literal: true describe FranceConnectService do describe '.retrieve_user_informations_particulier' do let(:code) { 'plop' } let(:access_token) { +'my access_token' } let(:given_name) { 'plop1' } let(:family_name) { 'plop2' } let(:birthdate) { '2012-12-31' } let(:gender) { 'plop4' } let(:birthplace) { 'plop5' } let(:email) { 'plop@emaiL.com' } let(:phone) { '012345678' } let(:france_connect_particulier_id) { 'izhikziogjuziegj' } let(:user_info_hash) { { sub: france_connect_particulier_id, given_name: given_name, family_name: family_name, birthdate: birthdate, gender: gender, birthplace: birthplace, email: email, phone: phone } } let(:user_info) { instance_double('OpenIDConnect::ResponseObject::UserInfo', raw_attributes: user_info_hash) } subject { described_class.find_or_retrieve_france_connect_information code } before do allow_any_instance_of(FranceConnectParticulierClient).to receive(:access_token!).and_return(access_token) allow(access_token).to receive(:userinfo!).and_return(user_info) end it 'set code for FranceConnectEntrepriseClient' do expect_any_instance_of(FranceConnectParticulierClient).to receive(:authorization_code=).with(code) subject end it 'returns user informations' do expect(subject).to have_attributes({ given_name: given_name, family_name: family_name, birthdate: Time.zone.parse(birthdate).to_date, birthplace: birthplace, gender: gender, email_france_connect: email, france_connect_particulier_id: france_connect_particulier_id }) end end end