package dispatcher

import (
	"testing"

	"github.com/stretchr/testify/require"
)

func TestInvalidatedStartReservationIsNotCurrent(t *testing.T) {
	sm := NewSessionManager()
	res, _, ok := sm.BeginStart("agent-invalidated", nil)
	require.True(t, ok)

	require.True(t, sm.startReservationCurrent(res), "fresh reservation must be current")

	sm.Delete("agent-invalidated")
	require.False(t, sm.startReservationCurrent(res),
		"invalidated start reservation must not be reported current")
}

func TestSupersededStartReservationIsNotCurrent(t *testing.T) {
	sm := NewSessionManager()
	first, _, ok := sm.BeginStart("agent-superseded", nil)
	require.True(t, ok)
	sm.FinishStart(first)

	second, _, ok := sm.BeginStart("agent-superseded", nil)
	require.True(t, ok)
	require.False(t, sm.startReservationCurrent(first),
		"superseded reservation must not be reported current")
	require.True(t, sm.startReservationCurrent(second))
}

func TestClosedManagerReservationsAreNotCurrent(t *testing.T) {
	sm := NewSessionManager()
	res, _, ok := sm.BeginStart("agent-closed", nil)
	require.True(t, ok)
	_ = sm.Close()

	require.False(t, sm.startReservationCurrent(res),
		"reservations after Close must not be reported current")
}
