package digeststore

import (
	"os"
	"testing"
	"time"

	assert "github.com/stretchr/testify/require"
	"go.skia.org/infra/go/testutils"
)

const TEST_DATA_DIR = "testdata"

func TestDigestStore(t *testing.T) {
	testutils.MediumTest(t)
	assert.NoError(t, os.MkdirAll(TEST_DATA_DIR, 0755))
	defer testutils.RemoveAll(t, TEST_DATA_DIR)

	digestStore, err := New(TEST_DATA_DIR)
	assert.NoError(t, err)
	testDigestStore(t, digestStore)
}

func testDigestStore(t assert.TestingT, digestStore DigestStore) {
	testName_1, digest_1 := "smapleTest_1", "sampleDigest_1"
	timestamp_1 := time.Now().Unix() - 20

	di, ok, err := digestStore.Get(testName_1, digest_1)
	assert.NoError(t, err)
	assert.False(t, ok)

	digestInfos := []*DigestInfo{
		{TestName: testName_1, Digest: digest_1, First: timestamp_1, Last: timestamp_1},
	}
	assert.NoError(t, digestStore.Update(digestInfos))

	di, ok, err = digestStore.Get(testName_1, digest_1)
	assert.NoError(t, err)
	assert.True(t, ok)
	assert.Equal(t, timestamp_1, di.Last)
	assert.Equal(t, timestamp_1, di.First)

	// Update the digest with a commit 10 seconds later than the first one.
	timestamp_2 := timestamp_1 + 10
	digestInfos = []*DigestInfo{
		{TestName: testName_1, Digest: digest_1, First: timestamp_2, Last: timestamp_2},
	}

	assert.NoError(t, digestStore.Update(digestInfos))

	di, ok, err = digestStore.Get(testName_1, digest_1)
	assert.NoError(t, err)
	assert.True(t, ok)

	assert.Equal(t, timestamp_1, di.First)
	assert.Equal(t, timestamp_2, di.Last)
}
