From 04cf89e91b87fe22d614618d463b746280c8602c Mon Sep 17 00:00:00 2001 From: baarkerlounger Date: Wed, 30 Mar 2022 11:54:39 +0100 Subject: [PATCH] Import key contact field --- app/services/imports/user_import_service.rb | 29 ++++++++++++++- ...729b1a5dfb68bb1e01c08445830c0add40907c.xml | 13 +++++++ ...717836154cd9a58f9e2f1d3077e3ab81e07613.xml | 13 +++++++ .../imports/user_import_service_spec.rb | 35 +++++++++++++++++++ 4 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 spec/fixtures/softwire_imports/users/d4729b1a5dfb68bb1e01c08445830c0add40907c.xml create mode 100644 spec/fixtures/softwire_imports/users/d6717836154cd9a58f9e2f1d3077e3ab81e07613.xml diff --git a/app/services/imports/user_import_service.rb b/app/services/imports/user_import_service.rb index 0c32b582f..2993f8504 100644 --- a/app/services/imports/user_import_service.rb +++ b/app/services/imports/user_import_service.rb @@ -24,7 +24,9 @@ module Imports phone: user_field_value(xml_document, "telephone-no"), old_user_id:, organisation:, - role: PROVIDER_TYPE[user_field_value(xml_document, "user-type")], + role: role(user_field_value(xml_document, "user-type")), + is_dpo: is_dpo?(user_field_value(xml_document, "user-type")), + is_key_contact: is_key_contact?(user_field_value(xml_document, "contact-priority-id")), ) end end @@ -32,5 +34,30 @@ module Imports def user_field_value(xml_document, field) field_value(xml_document, "user", field) end + + def role(field_value) + return unless field_value + + case field_value.downcase.strip + when "data provider" + "data_provider" + when "co-ordinator" + "data_coordinator" + when "private data downloader" + "data_accessor" + end + end + + def is_dpo?(field_value) + return false unless field_value.present? + + field_value.downcase.strip == "data protection officer" + end + + def is_key_contact?(field_value) + return false unless field_value.present? + + ["ecore contact", "key performance contact"].include?(field_value.downcase.strip) + end end end diff --git a/spec/fixtures/softwire_imports/users/d4729b1a5dfb68bb1e01c08445830c0add40907c.xml b/spec/fixtures/softwire_imports/users/d4729b1a5dfb68bb1e01c08445830c0add40907c.xml new file mode 100644 index 000000000..77ac91600 --- /dev/null +++ b/spec/fixtures/softwire_imports/users/d4729b1a5dfb68bb1e01c08445830c0add40907c.xml @@ -0,0 +1,13 @@ + + d4729b1a5dfb68bb1e01c08445830c0add40907c + xxx + John Doe + john.doe@gov.uk + 7c5bd5fb549c09a2c55d7cb90d7ba84927e64618 + john.doe@gov.uk + Co-ordinator + true + false + Key Performance Contact + 02012345678 + diff --git a/spec/fixtures/softwire_imports/users/d6717836154cd9a58f9e2f1d3077e3ab81e07613.xml b/spec/fixtures/softwire_imports/users/d6717836154cd9a58f9e2f1d3077e3ab81e07613.xml new file mode 100644 index 000000000..9b390fa29 --- /dev/null +++ b/spec/fixtures/softwire_imports/users/d6717836154cd9a58f9e2f1d3077e3ab81e07613.xml @@ -0,0 +1,13 @@ + + d6717836154cd9a58f9e2f1d3077e3ab81e07613 + xxx + John Doe + john.doe@gov.uk + 7c5bd5fb549c09a2c55d7cb90d7ba84927e64618 + john.doe@gov.uk + Co-ordinator + true + false + eCORE Contact + 02012345678 + diff --git a/spec/services/imports/user_import_service_spec.rb b/spec/services/imports/user_import_service_spec.rb index 8401d7149..ffb91a6fe 100644 --- a/spec/services/imports/user_import_service_spec.rb +++ b/spec/services/imports/user_import_service_spec.rb @@ -29,6 +29,7 @@ RSpec.describe Imports::UserImportService do expect(user.phone).to eq("02012345678") expect(user).to be_data_provider expect(user.organisation.old_org_id).to eq(old_org_id) + expect(user.is_key_contact?).to be false end it "refuses to create a user belonging to a non existing organisation" do @@ -36,6 +37,40 @@ RSpec.describe Imports::UserImportService do .to raise_error(ActiveRecord::RecordInvalid, /Organisation must exist/) end + context "when the user is a data coordinator" do + let(:old_user_id) { "d4729b1a5dfb68bb1e01c08445830c0add40907c" } + + it "sets their role correctly" do + FactoryBot.create(:organisation, old_org_id:) + import_service.create_users("user_directory") + expect(User.find_by(old_user_id:)).to be_data_coordinator + end + end + + context "when the user was a 'Key Performance Contact' in the old system" do + let(:old_user_id) { "d4729b1a5dfb68bb1e01c08445830c0add40907c" } + + it "marks them as a key contact" do + FactoryBot.create(:organisation, old_org_id:) + import_service.create_users("user_directory") + + user = User.find_by(old_user_id:) + expect(user.is_key_contact?).to be true + end + end + + context "when the user was a 'eCORE Contact' in the old system" do + let(:old_user_id) { "d6717836154cd9a58f9e2f1d3077e3ab81e07613" } + + it "marks them as a key contact" do + FactoryBot.create(:organisation, old_org_id:) + import_service.create_users("user_directory") + + user = User.find_by(old_user_id:) + expect(user.is_key_contact?).to be true + end + end + context "when the user has already been imported previously" do before do org = FactoryBot.create(:organisation, old_org_id:)