package pagination

import (
	"encoding/json"
	"testing"
	"time"

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

var (
	defaultCursor = Pager{
		Cursor:   time.Now().Format(time.RFC3339),
		Offset:   0,
		Previous: false,
	}
)

func TestParse(t *testing.T) {
	// Test that default values are used
	_, count := Parse(nil, nil)
	assert.Equal(t, count, defaultCount)
	// Test that provided values are parsed
	cursor := encode(defaultCursor)
	limit := 20
	startCursor, count := Parse(&cursor, &limit)
	assert.Equal(t, count, 20)
	expectedCursor, err := Decode(cursor)
	assert.NoError(t, err)
	decodedPager := Pager{}
	err = json.Unmarshal(expectedCursor, &decodedPager)
	assert.NoError(t, err)
	assert.Equal(t, startCursor, decodedPager)
}

func TestOverall(t *testing.T) {
	start := defaultCursor
	end := time.Now().Add(36 * time.Hour).Format(time.RFC3339)
	pager := Overall(start, end, "", 10, 10, 0)
	assert.Equal(t, pager.HasNextPage, false)
	assert.Equal(t, pager.CurrentCursor, encode(start))
	assert.Equal(t, pager.NextCursor, encode(Pager{
		Cursor: end,
		Offset: 10,
	}))
	assert.Equal(t, pager.TotalCount, 10)
	assert.Equal(t, pager.PreviousCursor, "")
}