require "test_helper"

class Columns::RightPositionsControllerTest < ActionDispatch::IntegrationTest
  setup do
    sign_in_as :kevin
  end

  test "move column right" do
    board = boards(:writebook)
    columns = board.columns.sorted.to_a

    column_a = columns[0]
    column_b = columns[1]
    original_position_a = column_a.position
    original_position_b = column_b.position

    post column_right_position_path(column_a), as: :turbo_stream
    assert_response :success

    assert_equal original_position_b, column_a.reload.position
    assert_equal original_position_a, column_b.reload.position
  end

  test "move column right as JSON" do
    board = boards(:writebook)
    columns = board.columns.sorted.to_a

    column_a = columns[0]
    column_b = columns[1]
    original_position_a = column_a.position
    original_position_b = column_b.position

    post column_right_position_path(column_a), as: :json
    assert_response :created

    assert_equal original_position_b, column_a.reload.position
    assert_equal original_position_a, column_b.reload.position
  end

  test "move right refreshes adjacent columns" do
    column = columns(:writebook_in_progress)

    post column_right_position_path(column), as: :turbo_stream

    column.reload.adjacent_columns.each do |adjacent_column|
      assert_turbo_stream action: :replace, target: dom_id(adjacent_column)
    end
  end

  test "users can only reorder columns in boards they have access to" do
    column = columns(:writebook_triage)

    post column_right_position_path(column), as: :turbo_stream
    assert_response :success

    boards(:writebook).update! all_access: false
    boards(:writebook).accesses.revoke_from users(:kevin)

    post column_right_position_path(column), as: :turbo_stream
    assert_response :not_found
  end
end
