From 4287fee93d2e636eb67adcb26556ac3ed1e28b62 Mon Sep 17 00:00:00 2001 From: Eugene Burmakin Date: Fri, 26 Sep 2025 23:31:45 +0200 Subject: [PATCH] Fix tests after updating rubyzip --- app/services/users/export_data.rb | 18 +++++------------- app/services/users/import_data.rb | 8 ++++++-- spec/models/notification_spec.rb | 7 ++++++- spec/services/users/export_data_spec.rb | 4 ++-- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/app/services/users/export_data.rb b/app/services/users/export_data.rb index 7ebbf0a1..fa7c32b5 100644 --- a/app/services/users/export_data.rb +++ b/app/services/users/export_data.rb @@ -311,18 +311,10 @@ class Users::ExportData private - attr_reader :user - - def export_directory - @export_directory - end - - def files_directory - @files_directory - end + attr_reader :user, :export_directory, :files_directory def calculate_entity_counts - Rails.logger.info "Calculating entity counts for export" + Rails.logger.info 'Calculating entity counts for export' counts = { areas: user.areas.count, @@ -340,15 +332,15 @@ class Users::ExportData counts end - def create_zip_archive(export_directory, zip_file_path) + def create_zip_archive(export_directory, zip_file_path) original_compression = Zip.default_compression Zip.default_compression = Zip::Entry::DEFLATED - Zip::File.open(zip_file_path, Zip::File::CREATE) do |zipfile| + Zip::File.open(zip_file_path, create: true) do |zipfile| Dir.glob(export_directory.join('**', '*')).each do |file| next if File.directory?(file) || file == zip_file_path.to_s - relative_path = file.sub(export_directory.to_s + '/', '') + relative_path = file.sub(%r{#{export_directory}/}, '') zipfile.add(relative_path, file) end diff --git a/app/services/users/import_data.rb b/app/services/users/import_data.rb index 664c27cc..caa72d63 100644 --- a/app/services/users/import_data.rb +++ b/app/services/users/import_data.rb @@ -71,11 +71,15 @@ class Users::ImportData Zip::File.open(archive_path) do |zip_file| zip_file.each do |entry| - extraction_path = @import_directory.join(entry.name) + next if entry.directory? + + extraction_path = File.join(@import_directory, entry.name) + Rails.logger.debug "Extracting #{entry.name} to #{extraction_path}" FileUtils.mkdir_p(File.dirname(extraction_path)) - entry.extract(extraction_path) + # Use destination_directory parameter for rubyzip 3.x compatibility + entry.extract(entry.name, destination_directory: @import_directory) end end end diff --git a/spec/models/notification_spec.rb b/spec/models/notification_spec.rb index 41c3587e..b55f761a 100644 --- a/spec/models/notification_spec.rb +++ b/spec/models/notification_spec.rb @@ -23,7 +23,12 @@ RSpec.describe Notification, type: :model do let(:unread_notification) { create(:notification, read_at: nil) } it 'returns only unread notifications' do - expect(described_class.unread).to eq([unread_notification]) + read_notification # ensure it's created + unread_notification # ensure it's created + + unread_notifications = described_class.unread + expect(unread_notifications).to include(unread_notification) + expect(unread_notifications).not_to include(read_notification) end end end diff --git a/spec/services/users/export_data_spec.rb b/spec/services/users/export_data_spec.rb index b2c600d2..1d668ece 100644 --- a/spec/services/users/export_data_spec.rb +++ b/spec/services/users/export_data_spec.rb @@ -57,7 +57,7 @@ RSpec.describe Users::ExportData, type: :service do allow(export_record).to receive_message_chain(:file, :attach) # Mock Zip file creation - allow(Zip::File).to receive(:open).with(zip_file_path, Zip::File::CREATE).and_yield(zip_file_double) + allow(Zip::File).to receive(:open).with(zip_file_path, create: true).and_yield(zip_file_double) allow(zip_file_double).to receive(:default_compression=) allow(zip_file_double).to receive(:default_compression_level=) allow(zip_file_double).to receive(:add) @@ -108,7 +108,7 @@ RSpec.describe Users::ExportData, type: :service do end it 'creates a zip file with proper compression settings' do - expect(Zip::File).to receive(:open).with(zip_file_path, Zip::File::CREATE) + expect(Zip::File).to receive(:open).with(zip_file_path, create: true) expect(Zip).to receive(:default_compression).and_return(-1) # Mock original compression expect(Zip).to receive(:default_compression=).with(Zip::Entry::DEFLATED) expect(Zip).to receive(:default_compression=).with(-1) # Restoration