FEATURE: admin/user exports are compressed using the zip format (#7784)

* FEATURE: admin/user exports are compressed using the zip format

* Update translations. Theme exporter now exports .zip file. Theme importer supports .zip and .gz files

* Fix controller test, updated locale and skip saving the csv export to disk
This commit is contained in:
Roman Rizzi
2019-07-10 11:13:03 -03:00
committed by GitHub
parent f0fea5991f
commit 8b2580e20f
14 changed files with 89 additions and 30 deletions

View File

@ -2,6 +2,7 @@
require 'rails_helper'
require 'theme_store/tgz_exporter'
require 'zip'
describe ThemeStore::TgzExporter do
let!(:theme) do
@ -55,13 +56,19 @@ describe ThemeStore::TgzExporter do
filename = exporter.package_filename
FileUtils.cp(filename, dir)
exporter.cleanup!
"#{dir}/discourse-header-icons.tar.gz"
"#{dir}/discourse-header-icons.tar.zip"
end
it "exports the theme correctly" do
package
file = 'discourse-header-icons.tar.zip'
dest = 'discourse-header-icons.tar'
Dir.chdir("#{dir}") do
`tar -xzf discourse-header-icons.tar.gz`
Zip::File.open(file) do |zip_file|
zip_file.each { |entry| entry.extract(dest) }
end
`tar -xvf discourse-header-icons.tar 2> /dev/null`
end
Dir.chdir("#{dir}/discourse-header-icons") do
folders = Dir.glob("**/*").reject { |f| File.file?(f) }
@ -121,7 +128,7 @@ describe ThemeStore::TgzExporter do
exporter = ThemeStore::TgzExporter.new(theme)
filename = exporter.package_filename
exporter.cleanup!
expect(filename).to end_with "/discourse-header-icons.tar.gz"
expect(filename).to end_with "/discourse-header-icons.tar.zip"
end
end

View File

@ -4,26 +4,46 @@
require 'rails_helper'
require 'theme_store/tgz_importer'
require 'zip'
describe ThemeStore::TgzImporter do
before do
@temp_folder = "#{Pathname.new(Dir.tmpdir).realpath}/discourse_theme_#{SecureRandom.hex}"
FileUtils.mkdir(@temp_folder)
Dir.chdir(@temp_folder) do
FileUtils.mkdir('test/')
File.write("test/hello.txt", "hello world")
FileUtils.mkdir('test/a')
File.write("test/a/inner", "hello world inner")
end
end
after do
FileUtils.rm_rf @temp_folder
end
it "can import a simple theme" do
FileUtils.mkdir(@temp_folder)
it "can import a simple zipped theme" do
Dir.chdir(@temp_folder) do
FileUtils.mkdir('test/')
File.write("test/hello.txt", "hello world")
FileUtils.mkdir('test/a')
File.write("test/a/inner", "hello world inner")
`tar -cvf test.tar test/* 2> /dev/null`
Zip::File.open('test.tar.zip', Zip::File::CREATE) do |zipfile|
zipfile.add('test.tar', "#{@temp_folder}/test.tar")
zipfile.close
end
end
importer = ThemeStore::TgzImporter.new("#{@temp_folder}/test.tar.zip")
importer.import!
expect(importer["hello.txt"]).to eq("hello world")
expect(importer["a/inner"]).to eq("hello world inner")
importer.cleanup!
end
it "can import a simple gzipped theme" do
Dir.chdir(@temp_folder) do
`tar -cvzf test.tar.gz test/* 2> /dev/null`
end

View File

@ -22,14 +22,14 @@ describe Validators::UploadValidator do
it "allows 'gz' as extension when uploading export file" do
SiteSetting.authorized_extensions = ""
expect(UploadCreator.new(csv_file, "#{filename}.gz", for_export: true).create_for(user.id)).to be_valid
expect(UploadCreator.new(csv_file, "#{filename}.zip", for_export: true).create_for(user.id)).to be_valid
end
it "allows uses max_export_file_size_kb when uploading export file" do
SiteSetting.max_attachment_size_kb = "0"
SiteSetting.authorized_extensions = "gz"
SiteSetting.authorized_extensions = "zip"
expect(UploadCreator.new(csv_file, "#{filename}.gz", for_export: true).create_for(user.id)).to be_valid
expect(UploadCreator.new(csv_file, "#{filename}.zip", for_export: true).create_for(user.id)).to be_valid
end
describe 'when allow_staff_to_upload_any_file_in_pm is true' do