mirror of
https://github.com/discourse/discourse.git
synced 2024-12-04 22:43:43 +08:00
e7a4742490
Uppy adds the file name as the "name" parameter in the payload by default, which means that for things like the emoji uploader which have a name param used by the controller, that param will be passed as the file name. We already use the existing file name if the name param is null, so this commit just does further cleanup of the name param, removing the extension if it is a filename so we don't end up with emoji names like blah_png.
143 lines
4.1 KiB
Ruby
143 lines
4.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe Admin::EmojisController do
|
|
fab!(:admin) { Fabricate(:admin) }
|
|
fab!(:upload) { Fabricate(:upload) }
|
|
|
|
before do
|
|
sign_in(admin)
|
|
end
|
|
|
|
describe '#index' do
|
|
it "returns a list of custom emojis" do
|
|
CustomEmoji.create!(name: 'osama-test-emoji', upload: upload)
|
|
Emoji.clear_cache
|
|
|
|
get "/admin/customize/emojis.json"
|
|
expect(response.status).to eq(200)
|
|
|
|
json = response.parsed_body
|
|
expect(json[0]["name"]).to eq("osama-test-emoji")
|
|
expect(json[0]["url"]).to eq(upload.url)
|
|
end
|
|
end
|
|
|
|
describe "#create" do
|
|
describe 'when upload is invalid' do
|
|
it 'should publish the right error' do
|
|
|
|
post "/admin/customize/emojis.json", params: {
|
|
name: 'test',
|
|
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/fake.jpg")
|
|
}
|
|
|
|
expect(response.status).to eq(422)
|
|
parsed = response.parsed_body
|
|
expect(parsed["errors"]).to eq([I18n.t('upload.images.size_not_found')])
|
|
end
|
|
end
|
|
|
|
describe 'when emoji name already exists' do
|
|
it 'should publish the right error' do
|
|
CustomEmoji.create!(name: 'test', upload: upload)
|
|
|
|
post "/admin/customize/emojis.json", params: {
|
|
name: 'test',
|
|
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/logo.png")
|
|
}
|
|
|
|
expect(response.status).to eq(422)
|
|
parsed = response.parsed_body
|
|
expect(parsed["errors"]).to eq([
|
|
"Name #{I18n.t('activerecord.errors.models.custom_emoji.attributes.name.taken')}"
|
|
])
|
|
end
|
|
end
|
|
|
|
it 'should allow an admin to add a custom emoji' do
|
|
Emoji.expects(:clear_cache)
|
|
|
|
post "/admin/customize/emojis.json", params: {
|
|
name: 'test',
|
|
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/logo.png")
|
|
}
|
|
|
|
custom_emoji = CustomEmoji.last
|
|
upload = custom_emoji.upload
|
|
|
|
expect(upload.original_filename).to eq('logo.png')
|
|
|
|
data = response.parsed_body
|
|
expect(response.status).to eq(200)
|
|
expect(data["errors"]).to eq(nil)
|
|
expect(data["name"]).to eq(custom_emoji.name)
|
|
expect(data["url"]).to eq(upload.url)
|
|
expect(custom_emoji.group).to eq(nil)
|
|
end
|
|
|
|
it 'should allow an admin to add a custom emoji with a custom group' do
|
|
Emoji.expects(:clear_cache)
|
|
|
|
post "/admin/customize/emojis.json", params: {
|
|
name: 'test',
|
|
group: 'Foo',
|
|
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/logo.png")
|
|
}
|
|
|
|
custom_emoji = CustomEmoji.last
|
|
|
|
data = response.parsed_body
|
|
expect(response.status).to eq(200)
|
|
expect(custom_emoji.group).to eq("foo")
|
|
end
|
|
|
|
it 'should fix up the emoji name' do
|
|
Emoji.expects(:clear_cache).times(3)
|
|
|
|
post "/admin/customize/emojis.json", params: {
|
|
name: 'test.png',
|
|
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/logo.png")
|
|
}
|
|
|
|
custom_emoji = CustomEmoji.last
|
|
upload = custom_emoji.upload
|
|
|
|
expect(upload.original_filename).to eq('logo.png')
|
|
expect(custom_emoji.name).to eq("test")
|
|
expect(response.status).to eq(200)
|
|
|
|
post "/admin/customize/emojis.json", params: {
|
|
name: 'st&#* onk$',
|
|
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/logo.png")
|
|
}
|
|
|
|
custom_emoji = CustomEmoji.last
|
|
expect(custom_emoji.name).to eq("st_onk_")
|
|
expect(response.status).to eq(200)
|
|
|
|
post "/admin/customize/emojis.json", params: {
|
|
name: 'PaRTYpaRrot',
|
|
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/logo.png")
|
|
}
|
|
|
|
custom_emoji = CustomEmoji.last
|
|
expect(custom_emoji.name).to eq("partyparrot")
|
|
expect(response.status).to eq(200)
|
|
end
|
|
end
|
|
|
|
describe '#destroy' do
|
|
it 'should allow an admin to delete a custom emoji' do
|
|
custom_emoji = CustomEmoji.create!(name: 'test', upload: upload)
|
|
Emoji.clear_cache
|
|
|
|
expect do
|
|
delete "/admin/customize/emojis/#{custom_emoji.name}.json",
|
|
params: { name: 'test' }
|
|
end.to change { CustomEmoji.count }.by(-1)
|
|
end
|
|
end
|
|
end
|