2019-04-30 08:27:42 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2022-07-28 10:27:38 +08:00
|
|
|
RSpec.describe UploadValidator do
|
2018-04-19 19:30:31 +08:00
|
|
|
subject(:validator) { described_class.new }
|
|
|
|
|
|
|
|
describe "validate" do
|
2023-11-10 06:47:59 +08:00
|
|
|
fab!(:user)
|
2018-04-19 19:30:31 +08:00
|
|
|
let(:filename) { "discourse.csv" }
|
|
|
|
let(:csv_file) { file_from_fixtures(filename, "csv") }
|
|
|
|
|
|
|
|
it "should create an invalid upload when the filename is blank" do
|
|
|
|
SiteSetting.authorized_extensions = "*"
|
|
|
|
created_upload = UploadCreator.new(csv_file, nil).create_for(user.id)
|
|
|
|
validator.validate(created_upload)
|
|
|
|
expect(created_upload).to_not be_valid
|
2018-04-20 03:09:12 +08:00
|
|
|
expect(created_upload.errors.full_messages.first).to include(
|
|
|
|
I18n.t("activerecord.errors.messages.blank"),
|
|
|
|
)
|
2018-04-19 19:30:31 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows 'gz' as extension when uploading export file" do
|
|
|
|
SiteSetting.authorized_extensions = ""
|
|
|
|
|
2019-07-18 20:34:48 +08:00
|
|
|
expect(
|
|
|
|
UploadCreator.new(csv_file, "#{filename}.zip", for_export: true).create_for(user.id),
|
|
|
|
).to be_valid
|
2018-04-19 19:30:31 +08:00
|
|
|
end
|
|
|
|
|
2018-07-31 13:45:31 +08:00
|
|
|
it "allows uses max_export_file_size_kb when uploading export file" do
|
|
|
|
SiteSetting.max_attachment_size_kb = "0"
|
2019-07-18 20:34:48 +08:00
|
|
|
SiteSetting.authorized_extensions = "zip"
|
2018-07-31 13:45:31 +08:00
|
|
|
|
2019-07-18 20:34:48 +08:00
|
|
|
expect(
|
|
|
|
UploadCreator.new(csv_file, "#{filename}.zip", for_export: true).create_for(user.id),
|
|
|
|
).to be_valid
|
2018-07-31 13:45:31 +08:00
|
|
|
end
|
2018-11-12 14:11:32 +08:00
|
|
|
|
FEATURE: Humanize file size error messages (#14398)
The file size error messages for max_image_size_kb and
max_attachment_size_kb are shown to the user in the KB
format, regardless of how large the limit is. Since we
are going to support uploading much larger files soon,
this KB-based limit soon becomes unfriendly to the end
user.
For example, if the max attachment size is set to 512000
KB, this is what the user sees:
> Sorry, the file you are trying to upload is too big (maximum
size is 512000KB)
This makes the user do math. In almost all file explorers that
a regular user would be familiar width, the file size is shown
in a format based on the maximum increment (e.g. KB, MB, GB).
This commit changes the behaviour to output a humanized file size
instead of the raw KB. For the above example, it would now say:
> Sorry, the file you are trying to upload is too big (maximum
size is 512 MB)
This humanization also handles decimals, e.g. 1536KB = 1.5 MB
2021-09-22 05:59:45 +08:00
|
|
|
describe "size validation" do
|
|
|
|
it "does not allow images that are too large" do
|
|
|
|
SiteSetting.max_image_size_kb = 1536
|
|
|
|
upload =
|
|
|
|
Fabricate.build(
|
|
|
|
:upload,
|
|
|
|
user: Fabricate(:admin),
|
|
|
|
original_filename: "test.png",
|
|
|
|
filesize: 2_097_152,
|
|
|
|
)
|
2023-06-21 22:00:19 +08:00
|
|
|
validator.validate(upload)
|
FEATURE: Humanize file size error messages (#14398)
The file size error messages for max_image_size_kb and
max_attachment_size_kb are shown to the user in the KB
format, regardless of how large the limit is. Since we
are going to support uploading much larger files soon,
this KB-based limit soon becomes unfriendly to the end
user.
For example, if the max attachment size is set to 512000
KB, this is what the user sees:
> Sorry, the file you are trying to upload is too big (maximum
size is 512000KB)
This makes the user do math. In almost all file explorers that
a regular user would be familiar width, the file size is shown
in a format based on the maximum increment (e.g. KB, MB, GB).
This commit changes the behaviour to output a humanized file size
instead of the raw KB. For the above example, it would now say:
> Sorry, the file you are trying to upload is too big (maximum
size is 512 MB)
This humanization also handles decimals, e.g. 1536KB = 1.5 MB
2021-09-22 05:59:45 +08:00
|
|
|
expect(upload.errors.full_messages.first).to eq(
|
|
|
|
"Filesize #{I18n.t("upload.images.too_large_humanized", max_size: "1.5 MB")}",
|
|
|
|
)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-11-12 14:11:32 +08:00
|
|
|
describe "when allow_staff_to_upload_any_file_in_pm is true" do
|
|
|
|
it "should allow uploads for pm" do
|
|
|
|
upload =
|
|
|
|
Fabricate.build(
|
|
|
|
:upload,
|
|
|
|
user: Fabricate(:admin),
|
|
|
|
original_filename: "test.ico",
|
|
|
|
for_private_message: true,
|
|
|
|
)
|
|
|
|
|
2023-06-21 22:00:19 +08:00
|
|
|
expect(validator.validate(upload)).to eq(true)
|
2018-11-12 14:11:32 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
describe "for a normal user" do
|
|
|
|
it "should not allow uploads for pm" do
|
|
|
|
upload =
|
|
|
|
Fabricate.build(
|
|
|
|
:upload,
|
|
|
|
user: Fabricate(:user),
|
|
|
|
original_filename: "test.ico",
|
|
|
|
for_private_message: true,
|
|
|
|
)
|
|
|
|
|
2023-06-21 22:00:19 +08:00
|
|
|
expect(validator.validate(upload)).to eq(nil)
|
2018-11-12 14:11:32 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2018-11-14 15:03:02 +08:00
|
|
|
|
|
|
|
describe "upload for site settings" do
|
2019-05-07 11:12:20 +08:00
|
|
|
fab!(:user) { Fabricate(:admin) }
|
2018-11-14 15:03:02 +08:00
|
|
|
|
|
|
|
let(:upload) do
|
|
|
|
Fabricate.build(:upload, user: user, original_filename: "test.ico", for_site_setting: true)
|
|
|
|
end
|
|
|
|
|
|
|
|
before { SiteSetting.authorized_extensions = "png" }
|
|
|
|
|
|
|
|
describe "for admin user" do
|
|
|
|
it "should allow the upload" do
|
2023-06-21 22:00:19 +08:00
|
|
|
expect(validator.validate(upload)).to eq(true)
|
2018-11-14 15:03:02 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
describe "when filename is invalid" do
|
|
|
|
it "should not allow the upload" do
|
|
|
|
upload.original_filename = "test.txt"
|
2023-06-21 22:00:19 +08:00
|
|
|
expect(validator.validate(upload)).to eq(nil)
|
2018-11-14 15:03:02 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "for normal user" do
|
2023-11-10 06:47:59 +08:00
|
|
|
fab!(:user)
|
2018-11-14 15:03:02 +08:00
|
|
|
|
|
|
|
it "should not allow the upload" do
|
2023-06-21 22:00:19 +08:00
|
|
|
expect(validator.validate(upload)).to eq(nil)
|
2018-11-14 15:03:02 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2018-04-19 19:30:31 +08:00
|
|
|
end
|
|
|
|
end
|