package database_test

import (
	"os"
	"testing"

	"github.com/CityOfZion/neo-go/pkg/database"
	"github.com/stretchr/testify/assert"
	"github.com/syndtr/goleveldb/leveldb/errors"
)

const path = "temp"

func cleanup(db *database.LDB) {
	db.Close()
	os.RemoveAll(path)
}
func TestDBCreate(t *testing.T) {
	db := database.New(path)
	assert.NotEqual(t, nil, db)
	cleanup(db)
}
func TestPutGet(t *testing.T) {
	db := database.New(path)

	key := []byte("Hello")
	value := []byte("World")

	err := db.Put(key, value)
	assert.Equal(t, nil, err)

	res, err := db.Get(key)
	assert.Equal(t, nil, err)
	assert.Equal(t, value, res)
	cleanup(db)
}
func TestPutDelete(t *testing.T) {

	db := database.New(path)

	key := []byte("Hello")
	value := []byte("World")

	err := db.Put(key, value)

	err = db.Delete(key)
	assert.Equal(t, nil, err)

	res, err := db.Get(key)

	assert.Equal(t, errors.ErrNotFound, err)
	assert.Equal(t, res, []byte{})
	cleanup(db)
}

func TestHas(t *testing.T) {
	db := database.New("temp")

	res, err := db.Has([]byte("NotExist"))
	assert.Equal(t, res, false)
	assert.Equal(t, err, nil)

	key := []byte("Hello")
	value := []byte("World")

	err = db.Put(key, value)
	assert.Equal(t, nil, err)

	res, err = db.Has(key)
	assert.Equal(t, res, true)
	assert.Equal(t, err, nil)
	cleanup(db)

}
func TestDBClose(t *testing.T) {
	db := database.New("temp")
	err := db.Close()
	assert.Equal(t, nil, err)
	cleanup(db)
}