require "test_helper"

class GamesControllerTest < ActionDispatch::IntegrationTest
  setup do
    @user = users(:one)
    login_as(@user)
    @game = games(:one)
    # edit/update/destroy には管理者権限が必要
    @game.participants.create!(user: @user, is_administrator: true) unless @game.participants.exists?(user: @user)
  end

  test "should get index" do
    get games_url
    assert_response :success
  end

  test "should get new" do
    get new_game_url
    assert_response :success
  end

  test "should create game" do
    assert_difference("Game.count") do
      post games_url, params: { game: {
        title: "New Test Game",
        memo: @game.memo,
        participants_count: @game.participants_count,
        victory_sc_count: 18,
        scoring_system: "none"
      } }
    end

    assert_redirected_to game_url(Game.last)
  end

  test "should show game" do
    # showアクションではgame_stateが必要なため、ターンにgame_stateを設定
    turn = @game.turns.first
    turn.update(game_state: { "centers" => {}, "units" => {} }) if turn
    get game_url(@game)
    assert_response :success
  end

  test "should get edit" do
    get edit_game_url(@game)
    assert_response :success
  end

  test "should update game" do
    patch game_url(@game), params: { game: {
      title: @game.title,
      memo: @game.memo,
      auto_order_mode: @game.auto_order_mode,
      victory_sc_count: 18,
      scoring_system: "none"
    } }
    assert_redirected_to game_url(@game)
  end

  test "should destroy game" do
    assert_difference("Game.count", -1) do
      delete game_url(@game)
    end

    assert_redirected_to games_url
  end
end
