From edf1c1fccf156b8789814be80f3a17b57afd38d1 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 23 Jul 2018 17:33:06 +0300 Subject: Make ObjectStoreSettings use more explicit and add specs Signed-off-by: Dmitriy Zaporozhets --- config/initializers/1_settings.rb | 11 +++++------ config/object_store_settings.rb | 4 +++- spec/config/object_store_settings_spec.rb | 29 +++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 spec/config/object_store_settings_spec.rb diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index 0ecfef0d0fc..3230d9c0a5b 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -1,4 +1,5 @@ require_relative '../settings' +require_relative '../object_store_settings' # Default settings Settings['ldap'] ||= Settingslogic.new({}) @@ -170,8 +171,6 @@ Settings.gitlab_ci['url'] ||= Settings.__send__(:build_gitlab_ci Settings['incoming_email'] ||= Settingslogic.new({}) Settings.incoming_email['enabled'] = false if Settings.incoming_email['enabled'].nil? - - # # Build Artifacts # @@ -181,8 +180,7 @@ Settings.artifacts['storage_path'] = Settings.absolute(Settings.artifacts.values # Settings.artifact['path'] is deprecated, use `storage_path` instead Settings.artifacts['path'] = Settings.artifacts['storage_path'] Settings.artifacts['max_size'] ||= 100 # in megabytes -ObjectStoreSettings.new(Settings.artifacts['object_store']) - +Settings.artifacts['object_store'] = ObjectStoreSettings.parse(Settings.artifacts['object_store']) # # Registry @@ -221,7 +219,7 @@ Settings.pages.admin['certificate'] ||= '' Settings['lfs'] ||= Settingslogic.new({}) Settings.lfs['enabled'] = true if Settings.lfs['enabled'].nil? Settings.lfs['storage_path'] = Settings.absolute(Settings.lfs['storage_path'] || File.join(Settings.shared['path'], "lfs-objects")) -ObjectStoreSettings.new(Settings.lfs['object_store']) +Settings.lfs['object_store'] = ObjectStoreSettings.parse(Settings.lfs['object_store']) # # Uploads @@ -229,7 +227,8 @@ ObjectStoreSettings.new(Settings.lfs['object_store']) Settings['uploads'] ||= Settingslogic.new({}) Settings.uploads['storage_path'] = Settings.absolute(Settings.uploads['storage_path'] || 'public') Settings.uploads['base_dir'] = Settings.uploads['base_dir'] || 'uploads/-/system' -ObjectStoreSettings.new(Settings.uploads['object_store']) +Settings.uploads['object_store'] = ObjectStoreSettings.parse(Settings.uploads['object_store']) +Settings.uploads['object_store']['remote_directory'] ||= 'uploads' # # Mattermost diff --git a/config/object_store_settings.rb b/config/object_store_settings.rb index 7bf05622bac..d85ff394dcc 100644 --- a/config/object_store_settings.rb +++ b/config/object_store_settings.rb @@ -1,13 +1,15 @@ # Set default values for object_store settings class ObjectStoreSettings - def initialize(object_store) + def self.parse(object_store) object_store ||= Settingslogic.new({}) object_store['enabled'] = false if object_store['enabled'].nil? object_store['remote_directory'] ||= nil object_store['direct_upload'] = false if object_store['direct_upload'].nil? object_store['background_upload'] = true if object_store['background_upload'].nil? object_store['proxy_download'] = false if object_store['proxy_download'].nil? + # Convert upload connection settings to use string keys, to make Fog happy object_store['connection']&.deep_stringify_keys! + object_store end end diff --git a/spec/config/object_store_settings_spec.rb b/spec/config/object_store_settings_spec.rb new file mode 100644 index 00000000000..b1ada3c99db --- /dev/null +++ b/spec/config/object_store_settings_spec.rb @@ -0,0 +1,29 @@ +require 'spec_helper' +require Rails.root.join('config', 'object_store_settings.rb') + +describe ObjectStoreSettings do + describe '.parse' do + it 'should set correct default values' do + settings = described_class.parse(nil) + + expect(settings['enabled']).to be false + expect(settings['direct_upload']).to be false + expect(settings['background_upload']).to be true + expect(settings['remote_directory']).to be nil + end + + it 'respects original values' do + original_settings = Settingslogic.new({ + 'enabled' => true, + 'remote_directory' => 'artifacts' + }) + + settings = described_class.parse(original_settings) + + expect(settings['enabled']).to be true + expect(settings['direct_upload']).to be false + expect(settings['background_upload']).to be true + expect(settings['remote_directory']).to eq 'artifacts' + end + end +end -- cgit v1.2.3