package db

import (
	"context"
	"testing"
	"time"

	"github.com/stretchr/testify/require"

	"go.skia.org/infra/go/firestore/testutils"
	"go.skia.org/infra/go/sktest"
)

const (
	testDBKey   = "test_key"
	testIssueId = int64(100)
)

// newDBClientForTesting returns a FirestoreDB client and ensures that it will
// connect to the Firestore emulator. The Client's instance name will be
// randomized to ensure concurrent tests don't interfere with each other. It also
// returns a CleanupFunc that closes the Client.
func newDBClientForTesting(ctx context.Context, t sktest.TestingT) *FirestoreDB {
	c, cleanup := testutils.NewClientForTesting(ctx, t)
	t.Cleanup(cleanup)
	return &FirestoreDB{
		client:         c,
		collectionName: NpmAuditDataCol,
	}
}

func TestGetFromDB_EmptyResults_NoErrors(t *testing.T) {
	ctx := context.Background()
	db := newDBClientForTesting(ctx, t)

	// DB should be empty.
	cherrypickData, err := db.GetFromDB(ctx, testDBKey)
	require.Nil(t, cherrypickData)
	require.NoError(t, err)
}

func TestPutInDB_OneEntry_ExpectedChangeNum(t *testing.T) {
	db := newDBClientForTesting(context.Background(), t)
	ctx := context.Background()
	created := time.Now().UTC()

	// DB should be empty. Add one entry.
	err := db.PutInDB(ctx, testDBKey, testIssueId, created)
	require.NoError(t, err)

	// Get the added entry and assert.
	npmAuditData, err := db.GetFromDB(ctx, testDBKey)
	require.Equal(t, testIssueId, npmAuditData.IssueId)
	require.Equal(t, created.Format("2006-01-02"), npmAuditData.Created.Format("2006-01-02"))
	require.NoError(t, err)
}
