Browse Source

Merge branch 'CLDC-4462-clear-confidential-address-data' into CLDC-4462-clear-confidential-data-follow-up-actions

CLDC-4462-clear-confidential-data-follow-up-actions
Nat Dean-Lewis 3 days ago
parent
commit
1169a2ce0f
  1. 9
      Gemfile.lock
  2. 2
      app/services/exports/xml_export_service.rb
  3. 21
      lib/tasks/clear_confidential_address_data.rake
  4. 46
      spec/lib/tasks/clear_confidential_address_data_spec.rb
  5. 4
      spec/services/storage/archive_service_spec.rb

9
Gemfile.lock

@ -433,9 +433,12 @@ GEM
actionpack (>= 7.0)
railties (>= 7.0)
rexml (3.4.4)
roo (2.10.1)
roo (3.0.0)
base64 (~> 0.2)
csv (~> 3)
logger (~> 1)
nokogiri (~> 1)
rubyzip (>= 1.3.0, < 3.0.0)
rubyzip (>= 3.0.0, < 4.0.0)
rotp (6.3.0)
rspec-core (3.13.0)
rspec-support (~> 3.13.0)
@ -499,7 +502,7 @@ GEM
faraday-multipart (>= 1)
ruby-progressbar (1.13.0)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
rubyzip (3.6.0)
securerandom (0.4.1)
selenium-webdriver (4.43.0)
base64 (~> 0.2)

2
app/services/exports/xml_export_service.rb

@ -48,7 +48,7 @@ module Exports
@logger.info("Creating #{archive} - #{initial_count} resources")
return {} if initial_count.zero?
zip_file = Zip::File.open_buffer(StringIO.new)
zip_file = Zip::File.open_buffer(StringIO.new, create: true)
part_number = 1
last_processed_marker = nil

21
lib/tasks/clear_confidential_address_data.rake

@ -41,26 +41,7 @@ task clear_confidential_address_data: :environment do
scope.find_each do |log|
original_status = log.status
log.uprn = nil
log.uprn_known = nil
log.uprn_confirmed = nil
log.uprn_selection = nil
log.address_line1 = nil
log.address_line2 = nil
log.town_or_city = nil
log.county = nil
log.postcode_full = nil
log.postcode_known = nil
log.address_line1_input = nil
log.postcode_full_input = nil
log.address_line1_as_entered = nil
log.address_line2_as_entered = nil
log.town_or_city_as_entered = nil
log.county_as_entered = nil
log.postcode_full_as_entered = nil
log.la_as_entered = nil
log.address_search_value_check = nil
log.la = nil
fields_present_scope.each { |field| log[field] = nil }
log.is_la_inferred = log.la.present?
if log.save(validate: false)

46
spec/lib/tasks/clear_confidential_address_data_spec.rb

@ -66,6 +66,20 @@ RSpec.describe "clear_confidential_address_data" do
expect(log[:la]).to be_nil
expect(log.is_la_inferred).to be true
end
it "does not affect the scheme or location associations" do
task.invoke
log.reload
expect(log.scheme_id).to eq(scheme.id)
expect(log.location_id).to eq(location.id)
end
it "is idempotent" do
task.invoke
task.reenable
expect { task.invoke }.not_to(change { log.reload.updated_at })
end
end
context "when the scheme's location has no resolvable local authority" do
@ -88,7 +102,12 @@ RSpec.describe "clear_confidential_address_data" do
it "does not clear the address fields" do
task.invoke
expect(log.reload.address_line1).to eq("1 Secret Street")
log.reload
expect(log.address_line1).to eq("1 Secret Street")
expect(log.town_or_city).to eq("Secretville")
expect(log.uprn).to eq("123456789012")
expect(log.postcode_known).to eq(1)
end
end
@ -97,7 +116,12 @@ RSpec.describe "clear_confidential_address_data" do
it "does not clear the address fields" do
task.invoke
expect(log.reload.address_line1).to eq("1 Secret Street")
log.reload
expect(log.address_line1).to eq("1 Secret Street")
expect(log.town_or_city).to eq("Secretville")
expect(log.uprn).to eq("123456789012")
expect(log.postcode_known).to eq(1)
end
end
@ -119,23 +143,5 @@ RSpec.describe "clear_confidential_address_data" do
expect { task.invoke }.not_to(change { log.reload.updated_at })
end
end
it "does not affect the scheme or location associations" do
log = create_log_with_address_data(scheme:, location:, startdate: Time.zone.local(2026, 5, 1))
task.invoke
log.reload
expect(log.scheme_id).to eq(scheme.id)
expect(log.location_id).to eq(location.id)
end
it "is idempotent" do
log = create_log_with_address_data(scheme:, location:, startdate: Time.zone.local(2026, 5, 1))
task.invoke
task.reenable
expect { task.invoke }.not_to(change { log.reload.updated_at })
end
end
end

4
spec/services/storage/archive_service_spec.rb

@ -13,7 +13,7 @@ RSpec.describe Storage::ArchiveService do
file
end
let(:archive_content) do
zip_file = Zip::File.open_buffer(StringIO.new)
zip_file = Zip::File.open_buffer(StringIO.new, create: true)
zip_file.mkdir(compressed_folder)
zip_file.add(compressed_filepath, compressed_file)
zip_file.write_buffer
@ -51,7 +51,7 @@ RSpec.describe Storage::ArchiveService do
it "raises an error if the file exists but is too large" do
archive = archive_service.instance_variable_get(:@archive)
allow(archive).to receive(:get_entry).and_return(Zip::Entry.new(nil, "", nil, nil, nil, nil, nil, 100_000_000, nil))
allow(archive).to receive(:get_entry).and_return(Zip::Entry.new(nil, "", size: 100_000_000))
expect { archive_service.get_file_io(compressed_filepath) }
.to raise_error(RuntimeError, "File too large to be extracted")

Loading…
Cancel
Save