mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FIX: correctly show validation errors in automation (#27622)
A previous refactor has prevented errors to show correctly. The guilt of the issue is that we were not calling the error variable correctly in the templates. This commit also adds a spec for this case, and removes the need for `I18n.backend.store_translations` in specs so we don't have to write too much boilerplate each time we write a spec.
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<section class="discourse-automation-form edit">
|
<section class="discourse-automation-form edit">
|
||||||
<form class="form-horizontal">
|
<form class="form-horizontal">
|
||||||
<FormError @error={{error}} />
|
<FormError @error={{this.error}} />
|
||||||
|
|
||||||
<section class="form-section edit">
|
<section class="form-section edit">
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{{#if error}}
|
{{#if @error}}
|
||||||
<div class="alert alert-error form-errors">
|
<div class="alert alert-error form-errors">
|
||||||
{{html-safe error}}
|
{{html-safe @error}}
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
@@ -8,11 +8,18 @@ module DiscourseAutomation
|
|||||||
scriptables =
|
scriptables =
|
||||||
DiscourseAutomation::Scriptable.all.map do |s|
|
DiscourseAutomation::Scriptable.all.map do |s|
|
||||||
id = s.to_s.gsub(/^__scriptable_/, "")
|
id = s.to_s.gsub(/^__scriptable_/, "")
|
||||||
|
description_key = "discourse_automation.scriptables.#{id}.description"
|
||||||
|
doc_key = "discourse_automation.scriptables.#{id}.doc"
|
||||||
|
|
||||||
{
|
{
|
||||||
id: id,
|
id: id,
|
||||||
name: I18n.t("discourse_automation.scriptables.#{id}.title"),
|
name:
|
||||||
description: I18n.t("discourse_automation.scriptables.#{id}.description", default: ""),
|
I18n.t(
|
||||||
doc: I18n.t("discourse_automation.scriptables.#{id}.doc", default: ""),
|
"discourse_automation.scriptables.#{id}.title",
|
||||||
|
default: "Missing translation for discourse_automation.scriptables.#{id}.title",
|
||||||
|
),
|
||||||
|
description: I18n.exists?(description_key, :en) ? I18n.t(description_key) : nil,
|
||||||
|
doc: I18n.exists?(doc_key, :en) ? I18n.t(doc_key) : nil,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -47,8 +47,12 @@ module DiscourseAutomation
|
|||||||
{
|
{
|
||||||
id: object.script,
|
id: object.script,
|
||||||
version: scriptable.version,
|
version: scriptable.version,
|
||||||
name: I18n.t("#{key}.#{object.script}.title"),
|
name:
|
||||||
description: I18n.t("#{key}.#{object.script}.description"),
|
I18n.t(
|
||||||
|
"#{key}.#{object.script}.title",
|
||||||
|
default: "Missing translation for #{key}.#{object.script}.title",
|
||||||
|
),
|
||||||
|
description: I18n.t("#{key}.#{object.script}.description", default: ""),
|
||||||
doc: I18n.exists?(doc_key, :en) ? I18n.t(doc_key) : nil,
|
doc: I18n.exists?(doc_key, :en) ? I18n.t(doc_key) : nil,
|
||||||
with_trigger_doc:
|
with_trigger_doc:
|
||||||
I18n.exists?(script_with_trigger_key, :en) ? I18n.t(script_with_trigger_key) : nil,
|
I18n.exists?(script_with_trigger_key, :en) ? I18n.t(script_with_trigger_key) : nil,
|
||||||
@@ -66,8 +70,12 @@ module DiscourseAutomation
|
|||||||
|
|
||||||
{
|
{
|
||||||
id: object.trigger,
|
id: object.trigger,
|
||||||
name: I18n.t("#{key}.#{object.trigger}.title"),
|
name:
|
||||||
description: I18n.t("#{key}.#{object.trigger}.description"),
|
I18n.t(
|
||||||
|
"#{key}.#{object.trigger}.title",
|
||||||
|
default: "Missing translation for #{key}.#{object.trigger}.title",
|
||||||
|
),
|
||||||
|
description: I18n.t("#{key}.#{object.trigger}.description", default: ""),
|
||||||
doc: I18n.exists?(doc_key, :en) ? I18n.t(doc_key) : nil,
|
doc: I18n.exists?(doc_key, :en) ? I18n.t(doc_key) : nil,
|
||||||
not_found: triggerable&.not_found,
|
not_found: triggerable&.not_found,
|
||||||
templates: process_templates(triggerable&.fields || []),
|
templates: process_templates(triggerable&.fields || []),
|
||||||
|
|||||||
34
plugins/automation/spec/system/error_spec.rb
Normal file
34
plugins/automation/spec/system/error_spec.rb
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
describe "DiscourseAutomation | error", type: :system do
|
||||||
|
fab!(:admin)
|
||||||
|
|
||||||
|
before do
|
||||||
|
SiteSetting.discourse_automation_enabled = true
|
||||||
|
sign_in(admin)
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when saving the form with an error" do
|
||||||
|
it "shows the error correctly" do
|
||||||
|
visit("/admin/plugins/discourse-automation")
|
||||||
|
|
||||||
|
find(".new-automation").click
|
||||||
|
fill_in("automation-name", with: "aaaaa")
|
||||||
|
select_kit = PageObjects::Components::SelectKit.new(".scriptables")
|
||||||
|
select_kit.expand
|
||||||
|
select_kit.select_row_by_value("post")
|
||||||
|
find(".create-automation").click
|
||||||
|
select_kit = PageObjects::Components::SelectKit.new(".triggerables")
|
||||||
|
select_kit.expand
|
||||||
|
select_kit.select_row_by_value("recurring")
|
||||||
|
find(".update-automation").click
|
||||||
|
|
||||||
|
expect(page).to have_content(
|
||||||
|
I18n.t(
|
||||||
|
"discourse_automation.models.fields.required_field",
|
||||||
|
{ name: "topic", target: "script", target_name: "post" },
|
||||||
|
),
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -6,34 +6,6 @@ describe "DiscourseAutomation | smoke test", type: :system, js: true do
|
|||||||
fab!(:badge) { Fabricate(:badge, name: "badge") }
|
fab!(:badge) { Fabricate(:badge, name: "badge") }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
I18n.backend.store_translations(
|
|
||||||
:en,
|
|
||||||
{
|
|
||||||
discourse_automation: {
|
|
||||||
scriptables: {
|
|
||||||
test: {
|
|
||||||
title: "Test",
|
|
||||||
description: "Test",
|
|
||||||
},
|
|
||||||
something_about_us: {
|
|
||||||
title: "Something about us.",
|
|
||||||
description: "We rock!",
|
|
||||||
},
|
|
||||||
nothing_about_us: {
|
|
||||||
title: "Nothing about us.",
|
|
||||||
description: "We don't rock!",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
triggerables: {
|
|
||||||
title: "Triggerable",
|
|
||||||
description: "Triggerable",
|
|
||||||
user_first_logged_in: {
|
|
||||||
description: "User first logged in.",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
)
|
|
||||||
SiteSetting.discourse_automation_enabled = true
|
SiteSetting.discourse_automation_enabled = true
|
||||||
sign_in(admin)
|
sign_in(admin)
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user