using NATS.Server.Raft;

namespace NATS.Server.Raft.Tests;

public class RaftSafetyContractTests
{
    [Fact]
    public async Task Follower_rejects_stale_term_vote_and_append()
    {
        var node = new RaftNode("n1");
        node.StartElection(clusterSize: 1);

        var staleVote = node.GrantVote(term: node.Term - 1);
        staleVote.Granted.ShouldBeFalse();

        await Should.ThrowAsync<InvalidOperationException>(async () =>
            await node.TryAppendFromLeaderAsync(new RaftLogEntry(1, node.Term - 1, "cmd"), default));
    }
}
