From e2fc50afbc51d8c737afa241074bfcf4f4fbcba3 Mon Sep 17 00:00:00 2001
From: Khemissi Amir <amir.khemissi@insat.ucar.tn>
Date: Fri, 21 Oct 2022 15:53:08 +0100
Subject: [PATCH] Resources migration: Minor improvement to tasks. (#4015)

+ Added capitalization on migrated roles names.
	+ Auto mapping of v2 default roles names to v3 names.
	+ Better filtering to migrated users records.
---
 lib/tasks/migrations/migrations.rake | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/lib/tasks/migrations/migrations.rake b/lib/tasks/migrations/migrations.rake
index 3c87f0a7..4c9c9f21 100644
--- a/lib/tasks/migrations/migrations.rake
+++ b/lib/tasks/migrations/migrations.rake
@@ -1,6 +1,7 @@
 # frozen_string_literal: true
 
 namespace :migrations do
+  DEFAULT_ROLES_MAP = { "admin" => "Administrator", "user" => "User" }.freeze
   COMMON = {
     headers: { "Content-Type" => "application/json" },
     batch_size: 1000,
@@ -13,7 +14,7 @@ namespace :migrations do
     Role.select(:id, :name)
         .where.not(name: Role::RESERVED_ROLE_NAMES)
         .find_each(batch_size: COMMON[:batch_size]) do |r|
-          params = { role: { name: r.name } }
+          params = { role: { name: r.name.capitalize } }
           response = Net::HTTP.post(uri('roles'), payload(params), COMMON[:headers])
 
           case response
@@ -39,10 +40,14 @@ namespace :migrations do
     start, stop = range(args)
 
     has_encountred_issue = 0
+    filtered_roles_names = Role::RESERVED_ROLE_NAMES - %w[admin user]
 
     User.select(:id, :uid, :name, :email, :social_uid, :language, :role_id)
+        .joins(:role)
+        .where.not(roles: { name: filtered_roles_names }, deleted: true)
         .find_each(start: start, finish: stop, batch_size: COMMON[:batch_size]) do |u|
-          params = { user: { name: u.name, email: u.email, external_id: u.social_uid, language: u.language, role: u.role.name } }
+          role_name = infer_role_name(u.role.name)
+          params = { user: { name: u.name, email: u.email, external_id: u.social_uid, language: u.language, role: role_name } }
           response = Net::HTTP.post(uri('users'), payload(params), COMMON[:headers])
 
           case response
@@ -111,4 +116,8 @@ namespace :migrations do
 
     [start, stop]
   end
+
+  def infer_role_name(name)
+    DEFAULT_ROLES_MAP[name] || name.capitalize
+  end
 end
-- 
GitLab