diff --git a/spec/lib/plugin/instance_spec.rb b/spec/lib/plugin/instance_spec.rb index de983da141e..ce202acb5a8 100644 --- a/spec/lib/plugin/instance_spec.rb +++ b/spec/lib/plugin/instance_spec.rb @@ -243,8 +243,7 @@ RSpec.describe Plugin::Instance do end it "can activate plugins correctly" do - plugin = Plugin::Instance.new - plugin.path = "#{Rails.root}/spec/fixtures/plugins/my_plugin/plugin.rb" + plugin = plugin_from_fixtures("my_plugin") junk_file = "#{plugin.auto_generated_path}/junk" plugin.ensure_directory(junk_file) @@ -260,8 +259,7 @@ RSpec.describe Plugin::Instance do end it "registers auth providers correctly" do - plugin = Plugin::Instance.new - plugin.path = "#{Rails.root}/spec/fixtures/plugins/my_plugin/plugin.rb" + plugin = plugin_from_fixtures("my_plugin") plugin.activate! expect(DiscoursePluginRegistry.auth_providers.count).to eq(0) plugin.notify_before_auth @@ -271,8 +269,7 @@ RSpec.describe Plugin::Instance do end it "finds all the custom assets" do - plugin = Plugin::Instance.new - plugin.path = "#{Rails.root}/spec/fixtures/plugins/my_plugin/plugin.rb" + plugin = plugin_from_fixtures("my_plugin") plugin.register_asset("test.css") plugin.register_asset("test2.scss") @@ -397,8 +394,8 @@ RSpec.describe Plugin::Instance do end describe "locales" do - let(:plugin_path) { "#{Rails.root}/spec/fixtures/plugins/custom_locales" } - let!(:plugin) { Plugin::Instance.new(nil, "#{plugin_path}/plugin.rb") } + let!(:plugin) { plugin_from_fixtures("custom_locales") } + let(:plugin_path) { File.dirname(plugin.path) } let(:plural) do { keys: %i[one few other], diff --git a/spec/lib/stylesheet/compiler_spec.rb b/spec/lib/stylesheet/compiler_spec.rb index 753c54a3104..c6902eb1757 100644 --- a/spec/lib/stylesheet/compiler_spec.rb +++ b/spec/lib/stylesheet/compiler_spec.rb @@ -56,15 +56,13 @@ RSpec.describe Stylesheet::Compiler do context "with a plugin" do let :plugin1 do - plugin1 = Plugin::Instance.new - plugin1.path = "#{Rails.root}/spec/fixtures/plugins/my_plugin/plugin.rb" + plugin1 = plugin_from_fixtures("my_plugin") plugin1.register_css "body { background: $primary }" plugin1 end let :plugin2 do - plugin2 = Plugin::Instance.new - plugin2.path = "#{Rails.root}/spec/fixtures/plugins/scss_plugin/plugin.rb" + plugin2 = plugin_from_fixtures("scss_plugin") plugin2 end @@ -183,8 +181,7 @@ RSpec.describe Stylesheet::Compiler do context "with a plugin" do before do - plugin = Plugin::Instance.new - plugin.path = "#{Rails.root}/spec/fixtures/plugins/color_definition/plugin.rb" + plugin = plugin_from_fixtures("color_definition") Discourse.plugins << plugin plugin.activate! end diff --git a/spec/lib/stylesheet/manager_spec.rb b/spec/lib/stylesheet/manager_spec.rb index 433f99decbe..b63cbdad9d0 100644 --- a/spec/lib/stylesheet/manager_spec.rb +++ b/spec/lib/stylesheet/manager_spec.rb @@ -1014,15 +1014,13 @@ RSpec.describe Stylesheet::Manager do context "when there are enabled plugins" do let(:plugin1) do - plugin1 = Plugin::Instance.new - plugin1.path = "#{Rails.root}/spec/fixtures/plugins/my_plugin/plugin.rb" + plugin1 = plugin_from_fixtures("my_plugin") plugin1.register_css "body { padding: 1px 2px 3px 4px; }" plugin1 end let(:plugin2) do - plugin2 = Plugin::Instance.new - plugin2.path = "#{Rails.root}/spec/fixtures/plugins/scss_plugin/plugin.rb" + plugin2 = plugin_from_fixtures("scss_plugin") plugin2 end diff --git a/spec/lib/svg_sprite/svg_sprite_spec.rb b/spec/lib/svg_sprite/svg_sprite_spec.rb index e657921f900..e928280b7c1 100644 --- a/spec/lib/svg_sprite/svg_sprite_spec.rb +++ b/spec/lib/svg_sprite/svg_sprite_spec.rb @@ -238,8 +238,7 @@ RSpec.describe SvgSprite do context "with a plugin" do let :plugin1 do - plugin1 = Plugin::Instance.new - plugin1.path = "#{Rails.root}/spec/fixtures/plugins/my_plugin/plugin.rb" + plugin1 = plugin_from_fixtures("my_plugin") plugin1 end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 69665d0bbd0..086c068a88e 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -346,7 +346,7 @@ RSpec.configure do |config| end config.after(:suite) do - FileUtils.remove_dir(file_from_fixtures_tmp_folder, true) if SpecSecureRandom.value + FileUtils.remove_dir(concurrency_safe_tmp_dir, true) if SpecSecureRandom.value end config.before :each, &TestSetup.method(:test_setup) @@ -559,15 +559,27 @@ def unfreeze_time end def file_from_fixtures(filename, directory = "images") - SpecSecureRandom.value ||= SecureRandom.hex - FileUtils.mkdir_p(file_from_fixtures_tmp_folder) unless Dir.exist?(file_from_fixtures_tmp_folder) - tmp_file_path = File.join(file_from_fixtures_tmp_folder, SecureRandom.hex << filename) + tmp_file_path = File.join(concurrency_safe_tmp_dir, SecureRandom.hex << filename) FileUtils.cp("#{Rails.root}/spec/fixtures/#{directory}/#{filename}", tmp_file_path) File.new(tmp_file_path) end -def file_from_fixtures_tmp_folder - File.join(Dir.tmpdir, "rspec_#{Process.pid}_#{SpecSecureRandom.value}") +def plugin_from_fixtures(plugin_name) + tmp_plugins_dir = File.join(concurrency_safe_tmp_dir, "plugins") + + FileUtils.mkdir(tmp_plugins_dir) if !Dir.exist?(tmp_plugins_dir) + FileUtils.cp_r("#{Rails.root}/spec/fixtures/plugins/#{plugin_name}", tmp_plugins_dir) + + plugin = Plugin::Instance.new + plugin.path = File.join(tmp_plugins_dir, plugin_name, "plugin.rb") + plugin +end + +def concurrency_safe_tmp_dir + SpecSecureRandom.value ||= SecureRandom.hex + dir_path = File.join(Dir.tmpdir, "rspec_#{Process.pid}_#{SpecSecureRandom.value}") + FileUtils.mkdir_p(dir_path) unless Dir.exist?(dir_path) + dir_path end def has_trigger?(trigger_name) diff --git a/spec/requests/bootstrap_controller_spec.rb b/spec/requests/bootstrap_controller_spec.rb index 194fc15659c..e229f47f866 100644 --- a/spec/requests/bootstrap_controller_spec.rb +++ b/spec/requests/bootstrap_controller_spec.rb @@ -93,8 +93,7 @@ RSpec.describe BootstrapController do context "with a plugin asset filter" do let :plugin do - plugin = Plugin::Instance.new - plugin.path = "#{Rails.root}/spec/fixtures/plugins/my_plugin/plugin.rb" + plugin = plugin_from_fixtures("my_plugin") plugin.register_asset_filter do |type, request| next true if request.path == "/mypluginroute" false diff --git a/spec/requests/stylesheets_controller_spec.rb b/spec/requests/stylesheets_controller_spec.rb index 38a03e4706d..ffaf9e8e3cc 100644 --- a/spec/requests/stylesheets_controller_spec.rb +++ b/spec/requests/stylesheets_controller_spec.rb @@ -64,8 +64,7 @@ RSpec.describe StylesheetsController do fab!(:user) { Fabricate(:user) } let(:plugin) do - plugin = Plugin::Instance.new - plugin.path = "#{Rails.root}/spec/fixtures/plugins/my_plugin/plugin.rb" + plugin = plugin_from_fixtures("my_plugin") plugin.register_css "body { padding: 1px 2px 3px 4px; }" plugin end