package endpointcache_test

import (
	"dataservices/commons/endpointcache"
	"testing"
	"time"

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

func TestCacheLimiterBasi(t *testing.T) {
	limiter := endpointcache.NewCacheLimiter(20)
	secondsEastOfUTC := int((8 * time.Hour).Seconds())
	beijing := time.FixedZone("Beijing Time", secondsEastOfUTC)
	itemStart := endpointcache.CacheItem{
		ExternalAppId: "1",
		WrittenTime:   time.Date(2023, 8, 8, 0, 0, 0, 0, beijing),
		WrittenBytes:  20,
		TTL:           30,
	}
	itemAfter15Seconds := endpointcache.CacheItem{
		ExternalAppId: "1",
		WrittenTime:   time.Date(2023, 8, 8, 0, 0, 15, 0, beijing),
		WrittenBytes:  20,
		TTL:           30,
	}
	itemAfter15SecondsAnotherApp := endpointcache.CacheItem{
		ExternalAppId: "2",
		WrittenTime:   time.Date(2023, 8, 8, 0, 0, 15, 0, beijing),
		WrittenBytes:  20,
		TTL:           30,
	}
	itemAfter30Seconds := endpointcache.CacheItem{
		ExternalAppId: "1",
		WrittenTime:   time.Date(2023, 8, 8, 0, 0, 30, 0, beijing),
		WrittenBytes:  20,
		TTL:           30,
	}

	succuess := limiter.PutItem(&itemStart)
	assert.True(t, succuess)
	succuess = limiter.PutItem(&itemAfter15Seconds)
	assert.False(t, succuess)
	succuess = limiter.PutItem(&itemAfter15SecondsAnotherApp)
	assert.True(t, succuess)
	succuess = limiter.PutItem(&itemAfter30Seconds)
	assert.True(t, succuess)
}
