From 9d6a9bba96c32cd65d38ebc327a9e638f8ac4073 Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Thu, 12 Dec 2019 16:54:03 +1100 Subject: [PATCH] DEV: correct flaky test This is a slight workaround which helps somewhat now but is pending a larger fix. When this spec ran in parallel mode uploads could start cross talking and an upload you expect to be there may vanish. This works around the issue by making the upload unique every time it is created It also folds up an expensive test into the main one. --- .../theme_store/zip_exporter_spec.rb | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/spec/components/theme_store/zip_exporter_spec.rb b/spec/components/theme_store/zip_exporter_spec.rb index 922ae3081d7..e8c460709b9 100644 --- a/spec/components/theme_store/zip_exporter_spec.rb +++ b/spec/components/theme_store/zip_exporter_spec.rb @@ -4,17 +4,20 @@ require 'rails_helper' require 'theme_store/zip_exporter' describe ThemeStore::ZipExporter do + let(:rand_hex) do + +"X" << SecureRandom.hex + end let!(:theme) do Fabricate(:theme, name: "Header Icons").tap do |theme| theme.set_field(target: :common, name: :body_tag, value: "testtheme1") - theme.set_field(target: :settings, name: :yaml, value: "somesetting: test") + theme.set_field(target: :settings, name: :yaml, value: "somesetting: #{rand_hex}") theme.set_field(target: :mobile, name: :scss, value: 'body {background-color: $background_color; font-size: $font-size}') theme.set_field(target: :translations, name: :en, value: { en: { key: "value" } }.deep_stringify_keys.to_yaml) image = file_from_fixtures("logo.png") upload = UploadCreator.new(image, "logo.png").create_for(Discourse::SYSTEM_USER_ID) theme.set_field(target: :common, name: :logo, upload_id: upload.id, type: :theme_upload_var) image = file_from_fixtures("logo.png") - other_upload = UploadCreator.new(image, "logo.png").create_for(Discourse::SYSTEM_USER_ID) + _other_upload = UploadCreator.new(image, "logo.png").create_for(Discourse::SYSTEM_USER_ID) theme.set_field(target: :common, name: "other_logo", upload_id: upload.id, type: :theme_upload_var) theme.build_remote_theme(remote_url: "", about_url: "abouturl", license_url: "licenseurl", authors: "David Taylor", theme_version: "1.0", minimum_discourse_version: "1.0.0", @@ -61,7 +64,6 @@ describe ThemeStore::ZipExporter do it "exports the theme correctly" do package file = 'discourse-header-icons.zip' - dest = 'discourse-header-icons' Dir.chdir(dir) do available_size = SiteSetting.decompressed_theme_max_file_size_mb Compression::Zip.new.decompress(dir, file, available_size, allow_non_root_folder: true) @@ -103,8 +105,14 @@ describe ThemeStore::ZipExporter do expect(File.read("common/body_tag.html")).to eq("testtheme1") expect(File.read("mobile/mobile.scss")).to eq("body {background-color: $background_color; font-size: $font-size}") - expect(File.read("settings.yml")).to eq("somesetting: test") + expect(File.read("settings.yml")).to eq("somesetting: #{rand_hex}") expect(File.read("locales/en.yml")).to eq({ en: { key: "value" } }.deep_stringify_keys.to_yaml) + + theme.update!(name: "Discourse Header Icons") + exporter = ThemeStore::ZipExporter.new(theme) + filename = exporter.package_filename + exporter.cleanup! + expect(filename).to end_with "/discourse-header-icons.zip" end end @@ -119,12 +127,4 @@ describe ThemeStore::ZipExporter do end.to raise_error(RuntimeError) end - it "doesn't prepend 'discourse' to filename if already there" do - theme.update!(name: "Discourse Header Icons") - exporter = ThemeStore::ZipExporter.new(theme) - filename = exporter.package_filename - exporter.cleanup! - expect(filename).to end_with "/discourse-header-icons.zip" - end - end