diff --git a/app/controllers/cards_controller.rb b/app/controllers/cards_controller.rb index cb40079e8..0dc1148b1 100644 --- a/app/controllers/cards_controller.rb +++ b/app/controllers/cards_controller.rb @@ -10,8 +10,17 @@ class CardsController < ApplicationController end def create - card = @board.cards.find_or_create_by!(creator: Current.user, status: "drafted") - redirect_to card + respond_to do |format| + format.html do + card = @board.cards.find_or_create_by!(creator: Current.user, status: "drafted") + redirect_to card + end + + format.json do + card = @board.cards.create! card_params.merge(creator: Current.user) + head :created, location: card_path(card, format: :json) + end + end end def show diff --git a/app/views/cards/show.json.jbuilder b/app/views/cards/show.json.jbuilder new file mode 100644 index 000000000..8f44c1a24 --- /dev/null +++ b/app/views/cards/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "cards/card", card: @card diff --git a/test/controllers/api_test.rb b/test/controllers/api_test.rb index 7aadfdee0..62244855a 100644 --- a/test/controllers/api_test.rb +++ b/test/controllers/api_test.rb @@ -40,6 +40,14 @@ class ApiTest < ActionDispatch::IntegrationTest assert_equal "My new board", @response.parsed_body["name"] end + test "create card" do + post board_cards_path(boards(:writebook), format: :json), params: { card: { title: "My new card" } }, env: @davids_bearer_token + assert_equal card_path(Card.last, format: :json), @response.headers["Location"] + + get card_path(Card.last, format: :json), env: @davids_bearer_token + assert_equal "My new card", @response.parsed_body["title"] + end + private def bearer_token_env(token) { "HTTP_AUTHORIZATION" => "Bearer #{token}" }