discourse/spec/serializers/reviewable_queued_post_serializer_spec.rb
Daniel Waterworth 6e161d3e75
DEV: Allow fab! without block (#24314)
The most common thing that we do with fab! is:

    fab!(:thing) { Fabricate(:thing) }

This commit adds a shorthand for this which is just simply:

    fab!(:thing)

i.e. If you omit the block, then, by default, you'll get a `Fabricate`d object using the fabricator of the same name.
2023-11-09 16:47:59 -06:00

78 lines
2.4 KiB
Ruby

# frozen_string_literal: true
RSpec.describe ReviewableQueuedPostSerializer do
fab!(:admin)
describe "new topic" do
fab!(:reviewable) { Fabricate(:reviewable_queued_post_topic) }
it "allows us to edit category / title" do
json =
ReviewableQueuedPostSerializer.new(
reviewable,
scope: Guardian.new(admin),
root: nil,
).as_json
payload = json[:payload]
expect(payload["raw"]).to eq("hello world post contents.")
expect(payload["title"]).to eq("queued post title")
expect(payload["tags"]).to eq(%w[cool neat])
expect(json[:topic_id]).to be_blank
expect(json[:can_edit]).to eq(true)
fields = json[:editable_fields]
expect(fields).to be_present
category_field = fields.find { |f| f[:id] == "category_id" }
expect(category_field).to be_present
expect(category_field[:type]).to eq(:category)
title_field = fields.find { |f| f[:id] == "payload.title" }
expect(title_field).to be_present
expect(title_field[:type]).to eq(:text)
raw_field = fields.find { |f| f[:id] == "payload.raw" }
expect(raw_field).to be_present
expect(raw_field[:type]).to eq(:editor)
tags_field = fields.find { |f| f[:id] == "payload.tags" }
expect(tags_field).to be_present
expect(tags_field[:type]).to eq(:tags)
end
end
describe "reply to an existing topic" do
fab!(:reviewable) { Fabricate(:reviewable_queued_post) }
it "includes correct user fields" do
json =
ReviewableQueuedPostSerializer.new(
reviewable,
scope: Guardian.new(admin),
root: nil,
).as_json
payload = json[:payload]
expect(payload["raw"]).to eq("hello world post contents.")
expect(payload["title"]).to be_blank
expect(payload["via_email"]).to eq(true)
expect(payload["raw_email"]).to eq("store_me")
expect(json[:topic_id]).to eq(reviewable.topic_id)
expect(json[:topic_url]).to eq(reviewable.topic.url)
expect(json[:can_edit]).to eq(true)
fields = json[:editable_fields]
expect(fields).to be_present
expect(fields.any? { |f| f[:id] == "payload.title" }).to eq(false)
expect(fields.any? { |f| f[:id] == "category_id" }).to eq(false)
raw_field = fields.find { |f| f[:id] == "payload.raw" }
expect(raw_field).to be_present
expect(raw_field[:type]).to eq(:editor)
end
end
end