79 行
2.6 KiB
Ruby
79 行
2.6 KiB
Ruby
require 'rails_helper'
|
|
require 'base64'
|
|
|
|
RSpec.describe PostCreator do
|
|
let(:actor) { create(:user, :member) }
|
|
|
|
def real_thumbnail_upload
|
|
gif = Base64.decode64('R0lGODdhAQABAIABAP///wAAACwAAAAAAQABAAACAkQBADs=')
|
|
|
|
Rack::Test::UploadedFile.new(
|
|
StringIO.new(gif),
|
|
'image/gif',
|
|
original_filename: 'thumbnail.gif')
|
|
end
|
|
|
|
before do
|
|
allow(Tag).to receive(:normalise_tags!).and_return({ tags: [], sections: {} })
|
|
allow(TagVersioning).to receive(:record_tag_snapshots!)
|
|
allow(Tag).to receive(:expand_parent_tags).and_return([])
|
|
allow(PostVersionRecorder).to receive(:record!)
|
|
end
|
|
|
|
it 'prefers thumbnail_base over an explicit upload' do
|
|
expect(Post).not_to receive(:resized_thumbnail_attachment)
|
|
allow(Post).to receive(:remote_thumbnail_attachment).and_return(
|
|
io: StringIO.new('remote'),
|
|
filename: 'resized_thumbnail.jpg',
|
|
content_type: 'image/jpeg')
|
|
|
|
post = described_class.new(
|
|
actor:,
|
|
attributes: {
|
|
title: 'title',
|
|
url: 'https://example.com/post',
|
|
thumbnail: real_thumbnail_upload,
|
|
thumbnail_base: 'https://example.com/thumb.jpg',
|
|
tags: '' }).create!
|
|
|
|
expect(post.thumbnail).to be_attached
|
|
expect(post.thumbnail_base).to eq('https://example.com/thumb.jpg')
|
|
end
|
|
|
|
it 'uses the common remote thumbnail attach path when thumbnail_base is given' do
|
|
expect(Post).to receive(:remote_thumbnail_attachment)
|
|
.with('https://example.com/thumb.jpg')
|
|
.and_return(
|
|
io: StringIO.new('thumbnail'),
|
|
filename: 'thumbnail.jpg',
|
|
content_type: 'image/jpeg')
|
|
|
|
post = described_class.new(
|
|
actor:,
|
|
attributes: {
|
|
title: 'title',
|
|
url: 'https://example.com/post',
|
|
thumbnail_base: 'https://example.com/thumb.jpg',
|
|
tags: '' }).create!
|
|
|
|
expect(post.thumbnail_base).to eq('https://example.com/thumb.jpg')
|
|
expect(post.thumbnail).to be_attached
|
|
end
|
|
|
|
it 'does not create a post when remote thumbnail fetch fails' do
|
|
allow(Post).to receive(:remote_thumbnail_attachment)
|
|
.and_raise(Post::RemoteThumbnailFetchFailed, 'サムネール画像を取得できませんでした.')
|
|
creator = described_class.new(
|
|
actor:,
|
|
attributes: {
|
|
title: 'title',
|
|
url: 'https://example.com/post',
|
|
thumbnail_base: 'https://example.com/thumb.jpg',
|
|
tags: '' })
|
|
|
|
post_count = Post.count
|
|
expect { creator.create! }.to raise_error(Post::RemoteThumbnailFetchFailed)
|
|
expect(Post.count).to eq(post_count)
|
|
end
|
|
end
|