diff --git a/app/controllers/cards/self_assignments_controller.rb b/app/controllers/cards/self_assignments_controller.rb new file mode 100644 index 000000000..a38c99cf0 --- /dev/null +++ b/app/controllers/cards/self_assignments_controller.rb @@ -0,0 +1,17 @@ +class Cards::SelfAssignmentsController < ApplicationController + include CardScoped + + def create + if @card.toggle_assignment(Current.user) + respond_to do |format| + format.turbo_stream { render "cards/assignments/create" } + format.json { head :no_content } + end + else + respond_to do |format| + format.turbo_stream { render "cards/assignments/create" } + format.json { head :unprocessable_entity } + end + end + end +end diff --git a/app/javascript/controllers/card_hotkeys_controller.js b/app/javascript/controllers/card_hotkeys_controller.js index 564c076ad..62d02288d 100644 --- a/app/javascript/controllers/card_hotkeys_controller.js +++ b/app/javascript/controllers/card_hotkeys_controller.js @@ -79,7 +79,7 @@ export default class extends Controller { const selection = this.#selectedCard if (!selection) return - const url = selection.card.dataset.cardAssignToMeUrl + const url = selection.card.dataset.cardAssignToSelfUrl if (url) { event.preventDefault() await post(url, { responseKind: "turbo-stream" }) diff --git a/app/views/cards/display/_preview.html.erb b/app/views/cards/display/_preview.html.erb index c1fc67914..c7f157f1c 100644 --- a/app/views/cards/display/_preview.html.erb +++ b/app/views/cards/display/_preview.html.erb @@ -11,9 +11,7 @@ <% card_data[:card_not_now_url] = card_not_now_path(card) %> <% card_data[:card_closure_url] = card_closure_path(card) %> <% card_data[:action] = "mouseenter->navigable-list#hoverSelect" %> - <% if Current.user %> - <% card_data[:card_assign_to_me_url] = card_assignments_path(card, params: { assignee_id: Current.user.id }) %> - <% end %> + <% card_data[:card_assign_to_self_url] = card_self_assignment_path(card) %> <% end %> <%= card_article_tag card, class: "card", draggable: draggable, data: card_data, tabindex: 0 do %> diff --git a/config/routes.rb b/config/routes.rb index 97e34290c..3a76e8b7a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -87,6 +87,7 @@ Rails.application.routes.draw do resource :reading resources :assignments + resource :self_assignment, only: :create resources :steps resources :taggings diff --git a/test/controllers/cards/self_assignments_controller_test.rb b/test/controllers/cards/self_assignments_controller_test.rb new file mode 100644 index 000000000..3edde8fec --- /dev/null +++ b/test/controllers/cards/self_assignments_controller_test.rb @@ -0,0 +1,44 @@ +require "test_helper" + +class Cards::SelfAssignmentsControllerTest < ActionDispatch::IntegrationTest + setup do + sign_in_as :kevin + end + + test "create assigns to current user" do + card = cards(:layout) + + assert_not card.assigned_to?(users(:kevin)) + + post card_self_assignment_path(card), as: :turbo_stream + assert_response :success + assert_meta_replaced(card) + assert card.reload.assigned_to?(users(:kevin)) + end + + test "create toggles off when already assigned" do + card = cards(:logo) + + assert card.assigned_to?(users(:kevin)) + + post card_self_assignment_path(card), as: :turbo_stream + assert_response :success + assert_meta_replaced(card) + assert_not card.reload.assigned_to?(users(:kevin)) + end + + test "create as JSON" do + card = cards(:layout) + + assert_not card.assigned_to?(users(:kevin)) + + post card_self_assignment_path(card), as: :json + assert_response :no_content + assert card.reload.assigned_to?(users(:kevin)) + end + + private + def assert_meta_replaced(card) + assert_turbo_stream action: :replace, target: dom_id(card, :meta) + end +end