package backfill

import (
	"context"
	"testing"
	"time"

	"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
	"github.com/OffchainLabs/prysm/v7/testing/require"
	"github.com/pkg/errors"
)

func TestSortBatchDesc(t *testing.T) {
	orderIn := []primitives.Slot{100, 10000, 1}
	orderOut := []primitives.Slot{10000, 100, 1}
	batches := make([]batch, len(orderIn))
	for i := range orderIn {
		batches[i] = batch{end: orderIn[i]}
	}
	sortBatchDesc(batches)
	for i := range orderOut {
		require.Equal(t, orderOut[i], batches[i].end)
	}
}

func TestWaitUntilReady(t *testing.T) {
	wur := batchBlockUntil

	var got time.Duration
	var errDerp = errors.New("derp")
	batchBlockUntil = func(_ context.Context, ur time.Duration, _ batch) error {
		got = ur
		return errDerp
	}

	b := batch{}.withRetryableError(errors.New("test error"))
	require.ErrorIs(t, b.waitUntilReady(t.Context()), errDerp)
	require.Equal(t, true, retryDelay-time.Until(b.retryAfter) < time.Millisecond)
	require.Equal(t, true, got < retryDelay && got > retryDelay-time.Millisecond)
	require.Equal(t, 1, b.retries)
	batchBlockUntil = wur
}
