diff --git a/Gemfile b/Gemfile index 281261f14..6f1563b98 100644 --- a/Gemfile +++ b/Gemfile @@ -78,8 +78,10 @@ gem 'wicked' gem 'rest-client' gem 'faraday' +gem 'faraday-gzip' gem 'faraday-net_http' gem 'faraday-retry' +gem 'faraday-encoding' group :development, :test do gem 'awesome_print' @@ -104,10 +106,10 @@ group :development do # Can be configured to work on production as well see: https://github.com/MiniProfiler/rack-mini-profiler/blob/master/README.md gem 'rack-mini-profiler', '~> 3.3' gem 'rubocop', require: false - gem 'rubocop-rails' - gem 'rubocop-rspec' gem 'rubocop-capybara' gem 'rubocop-factory_bot' + gem 'rubocop-rails' + gem 'rubocop-rspec' gem 'rubocop-rspec_rails' gem 'better_errors' diff --git a/Gemfile.lock b/Gemfile.lock index 3ab1c6265..1f7a944d8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -153,6 +153,11 @@ GEM railties (>= 5.0.0) faraday (2.9.0) faraday-net_http (>= 2.0, < 3.2) + faraday-encoding (0.0.6) + faraday + faraday-gzip (2.0.1) + faraday (>= 1.0) + zlib (~> 3.0) faraday-net_http (3.1.0) net-http faraday-net_http_persistent (2.1.0) @@ -562,6 +567,7 @@ GEM nokogiri (~> 1.8) yajl-ruby (1.4.3) zeitwerk (2.7.0) + zlib (3.1.1) PLATFORMS aarch64-linux @@ -586,6 +592,8 @@ DEPENDENCIES draper factory_bot_rails faraday + faraday-encoding + faraday-gzip faraday-net_http faraday-retry gaffe diff --git a/app/clients/abstract_hubee_api_client.rb b/app/clients/abstract_hubee_api_client.rb index 934b0e481..9081c04aa 100644 --- a/app/clients/abstract_hubee_api_client.rb +++ b/app/clients/abstract_hubee_api_client.rb @@ -4,7 +4,7 @@ class AbstractHubEEAPIClient protected def http_connection(&block) - @http_connection ||= Faraday.new do |conn| + Faraday.new do |conn| conn.request :retry, max: 5 conn.response :raise_error conn.response :json diff --git a/app/clients/formulaire_qf_api_client.rb b/app/clients/formulaire_qf_api_client.rb new file mode 100644 index 000000000..9d3582175 --- /dev/null +++ b/app/clients/formulaire_qf_api_client.rb @@ -0,0 +1,35 @@ +class FormulaireQFAPIClient + def create_collectivity(authorization_request) + organization = authorization_request.organization + editor_name = authorization_request.extra_infos.dig('service_provider', 'id') + + params = { + siret: organization.siret, + code_cog: organization.code_commune_etablissement, + departement: organization.code_postal_etablissement[0..1], + name: organization.denomination, + status: 'active', + editor: editor_name + } + + http_connection.post("#{host}/api/collectivites", params.to_json) + end + + private + + def host + Rails.application.credentials.formulaire_qf.host + end + + def http_connection(&block) + Faraday.new do |conn| + conn.headers['Content-Type'] = 'application/json' + conn.request :authorization, 'Bearer', -> { secret } + yield(conn) if block + end + end + + def secret + Rails.application.credentials.formulaire_qf.secret + end +end diff --git a/app/clients/hubee_api_authentication.rb b/app/clients/hubee_api_authentication.rb index 953068b63..76db47095 100644 --- a/app/clients/hubee_api_authentication.rb +++ b/app/clients/hubee_api_authentication.rb @@ -18,4 +18,11 @@ def auth_url def encoded_client_id_and_secret Base64.strict_encode64("#{consumer_key}:#{consumer_secret}") end + + def http_connection(&block) + @http_connection ||= super do |conn| + conn.response :json + yield(conn) if block + end + end end diff --git a/app/clients/hubee_api_client.rb b/app/clients/hubee_api_client.rb index 111b09ab4..4b057e44f 100644 --- a/app/clients/hubee_api_client.rb +++ b/app/clients/hubee_api_client.rb @@ -17,6 +17,7 @@ def create_organization(organization, email) branchCode: organization.code_commune_etablissement, email:, name: organization.denomination, + country: 'France', postalCode: organization.code_postal_etablissement, territory: organization.code_commune_etablissement, status: 'Actif' @@ -34,7 +35,7 @@ def create_subscription(authorization_request, organization_payload, process_cod "#{host}/referential/v1/subscriptions", { datapassId: authorization_request.external_id.to_i, - notificationFrequency: 'unitaire', + notificationFrequency: 'Aucune', processCode: process_code, subscriber: { type: 'SI', @@ -42,15 +43,12 @@ def create_subscription(authorization_request, organization_payload, process_cod branchCode: organization_payload['branchCode'] }, email: authorization_request.demandeur.email, - status: 'Actif', + status: 'Inactif', localAdministrator: { email: authorization_request.demandeur.email }, - delegationActor: { - branchCode: organization_payload['branchCode'], - companyRegister: organization_payload['companyRegister'], - type: 'EDT' - }, + validateDateTime: DateTime.now.iso8601, + updateDateTime: DateTime.now.iso8601 }.to_json, 'Content-Type' => 'application/json' ) @@ -60,6 +58,37 @@ def create_subscription(authorization_request, organization_payload, process_cod raise end + def find_subscription(_authorization_request, organization_payload, process_code) + request = http_connection { |conn| conn.request :gzip }.get( + "#{host}/referential/v1/subscriptions", + companyRegister: organization_payload['companyRegister'], + processCode: process_code + ) + request.body.first + end + + def update_subscription(authorization_request, subscription_payload, editor_payload = {}) + subscription_id = authorization_request.extra_infos['hubee_subscription_id'] + return if subscription_id.blank? + + payload = subscription_payload.with_indifferent_access.merge({ + status: 'Actif', + activateDateTime: DateTime.now.iso8601, + accessMode: 'API', + notificationFrequency: 'Aucune' + }.with_indifferent_access) + + payload.delete('id') + payload.delete('creationDateTime') + payload.merge!(editor_payload.with_indifferent_access) if editor_payload.present? + + http_connection.put( + "#{host}/referential/v1/subscriptions/#{subscription_id}", + payload.to_json, + 'Content-Type' => 'application/json' + ) + end + protected def host @@ -72,9 +101,10 @@ def already_exists_error?(faraday_error) end end - def http_connection + def http_connection(&block) super do |conn| conn.request :authorization, 'Bearer', -> { HubEEAPIAuthentication.new.access_token } + yield(conn) if block end end end diff --git a/app/interactors/datapass_webhook/adapt_v2_to_v1.rb b/app/interactors/datapass_webhook/adapt_v2_to_v1.rb index d5d3139c8..ec43c9d9f 100644 --- a/app/interactors/datapass_webhook/adapt_v2_to_v1.rb +++ b/app/interactors/datapass_webhook/adapt_v2_to_v1.rb @@ -22,7 +22,8 @@ def build_data 'previous_enrollment_id' => nil, 'scopes' => generic_data['scopes'].index_with { |_scope| true }, 'team_members' => build_team_members, - 'events' => [] + 'events' => [], + 'service_provider' => context.data['service_provider'], } } end diff --git a/app/interactors/datapass_webhook/find_or_create_authorization_request.rb b/app/interactors/datapass_webhook/find_or_create_authorization_request.rb index a16dcfb1d..2852598fa 100644 --- a/app/interactors/datapass_webhook/find_or_create_authorization_request.rb +++ b/app/interactors/datapass_webhook/find_or_create_authorization_request.rb @@ -72,10 +72,17 @@ def authorization_request_attributes ).merge(authorization_request_attributes_for_current_event).merge( 'last_update' => fired_at_as_datetime, 'previous_external_id' => context.data['pass']['copied_from_enrollment_id'], - 'api' => context.api + 'api' => context.api, + 'extra_infos' => extra_infos_with_service_provider ) end + def extra_infos_with_service_provider + context.authorization_request.extra_infos.merge({ + 'service_provider' => Hash(context.data.dig('pass', 'service_provider')) + }) + end + def authorization_request_attributes_for_current_event authorization_request_attributes_for_current_event = {} diff --git a/app/interactors/datapass_webhook/schedule_create_formulaire_qf_hubee_subscription_job.rb b/app/interactors/datapass_webhook/schedule_create_formulaire_qf_hubee_subscription_job.rb index 4ebfc4213..3a1e44b88 100644 --- a/app/interactors/datapass_webhook/schedule_create_formulaire_qf_hubee_subscription_job.rb +++ b/app/interactors/datapass_webhook/schedule_create_formulaire_qf_hubee_subscription_job.rb @@ -4,5 +4,6 @@ def call return unless context.modalities.include?('formulaire_qf') CreateFormulaireQFHubEESubscriptionJob.perform_later(context.authorization_request.id) + CreateFormulaireQFCollectivityJob.perform_later(context.authorization_request.id) end end diff --git a/app/jobs/create_formulaire_qf_collectivity_job.rb b/app/jobs/create_formulaire_qf_collectivity_job.rb new file mode 100644 index 000000000..f527ccaf4 --- /dev/null +++ b/app/jobs/create_formulaire_qf_collectivity_job.rb @@ -0,0 +1,6 @@ +class CreateFormulaireQFCollectivityJob < ApplicationJob + def perform(authorization_request_id) + authorization_request = AuthorizationRequest.find(authorization_request_id) + FormulaireQFAPIClient.new.create_collectivity(authorization_request) + end +end diff --git a/app/jobs/create_formulaire_qf_hubee_subscription_job.rb b/app/jobs/create_formulaire_qf_hubee_subscription_job.rb index f7ae2426f..9a3a4b62c 100644 --- a/app/jobs/create_formulaire_qf_hubee_subscription_job.rb +++ b/app/jobs/create_formulaire_qf_hubee_subscription_job.rb @@ -7,7 +7,23 @@ def perform(authorization_request_id) authorization_request.extra_infos['hubee_organization_id'] = build_hubee_organization_id(hubee_organization_payload) authorization_request.save! - create_subscription_on_hubee(authorization_request, hubee_organization_payload) + subscription_payload = find_or_create_subscription_on_hubee(authorization_request, hubee_organization_payload) + + service_provider = authorization_request.extra_infos['service_provider'] + subscription_update_payload = {} + + if service_provider.present? && service_provider['type'] == 'editor' + subscription_update_payload.merge!({ + delegationActor: { + branchCode: service_provider['code_cog'], + companyRegister: service_provider['siret'], + type: 'EDT' + }, + accessMode: 'API' + }) + end + + update_subscription_on_hubee(authorization_request, subscription_payload, subscription_update_payload) rescue ActiveRecord::RecordNotFound # do nothing end @@ -20,13 +36,18 @@ def find_or_create_organization_on_hubee(authorization_request) hubee_api_client.create_organization(authorization_request.organization, authorization_request.demandeur.email) end - def create_subscription_on_hubee(authorization_request, hubee_organization) - hubee_subscription_payload = hubee_api_client.create_subscription(authorization_request, hubee_organization, process_code) - - authorization_request.extra_infos['hubee_subscription_id'] = hubee_subscription_payload['id'] + def find_or_create_subscription_on_hubee(authorization_request, hubee_organization) + payload = hubee_api_client.create_subscription(authorization_request, hubee_organization, process_code) + authorization_request.extra_infos['hubee_subscription_id'] = payload['id'] authorization_request.save! rescue HubEEAPIClient::AlreadyExists - # do nothing + payload = hubee_api_client.find_subscription(authorization_request, hubee_organization, process_code) + authorization_request.extra_infos['hubee_subscription_id'] = payload['id'] + authorization_request.save! + end + + def update_subscription_on_hubee(authorization_request, subscription_payload, editor_payload) + hubee_api_client.update_subscription(authorization_request, subscription_payload, editor_payload) end def build_hubee_organization_id(hubee_organization_payload) diff --git a/config/credentials/test.yml.enc b/config/credentials/test.yml.enc index 4400b7321..26ec8c3a3 100644 --- a/config/credentials/test.yml.enc +++ b/config/credentials/test.yml.enc @@ -1 +1 @@ -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--dzjtM4Kf2fi6YpMd--1x7ObL5qvU6eia9C3p7sjA== \ No newline at end of file +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--1iVrN2uZYhSZST7Q--wTX5GsuCHbFXF8Ki2bYStA== \ No newline at end of file diff --git a/spec/factories/datapass_webhooks.rb b/spec/factories/datapass_webhooks.rb index b574ba846..d2f5163c8 100644 --- a/spec/factories/datapass_webhooks.rb +++ b/spec/factories/datapass_webhooks.rb @@ -63,6 +63,15 @@ 'entreprises' => true } end + + service_provider do + { + 'id' => '3d_ouest', + 'type' => 'editor', + 'siret' => '44973625500018', + 'code' => '22113', + } + end end factory :datapass_webhook_team_member_model, class: Hash do diff --git a/spec/interactors/datapass_webhook/find_or_create_authorization_request_spec.rb b/spec/interactors/datapass_webhook/find_or_create_authorization_request_spec.rb index 35ef0d0bd..dc99f5929 100644 --- a/spec/interactors/datapass_webhook/find_or_create_authorization_request_spec.rb +++ b/spec/interactors/datapass_webhook/find_or_create_authorization_request_spec.rb @@ -68,6 +68,10 @@ expect(subject.reopening).to be_falsey end + it 'stores the service provider in extra_infos' do + expect { subject }.to change { authorization_request.reload.extra_infos['service_provider'] } + end + context 'when it is the same demandeur' do let(:demandeur) { build(:datapass_webhook_team_member_model, type: 'demandeur', email: authorization_request.demandeur.email) } diff --git a/spec/jobs/create_formulaire_qf_collectivity_job_spec.rb b/spec/jobs/create_formulaire_qf_collectivity_job_spec.rb new file mode 100644 index 000000000..e6162f900 --- /dev/null +++ b/spec/jobs/create_formulaire_qf_collectivity_job_spec.rb @@ -0,0 +1,20 @@ +require 'rails_helper' + +RSpec.describe CreateFormulaireQFCollectivityJob, type: :job do + describe '#perform' do + subject(:job) { described_class.perform_now(authorization_request.id) } + + let(:api_client) { instance_double(FormulaireQFAPIClient) } + let(:authorization_request) { create(:authorization_request, :with_demandeur, api: 'particulier') } + + before do + allow(FormulaireQFAPIClient).to receive(:new).and_return(api_client) + end + + it 'creates collectivity on Formulaire QF' do + expect(api_client).to receive(:create_collectivity).with(authorization_request) + + job + end + end +end diff --git a/spec/jobs/create_formulaire_qf_hubee_subscription_job_spec.rb b/spec/jobs/create_formulaire_qf_hubee_subscription_job_spec.rb index ad3984137..bc1a6a99d 100644 --- a/spec/jobs/create_formulaire_qf_hubee_subscription_job_spec.rb +++ b/spec/jobs/create_formulaire_qf_hubee_subscription_job_spec.rb @@ -20,6 +20,7 @@ before do allow(hubee_api_client).to receive(:find_organization).and_raise(HubEEAPIClient::NotFound) allow(hubee_api_client).to receive_messages(create_organization: organization_payload, create_subscription: subscription_payload) + allow(hubee_api_client).to receive(:update_subscription) end it 'creates an organization on HubEE' do @@ -50,6 +51,7 @@ context 'when organization exists on HubEE' do before do allow(hubee_api_client).to receive_messages(find_organization: hubee_organization_payload, create_subscription: subscription_payload) + allow(hubee_api_client).to receive(:update_subscription) end it 'does not create an organization on HubEE' do @@ -77,8 +79,12 @@ end context 'when subscription already exists' do + let(:hubee_subscription_payload) { { 'id' => 123 } } + before do allow(hubee_api_client).to receive(:create_subscription).and_raise(HubEEAPIClient::AlreadyExists) + allow(hubee_api_client).to receive(:find_subscription).and_return(hubee_subscription_payload) + allow(hubee_api_client).to receive(:update_subscription) end it 'does not raise an error' do diff --git a/spec/organizers/datapass_webhook/v2/api_particulier_spec.rb b/spec/organizers/datapass_webhook/v2/api_particulier_spec.rb index 179e697f0..19e5829bc 100644 --- a/spec/organizers/datapass_webhook/v2/api_particulier_spec.rb +++ b/spec/organizers/datapass_webhook/v2/api_particulier_spec.rb @@ -64,6 +64,12 @@ subject }.not_to have_enqueued_job(CreateFormulaireQFHubEESubscriptionJob) end + + it 'does not schedule a job to create formulaire qf access on HubEE' do + expect { + subject + }.not_to have_enqueued_job(CreateFormulaireQFCollectivityJob) + end end context 'when modalities include formulaire_qf' do @@ -81,6 +87,12 @@ subject }.to have_enqueued_job(CreateFormulaireQFHubEESubscriptionJob) end + + it 'schedules a job to create the collectivity on formulaire qf' do + expect { + subject + }.to have_enqueued_job(CreateFormulaireQFCollectivityJob) + end end context 'when event not approve' do @@ -93,6 +105,12 @@ subject }.not_to have_enqueued_job(CreateFormulaireQFHubEESubscriptionJob) end + + it 'does not schedule a job to create formulaire qf access on HubEE' do + expect { + subject + }.not_to have_enqueued_job(CreateFormulaireQFCollectivityJob) + end end end end