mirror of
https://github.com/discourse/discourse.git
synced 2025-06-06 03:06:53 +08:00
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:
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user