From f6cd21f7cb9dd506127ccbd28d49640853fc1c67 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 18 Apr 2025 16:07:01 +0200 Subject: [PATCH] Extract default stages into something that will be created together with a new Workflow in the model --- app/controllers/workflows_controller.rb | 2 -- app/models/workflow.rb | 10 ++++++++++ test/controllers/workflows_controller_test.rb | 19 +++++++++++++++++++ test/models/workflow_test.rb | 8 ++++++++ 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 test/controllers/workflows_controller_test.rb create mode 100644 test/models/workflow_test.rb diff --git a/app/controllers/workflows_controller.rb b/app/controllers/workflows_controller.rb index 49abcd26f..f8b54254d 100644 --- a/app/controllers/workflows_controller.rb +++ b/app/controllers/workflows_controller.rb @@ -11,8 +11,6 @@ class WorkflowsController < ApplicationController def create @workflow = Workflow.create! workflow_params - # FIXME: this should definitely change. - [ "Triage", "In progress", "On Hold", "Review" ].each { |name| @workflow.stages.create! name: name } redirect_to workflows_path end diff --git a/app/models/workflow.rb b/app/models/workflow.rb index df896cf09..1812d7225 100644 --- a/app/models/workflow.rb +++ b/app/models/workflow.rb @@ -1,3 +1,13 @@ class Workflow < ApplicationRecord + DEFAULT_STAGES = [ "Triage", "In progress", "On Hold", "Review" ] + has_many :stages, dependent: :delete_all + + after_create_commit :create_default_stages + + private + def create_default_stages + Workflow::Stage.insert_all \ + DEFAULT_STAGES.collect { |default_stage_name| { workflow_id: id , name: default_stage_name } } + end end diff --git a/test/controllers/workflows_controller_test.rb b/test/controllers/workflows_controller_test.rb new file mode 100644 index 000000000..392f6514b --- /dev/null +++ b/test/controllers/workflows_controller_test.rb @@ -0,0 +1,19 @@ +require "test_helper" + +class WorkflowsControllerTest < ActionDispatch::IntegrationTest + setup do + sign_in_as :kevin + end + + test "index" do + get workflows_path + assert_in_body workflows(:on_call).name + end + + test "create" do + assert_difference -> { Workflow.count }, +1 do + post workflows_path, params: { workflow: { name: "My new workflow!" } } + assert_redirected_to workflows_path + end + end +end diff --git a/test/models/workflow_test.rb b/test/models/workflow_test.rb new file mode 100644 index 000000000..23239b3b4 --- /dev/null +++ b/test/models/workflow_test.rb @@ -0,0 +1,8 @@ +require "test_helper" + +class WorkflowTest < ActiveSupport::TestCase + test "create with default stages" do + workflow = Workflow.create name: "My New Workflow" + assert_equal Workflow::DEFAULT_STAGES.sort, workflow.stages.collect(&:name).sort + end +end