2 changed files with 66 additions and 0 deletions
@ -0,0 +1,27 @@ |
|||||||
|
module Imports |
||||||
|
class ImportReportService |
||||||
|
def initialize(storage_service, old_organisation_ids, logger = Rails.logger) |
||||||
|
@storage_service = storage_service |
||||||
|
@logger = logger |
||||||
|
@old_organisation_ids = old_organisation_ids |
||||||
|
end |
||||||
|
|
||||||
|
BYTE_ORDER_MARK = "\uFEFF".freeze # Required to ensure Excel always reads CSV as UTF-8 |
||||||
|
|
||||||
|
def create_report(report_directory) |
||||||
|
write_missing_data_coordinators_report(report_directory) |
||||||
|
end |
||||||
|
|
||||||
|
def write_missing_data_coordinators_report(report_directory) |
||||||
|
csv_string = "Organisation ID,Old Organisation ID,Organisation Name\n" |
||||||
|
@old_organisation_ids.each do |old_organisation_id| |
||||||
|
organisation = Organisation.find_by(old_visible_id: old_organisation_id) |
||||||
|
if organisation.users.none?(&:data_coordinator?) |
||||||
|
csv_string += "#{organisation.id},#{old_organisation_id},#{organisation.name}\n" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
@storage_service.write_file("#{report_directory}/organisations_without_data_coordinators.csv", BYTE_ORDER_MARK + csv_string) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
@ -0,0 +1,39 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Imports::ImportReportService do |
||||||
|
subject(:report_service) { described_class.new(storage_service, old_organisation_ids) } |
||||||
|
|
||||||
|
let(:storage_service) { instance_double(Storage::S3Service) } |
||||||
|
|
||||||
|
context "when all organisations have data coordinators" do |
||||||
|
let(:organisation) { create(:organisation, old_visible_id: "1") } |
||||||
|
let(:old_organisation_ids) { [organisation.old_visible_id] } |
||||||
|
|
||||||
|
before do |
||||||
|
create(:user, :data_coordinator, organisation:) |
||||||
|
end |
||||||
|
|
||||||
|
it "writes an empty organisations without a data coordinators report" do |
||||||
|
expect(storage_service).to receive(:write_file).with("report_directory/organisations_without_data_coordinators.csv", "\uFEFFOrganisation ID,Old Organisation ID,Organisation Name\n") |
||||||
|
|
||||||
|
report_service.create_report("report_directory") |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
context "when some organisations have no data coordinators" do |
||||||
|
let(:organisation) { create(:organisation, old_visible_id: "") } |
||||||
|
let(:organisation2) { create(:organisation, old_visible_id: "2") } |
||||||
|
let(:organisation3) { create(:organisation, old_visible_id: "3") } |
||||||
|
let(:old_organisation_ids) { [organisation.old_visible_id, organisation2.old_visible_id, organisation3.old_visible_id] } |
||||||
|
|
||||||
|
before do |
||||||
|
create(:user, :data_coordinator, organisation:) |
||||||
|
end |
||||||
|
|
||||||
|
it "writes an empty organisations without a data coordinators report" do |
||||||
|
expect(storage_service).to receive(:write_file).with("report_directory/organisations_without_data_coordinators.csv", "\uFEFFOrganisation ID,Old Organisation ID,Organisation Name\n#{organisation2.id},2,#{organisation2.name}\n#{organisation3.id},3,#{organisation3.name}\n") |
||||||
|
|
||||||
|
report_service.create_report("report_directory") |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
Loading…
Reference in new issue