# frozen_string_literal: true require "test_helper" class TableInviteInvitesControllerTest < ActionDispatch::IntegrationTest test "should get index" do sign_in users(:trevor) get table_invites_url assert_response :success end test "only a table owner can invite players" do sign_in users(:trevor) get new_table_table_invite_url(tables(:gimlis_table)) assert_response :not_found end test "should get new" do sign_in users(:trevor) get new_table_table_invite_url(tables(:table)) assert_response :success end test "should get edit" do sign_in users(:frodo) get edit_table_invite_url(table_invites(:unaccepted)) assert_response :success end test "should create table_invite" do sign_in users(:trevor) assert_changes("TableInvite.count", +1) do post(table_table_invites_url(tables(:table)), params: { table_invite: { email: "uninvited_user@example.com" } }) end assert_redirected_to table_path(tables(:table)) end test "can invite a non-user to join" do sign_in users(:trevor) assert_changes("TableInvite.count", +1) do assert_emails(+1) do post(table_table_invites_url(tables(:table)), params: { table_invite: { email: "not_a_member@example.com" } }) end end assert_redirected_to table_path(tables(:table)) end test "should email user when an invite is created" do sign_in users(:trevor) assert_emails(+1) do post(table_table_invites_url(tables(:table)), params: { table_invite: { email: "uninvited_user@example.com" } }) end end test "should accept table_invite" do sign_in users(:frodo) invite = table_invites(:unaccepted) assert_nil invite.accepted_at patch table_invite_url(invite), params: { accept: true } assert_redirected_to table_path(invite.table) invite.reload assert_not_nil invite.accepted_at end test "should decline table_invite" do sign_in users(:frodo) invite = table_invites(:unaccepted) assert_nil invite.accepted_at patch table_invite_url(invite), params: { decline: true } assert_redirected_to root_path invite.reload assert_not_nil invite.declined_at end end