diff --git a/app/controllers/cards/stagings_controller.rb b/app/controllers/cards/stagings_controller.rb index 102c17599..714427ecf 100644 --- a/app/controllers/cards/stagings_controller.rb +++ b/app/controllers/cards/stagings_controller.rb @@ -1,20 +1,8 @@ class Cards::StagingsController < ApplicationController include CardScoped - before_action :set_stage - - def create - if @stage - @card.toggle_stage @stage - else - @card.update!(stage: nil) - end - + def update + @card.change_stage_to @collection.workflow.stages.find(params[:stage_id]) render_card_replacement end - - private - def set_stage - @stage = Workflow::Stage.find_by(id: params[:stage_id]) - end end diff --git a/app/helpers/workflows_helper.rb b/app/helpers/workflows_helper.rb index 43d0d5973..560e1aebf 100644 --- a/app/helpers/workflows_helper.rb +++ b/app/helpers/workflows_helper.rb @@ -2,8 +2,8 @@ module WorkflowsHelper def button_to_set_stage(card, stage) button_to \ tag.span(stage.name, class: "overflow-ellipsis"), - card_stagings_path(card, stage_id: stage), - method: :post, + card_staging_path(card, stage_id: stage), + method: :put, class: [ "btn justify-start workflow-stage txt-uppercase workflow-stage", { "workflow-stage--current": stage == card.stage } ], form_class: "flex align-center gap-half", data: { turbo_frame: "_top" } diff --git a/app/models/card/staged.rb b/app/models/card/staged.rb index da3269ad7..f8036d3e3 100644 --- a/app/models/card/staged.rb +++ b/app/models/card/staged.rb @@ -13,12 +13,10 @@ module Card::Staged stage&.workflow end - def toggle_stage(stage) - new_stage, event = self.stage_id == stage.id ? [ nil, :unstaged ] : [ stage, :staged ] - + def change_stage_to(new_stage) transaction do update! stage: new_stage - track_event event, stage_id: stage.id, stage_name: stage.name + track_event :staged, stage_id: new_stage.id, stage_name: new_stage.name end end diff --git a/config/routes.rb b/config/routes.rb index 61271338a..4e1d24f88 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -26,17 +26,17 @@ Rails.application.routes.draw do resources :cards do scope module: :cards do resource :engagement + resource :goldness resource :image resource :pin resource :closure resource :publish resource :reading resource :recover + resource :staging resource :watch - resource :goldness resources :assignments - resources :stagings resources :taggings resources :comments do diff --git a/test/controllers/cards/stagings_controller_test.rb b/test/controllers/cards/stagings_controller_test.rb new file mode 100644 index 000000000..5e49876f5 --- /dev/null +++ b/test/controllers/cards/stagings_controller_test.rb @@ -0,0 +1,12 @@ +require "test_helper" + +class Cards::StagingsControllerTest < ActionDispatch::IntegrationTest + setup do + sign_in_as :kevin + end + + test "update" do + put card_staging_path(cards(:logo)), params: { stage_id: workflow_stages(:qa_in_progress).id }, as: :turbo_stream + assert_card_container_rerendered(cards(:logo)) + end +end diff --git a/test/integration/card_messages.rb b/test/integration/card_messages.rb index 29eded2f0..0253e45f3 100644 --- a/test/integration/card_messages.rb +++ b/test/integration/card_messages.rb @@ -25,19 +25,5 @@ class CardMessagesTest < ActionDispatch::IntegrationTest assert_predicate card.messages.last, :event_summary? assert_equal 1, card.messages.last.event_summary.events.count assert_equal "assigned", card.messages.last.messageable.events.last.action - - # Stage it - post card_stagings_path(card), params: { stage_id: workflow_stages(:qa_triage).id } - assert_equal 3, card.messages.count - assert_predicate card.messages.last, :event_summary? - assert_equal 2, card.messages.last.event_summary.events.count - assert_equal "staged", card.messages.last.messageable.events.last.action - - # Unstage it - post card_stagings_path(card), params: { stage_id: workflow_stages(:qa_triage).id } - assert_equal 3, card.messages.count - assert_predicate card.messages.last, :event_summary? - assert_equal 3, card.messages.last.event_summary.events.count - assert_equal "unstaged", card.messages.last.messageable.events.last.action end end diff --git a/test/models/card/staged_test.rb b/test/models/card/staged_test.rb new file mode 100644 index 000000000..492374fb5 --- /dev/null +++ b/test/models/card/staged_test.rb @@ -0,0 +1,12 @@ +require "test_helper" + +class Card::StagedTest < ActiveSupport::TestCase + setup { Current.session = sessions(:david) } + + test "change stage" do + assert_difference -> { Event.where(action: :staged).count }, +1 do + cards(:logo).change_stage_to(workflow_stages(:qa_in_progress)) + assert_equal workflow_stages(:qa_in_progress), cards(:logo).reload.stage + end + end +end