discourse/spec/fabricators/post_fabricator.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

187 lines
6.2 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2013-02-05 14:16:51 -05:00
Fabricator(:post) do
user
topic { |attrs| Fabricate(:topic, user: attrs[:user]) }
2013-02-25 11:42:20 -05:00
raw "Hello world"
post_type Post.types[:regular]
# Fabrication bypasses PostCreator, for performance reasons, where the counts are updated so we have to handle this manually here.
after_create { |post, _transients| UserStatCountUpdater.increment!(post) }
2013-02-05 14:16:51 -05:00
end
Fabricator(:post_with_long_raw_content, from: :post) do
raw "This is a sample post with semi-long raw content. The raw content is also more than
two hundred characters to satisfy any test conditions that require content longer
than the typical test post raw content. It really is some long content, folks."
end
2013-02-05 14:16:51 -05:00
Fabricator(:post_with_youtube, from: :post) do
raw "http://www.youtube.com/watch?v=9bZkp7q19f0"
cooked '<p><a href="http://www.youtube.com/watch?v=9bZkp7q19f0" class="onebox" target="_blank">http://www.youtube.com/watch?v=9bZkp7q19f0</a></p>'
2013-02-05 14:16:51 -05:00
end
Fabricator(:old_post, from: :post) do
topic { |attrs| Fabricate(:topic, user: attrs[:user], created_at: (DateTime.now - 100)) }
created_at { 100.days.ago }
2013-02-05 14:16:51 -05:00
end
Fabricator(:moderator_post, from: :post) do
user
topic { |attrs| Fabricate(:topic, user: attrs[:user]) }
2013-03-18 16:03:46 -04:00
post_type Post.types[:moderator_action]
2013-02-25 11:42:20 -05:00
raw "Hello world"
2013-02-05 14:16:51 -05:00
end
Fabricator(:basic_reply, from: :post) do
user(fabricator: :coding_horror)
2013-02-05 14:16:51 -05:00
reply_to_post_number 1
topic
raw "this reply has no quotes"
end
Fabricator(:reply, from: :post) do
user(fabricator: :coding_horror)
2013-02-05 14:16:51 -05:00
topic
raw '
[quote="Evil Trout, post:1"]hello[/quote]
Hmmm!
'
end
2015-08-05 06:57:31 -04:00
Fabricator(:post_with_plenty_of_images, from: :post) { cooked <<~HTML }
<aside class="quote"><img src="/#{Discourse.store.upload_path}/original/1X/1234567890123456.jpg"></aside>
<div class="onebox-result"><img src="/#{Discourse.store.upload_path}/original/1X/1234567890123456.jpg"></div>
<div class="onebox"><img src="/#{Discourse.store.upload_path}/original/1X/1234567890123456.jpg"></div>
<p>With an emoji! <img src="//cdn.discourse.org/meta/images/emoji/twitter/smile.png?v=#{Emoji::EMOJI_VERSION}" title=":smile:" class="emoji" alt="smile" loading="lazy" width="20" height="20"></p>
2018-08-16 07:45:30 -04:00
HTML
2013-07-07 19:39:08 -04:00
Fabricator(:post_with_uploaded_image, from: :post) do
FEATURE: Include optimized thumbnails for topics (#9215) This introduces new APIs for obtaining optimized thumbnails for topics. There are a few building blocks required for this: - Introduces new `image_upload_id` columns on the `posts` and `topics` table. This replaces the old `image_url` column, which means that thumbnails are now restricted to uploads. Hotlinked thumbnails are no longer possible. In normal use (with pull_hotlinked_images enabled), this has no noticeable impact - A migration attempts to match existing urls to upload records. If a match cannot be found then the posts will be queued for rebake - Optimized thumbnails are generated during post_process_cooked. If thumbnails are missing when serializing a topic list, then a sidekiq job is queued - Topic lists and topics now include a `thumbnails` key, which includes all the available images: ``` "thumbnails": [ { "max_width": null, "max_height": null, "url": "//example.com/original-image.png", "width": 1380, "height": 1840 }, { "max_width": 1024, "max_height": 1024, "url": "//example.com/optimized-image.png", "width": 768, "height": 1024 } ] ``` - Themes can request additional thumbnail sizes by using a modifier in their `about.json` file: ``` "modifiers": { "topic_thumbnail_sizes": [ [200, 200], [800, 800] ], ... ``` Remember that these are generated asynchronously, so your theme should include logic to fallback to other available thumbnails if your requested size has not yet been generated - Two new raw plugin outlets are introduced, to improve the customisability of the topic list. `topic-list-before-columns` and `topic-list-before-link`
2020-05-05 04:07:50 -04:00
raw { "<img src=\"#{Fabricate(:image_upload)}\" width=\"1500\" height=\"2000\">" }
2013-07-07 19:39:08 -04:00
end
2013-07-10 16:59:07 -04:00
Fabricator(:post_with_an_attachment, from: :post) do
raw "<a class=\"attachment\" href=\"/#{Discourse.store.upload_path}/origina/1X/66b3ed1503efc936.zip\">archive.zip</a>"
2013-07-10 16:59:07 -04:00
end
2013-07-07 19:39:08 -04:00
Fabricator(:post_with_unsized_images, from: :post) do
raw "
<img src=\"http://foo.bar/image.png\">
<img src=\"/#{Discourse.store.upload_path}/original/1X/1234567890123456.jpg\">
"
2013-07-07 19:39:08 -04:00
end
2013-11-25 12:36:13 -05:00
Fabricator(:post_with_image_urls, from: :post) do
raw '
2013-11-25 12:36:13 -05:00
<img src="http://foo.bar/image.png">
<img src="http://domain.com/picture.jpg" width="50" height="42">
'
2013-07-07 19:39:08 -04:00
end
Fabricator(:post_with_large_image, from: :post) do
raw "<img src=\"/#{Discourse.store.upload_path}/original/1X/1234567890123456.jpg\">"
2013-07-07 19:39:08 -04:00
end
Fabricator(:post_with_large_image_and_title, from: :post) do
raw "<img src=\"/#{Discourse.store.upload_path}/original/1X/1234567890123456.jpg\" title=\"WAT\">"
end
Fabricator(:post_with_large_image_on_subfolder, from: :post) do
raw "<img src=\"/subfolder/#{Discourse.store.upload_path}/original/1X/1234567890123456.jpg\">"
end
2013-11-05 13:04:47 -05:00
Fabricator(:post_with_uploads, from: :post) do
raw "
<a href=\"/#{Discourse.store.upload_path}/original/2X/2345678901234567.jpg\">Link</a>
<img src=\"/#{Discourse.store.upload_path}/original/1X/1234567890123456.jpg\">
"
2013-11-05 13:04:47 -05:00
end
Fabricator(:post_with_uploads_and_links, from: :post) { raw <<~MD }
<a href="/#{Discourse.store.upload_path}/original/2X/2345678901234567.jpg">Link</a>
<img src="/#{Discourse.store.upload_path}/original/1X/1234567890123456.jpg">
<a href="http://www.google.com">Google</a>
<img src="http://foo.bar/image.png">
<a class="attachment" href="/#{Discourse.store.upload_path}/original/1X/af2c2618032c679333bebf745e75f9088748d737.txt">text.txt</a> (20 Bytes)
:smile:
MD
2013-11-05 13:04:47 -05:00
2013-02-05 14:16:51 -05:00
Fabricator(:post_with_external_links, from: :post) do
user
topic
raw <<~MD
Here's a link to twitter: http://twitter.com
And a link to google: http://google.com
And a secure link to google: https://google.com
And a markdown link: [forumwarz](http://forumwarz.com)
And a markdown link with a period after it [codinghorror](http://www.codinghorror.com/blog).
And one with a hash http://discourse.org#faq
And one with a two hash http://discourse.org#a#b
MD
2013-02-05 14:16:51 -05:00
end
Fabricator(:private_message_post, from: :post) do
transient :recipient
user
topic do |attrs|
Fabricate(
:private_message_topic,
user: attrs[:user],
created_at: attrs[:created_at],
subtype: TopicSubtype.user_to_user,
topic_allowed_users: [
Fabricate.build(:topic_allowed_user, user: attrs[:user]),
Fabricate.build(:topic_allowed_user, user: attrs[:recipient] || Fabricate(:user)),
],
)
end
raw "Ssshh! This is our secret conversation!"
end
Fabricator(:group_private_message_post, from: :post) do
transient :recipients
user
topic do |attrs|
Fabricate(
:private_message_topic,
user: attrs[:user],
created_at: attrs[:created_at],
subtype: TopicSubtype.user_to_user,
topic_allowed_users: [Fabricate.build(:topic_allowed_user, user: attrs[:user])],
topic_allowed_groups: [
Fabricate.build(:topic_allowed_group, group: attrs[:recipients] || Fabricate(:group)),
],
)
end
raw "Ssshh! This is our group secret conversation!"
end
Fabricator(:private_message_post_one_user, from: :post) do
user
topic do |attrs|
Fabricate(
:private_message_topic,
user: attrs[:user],
created_at: attrs[:created_at],
subtype: TopicSubtype.user_to_user,
topic_allowed_users: [Fabricate.build(:topic_allowed_user, user: attrs[:user])],
)
end
raw "Ssshh! This is our secret conversation!"
end
Fabricator(:post_via_email, from: :post) do
incoming_email
via_email true
after_create do |post|
incoming_email.topic = post.topic
incoming_email.post = post
incoming_email.user = post.user
end
end
Fabricator(:whisper, from: :post) { post_type Post.types[:whisper] }
Fabricator(:small_action, from: :post) { post_type Post.types[:small_action] }