dawarich/spec/services/users/import_data/settings_spec.rb
2025-06-28 12:22:56 +02:00

82 lines
2.3 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Users::ImportData::Settings, type: :service do
let(:user) { create(:user, settings: { existing_setting: 'value', theme: 'light' }) }
let(:settings_data) { { 'theme' => 'dark', 'distance_unit' => 'km', 'new_setting' => 'test' } }
let(:service) { described_class.new(user, settings_data) }
describe '#call' do
context 'with valid settings data' do
it 'merges imported settings with existing settings' do
expect { service.call }.to change { user.reload.settings }.to(
'existing_setting' => 'value',
'theme' => 'dark',
'distance_unit' => 'km',
'new_setting' => 'test'
)
end
it 'gives precedence to imported settings over existing ones' do
service.call
expect(user.reload.settings['theme']).to eq('dark')
end
it 'logs the import process' do
expect(Rails.logger).to receive(:info).with("Importing settings for user: #{user.email}")
expect(Rails.logger).to receive(:info).with("Settings import completed")
service.call
end
end
context 'with nil settings data' do
let(:settings_data) { nil }
it 'does not change user settings' do
expect { service.call }.not_to change { user.reload.settings }
end
it 'does not log import process' do
expect(Rails.logger).not_to receive(:info)
service.call
end
end
context 'with non-hash settings data' do
let(:settings_data) { 'invalid_data' }
it 'does not change user settings' do
expect { service.call }.not_to change { user.reload.settings }
end
it 'does not log import process' do
expect(Rails.logger).not_to receive(:info)
service.call
end
end
context 'with empty settings data' do
let(:settings_data) { {} }
it 'preserves existing settings without adding new ones' do
original_settings = user.settings.dup
service.call
expect(user.reload.settings).to eq(original_settings)
end
it 'logs the import process' do
expect(Rails.logger).to receive(:info).with("Importing settings for user: #{user.email}")
expect(Rails.logger).to receive(:info).with("Settings import completed")
service.call
end
end
end
end