From 3eceaba6e7bebc064bcf8d78c0f04737db7eb8fb Mon Sep 17 00:00:00 2001 From: Sheldon Nunes Date: Thu, 1 Jun 2023 08:26:00 +1200 Subject: [PATCH] feat(optional): Add optional helper text for optional attributes --- app/models/maintenance_tasks/task_data_show.rb | 10 ++++++++++ app/views/maintenance_tasks/tasks/show.html.erb | 3 +++ test/system/maintenance_tasks/tasks_test.rb | 9 +++++++++ 3 files changed, 22 insertions(+) diff --git a/app/models/maintenance_tasks/task_data_show.rb b/app/models/maintenance_tasks/task_data_show.rb index af71c18f..0a4105d4 100644 --- a/app/models/maintenance_tasks/task_data_show.rb +++ b/app/models/maintenance_tasks/task_data_show.rb @@ -79,6 +79,16 @@ def parameter_names end end + # Returns whether a given attribute name is required + # by checking if a presence validator is added to the attribute. + # + # @param attribute_name [String] the name of the Task attribute. + # @return [Boolean] whether the Task attribute is required + def required_parameter?(attribute_name) + Task.named(name).validators_on(attribute_name) + .any? { |v| v.is_a?(ActiveModel::Validations::PresenceValidator) } + end + # @return [MaintenanceTasks::Task, nil] an instance of the Task class. # @return [nil] if the Task file was deleted. def new diff --git a/app/views/maintenance_tasks/tasks/show.html.erb b/app/views/maintenance_tasks/tasks/show.html.erb index 3fbac1b1..c1a5664b 100644 --- a/app/views/maintenance_tasks/tasks/show.html.erb +++ b/app/views/maintenance_tasks/tasks/show.html.erb @@ -22,6 +22,9 @@
<%= parameter_field(ff, parameter_name) %>
+ <% unless @task.required_parameter?(parameter_name) %> +

Optional

+ <% end %> <% end %> <% end %> diff --git a/test/system/maintenance_tasks/tasks_test.rb b/test/system/maintenance_tasks/tasks_test.rb index 7b7a93f9..aa345409 100644 --- a/test/system/maintenance_tasks/tasks_test.rb +++ b/test/system/maintenance_tasks/tasks_test.rb @@ -79,6 +79,15 @@ class TasksTest < ApplicationSystemTestCase assert_equal("111222333", integer_attr_val) end + test "task with optional attributes renders with helper text on the form" do + visit maintenance_tasks_path + + click_on("Maintenance::ParamsTask") + + refute_selector ".field:has(label[for='_task_arguments_post_ids']) .help" + assert_selector ".field:has(label[for='_task_arguments_content']) .help", text: "Optional" + end + test "task with attributes renders correct field tags on the form" do visit maintenance_tasks_path