2023-06-09 03:49:18 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
describe "Composer Form Template Validations", type: :system, js: true do
|
|
|
|
fab!(:user) { Fabricate(:user) }
|
|
|
|
fab!(:form_template) do
|
|
|
|
Fabricate(
|
|
|
|
:form_template,
|
|
|
|
name: "Bug Reports",
|
|
|
|
template:
|
|
|
|
"- type: input
|
|
|
|
attributes:
|
|
|
|
label: What is your full name?
|
|
|
|
placeholder: John Doe
|
|
|
|
validations:
|
|
|
|
required: true
|
|
|
|
type: email
|
|
|
|
min: 10",
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
fab!(:form_template_2) do
|
|
|
|
Fabricate(
|
|
|
|
:form_template,
|
|
|
|
name: "Websites",
|
|
|
|
template:
|
|
|
|
"- type: input
|
|
|
|
attributes:
|
|
|
|
label: What is your website name?
|
|
|
|
placeholder: https://www.example.com
|
|
|
|
validations:
|
|
|
|
pattern: https?://.+",
|
|
|
|
)
|
|
|
|
end
|
|
|
|
fab!(:category_with_template) do
|
|
|
|
Fabricate(
|
|
|
|
:category,
|
|
|
|
name: "Reports",
|
|
|
|
slug: "reports",
|
|
|
|
topic_count: 2,
|
|
|
|
form_template_ids: [form_template.id],
|
|
|
|
)
|
|
|
|
end
|
|
|
|
fab!(:category_with_template_2) do
|
|
|
|
Fabricate(
|
|
|
|
:category,
|
|
|
|
name: "Websites",
|
|
|
|
slug: "websites",
|
|
|
|
topic_count: 2,
|
|
|
|
form_template_ids: [form_template_2.id],
|
|
|
|
)
|
|
|
|
end
|
|
|
|
let(:category_page) { PageObjects::Pages::Category.new }
|
|
|
|
let(:composer) { PageObjects::Components::Composer.new }
|
|
|
|
|
|
|
|
let(:error_types) do
|
|
|
|
{
|
|
|
|
required_error: "Please fill out this field.",
|
|
|
|
type_error: "Please include an '@' in the email address. 'Bruce Wayne' is missing an '@'.",
|
|
|
|
min_error:
|
|
|
|
"Please lengthen this text to 10 characters or more (you are currently using 7 characters).",
|
|
|
|
pattern_error: "Please match the requested format.",
|
|
|
|
}
|
|
|
|
end
|
|
|
|
let(:topic_title) { "A topic about Batman" }
|
|
|
|
|
|
|
|
before do
|
|
|
|
SiteSetting.experimental_form_templates = true
|
|
|
|
sign_in user
|
|
|
|
end
|
|
|
|
|
2023-06-15 02:25:05 +08:00
|
|
|
it "shows an asterisk on the label of the required fields" do
|
|
|
|
category_page.visit(category_with_template)
|
|
|
|
category_page.new_topic_button.click
|
|
|
|
expect(composer).to have_form_template_field_required_indicator("input")
|
|
|
|
end
|
|
|
|
|
2023-06-09 03:49:18 +08:00
|
|
|
it "shows an error when a required input is not filled in" do
|
|
|
|
category_page.visit(category_with_template)
|
|
|
|
category_page.new_topic_button.click
|
|
|
|
composer.fill_title(topic_title)
|
|
|
|
composer.create
|
|
|
|
expect(composer).to have_form_template_field_error(error_types[:required_error])
|
|
|
|
end
|
|
|
|
|
|
|
|
it "shows an error when an input filled doesn't satisfy the type expected" do
|
|
|
|
category_page.visit(category_with_template)
|
|
|
|
category_page.new_topic_button.click
|
|
|
|
composer.fill_title(topic_title)
|
|
|
|
composer.create
|
|
|
|
composer.fill_form_template_field("input", "Bruce Wayne")
|
|
|
|
expect(composer).to have_form_template_field_error(error_types[:type_error])
|
|
|
|
end
|
|
|
|
|
|
|
|
it "shows an error when an input doesn't satisfy the min length expected" do
|
|
|
|
category_page.visit(category_with_template)
|
|
|
|
category_page.new_topic_button.click
|
|
|
|
composer.fill_title(topic_title)
|
|
|
|
composer.create
|
|
|
|
composer.fill_form_template_field("input", "b@b.com")
|
|
|
|
expect(composer).to have_form_template_field_error(error_types[:min_error])
|
|
|
|
end
|
|
|
|
|
|
|
|
it "shows an error when an input doesn't satisfy the requested pattern" do
|
|
|
|
category_page.visit(category_with_template_2)
|
|
|
|
category_page.new_topic_button.click
|
|
|
|
composer.fill_title(topic_title)
|
|
|
|
composer.fill_form_template_field("input", "www.example.com")
|
|
|
|
composer.create
|
|
|
|
expect(composer).to have_form_template_field_error(error_types[:pattern_error])
|
|
|
|
end
|
|
|
|
end
|