diff --git a/app/controllers/api/v1/registrant/contacts_controller.rb b/app/controllers/api/v1/registrant/contacts_controller.rb index b8e9d2b43..0e4ca81c2 100644 --- a/app/controllers/api/v1/registrant/contacts_controller.rb +++ b/app/controllers/api/v1/registrant/contacts_controller.rb @@ -102,7 +102,6 @@ module Api ident_type: 'priv', ident_country_code: country) return contact if contact - update_contacts_before_receive Contact.find_by(uuid: uuid, ident_type: 'org', ident: company_codes, ident_country_code: country) @@ -110,21 +109,6 @@ module Api nil end - def update_contacts_before_receive - company_register = CompanyRegister::Client.new - companies = company_register.representation_rights(citizen_personal_code: current_registrant_user.ident, - citizen_country_code: current_registrant_user.country.alpha3) - - companies.each do |c| - contact = Contact.find_by(ident: c.registration_number) - break if contact.blank? - contact.update(name: c.company_name) unless c.company_name == contact.name - end - - rescue CompanyRegister::NotAvailableError - nil - end - def company_codes current_registrant_user.companies.collect(&:registration_number) end diff --git a/app/models/registrant_user.rb b/app/models/registrant_user.rb index f7e85c5af..a907d98e5 100644 --- a/app/models/registrant_user.rb +++ b/app/models/registrant_user.rb @@ -20,8 +20,34 @@ class RegistrantUser < User def companies(company_register = CompanyRegister::Client.new) return [] if ident.include?('-') - company_register.representation_rights(citizen_personal_code: ident, + companies = company_register.representation_rights(citizen_personal_code: ident, citizen_country_code: country.alpha3) + update_contacts_before_receive(companies) + companies + end + + def update_contacts_before_receive(companies) + return if companies.blank? + + companies.each do |c| + contact = Contact.find_by(ident: c.registration_number, ident_country_code: "EE") + break if contact.blank? + + unless c.company_name == contact.name + old_contact_name = contact.name + contact.update(name: c.company_name) + notify_registrar_data_updated(company_name: c.company_name, old_contact_name: old_contact_name, contact: contact) + end + end + + rescue CompanyRegister::NotAvailableError + nil + end + + def notify_registrar_data_updated(company_name:, old_contact_name:, contact:) + contact.registrar.notifications.create!( + text: "#{old_contact_name} was changed to #{company_name}" + ) end def contacts(representable: true) diff --git a/test/models/registrant_user_test.rb b/test/models/registrant_user_test.rb index c61f095f2..47adcda68 100644 --- a/test/models/registrant_user_test.rb +++ b/test/models/registrant_user_test.rb @@ -1,6 +1,8 @@ require 'test_helper' class RegistrantUserTest < ActiveSupport::TestCase + Company = Struct.new(:registration_number, :company_name) + def setup super @@ -30,14 +32,34 @@ class RegistrantUserTest < ActiveSupport::TestCase assert_equal Country.new('US'), user.country end + def test_should_update_org_contact_if_data_from_business_registry_dismatch + assert_equal 'US-1234', @user.registrant_ident + org = contacts(:acme_ltd) + org.ident_country_code = 'EE' + org.save(validate: false) + org.reload + + company = Company.new(org.ident, "ace") + + company_register = Minitest::Mock.new + company_register.expect(:representation_rights, [company], [{ citizen_personal_code: '1234', + citizen_country_code: 'USA' }]) + assert_equal [company], @user.companies(company_register) + company_register.verify + + org.reload + end + def test_queries_company_register_for_associated_companies assert_equal 'US-1234', @user.registrant_ident + company = Company.new("acme", "ace") + company_register = Minitest::Mock.new - company_register.expect(:representation_rights, %w[acme ace], [{ citizen_personal_code: '1234', + company_register.expect(:representation_rights, [company], [{ citizen_personal_code: '1234', citizen_country_code: 'USA' }]) - assert_equal %w[acme ace], @user.companies(company_register) + assert_equal [company], @user.companies(company_register) company_register.verify end