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:)