package sqkv import ( "errors" "os" "path/filepath" "testing" "github.com/matryer/is" ) func TestDefault(t *testing.T) { assert := is.New(t) tmp := t.TempDir() dbPath := filepath.Join(tmp, "sqkv.db") db, err := Open(dbPath) assert.NoErr(err) // Should create database defer db.Close() err = db.Put("foo", "bar") assert.NoErr(err) // Should put kv val, err := db.Get("foo") assert.NoErr(err) // Should get kv assert.Equal(val, "bar") // key(foo) == value(bar) err = db.Delete("foo") assert.NoErr(err) // Should delete kv _, err = db.Get("foo") assert.True(errors.Is(err, ErrKeyDoesNotExist)) } func TestBucket(t *testing.T) { assert := is.New(t) tmp := t.TempDir() dbPath := filepath.Join(tmp, "sqkv.db") db, err := Open(dbPath) assert.NoErr(err) // Should create database defer db.Close() _, err = db.Bucket("honk") assert.True(errors.Is(err, ErrBucketDoesNotExist)) // Bucket does not exist; should error _, err = db.CreateBucket("honk") assert.NoErr(err) // Should create bucket _, err = db.Bucket("honk") assert.NoErr(err) // Bucket should exist b, err := db.CreateBucketIfNotExist("honk") assert.NoErr(err) // Bucket should exist and be returned err = b.Put("foo", "bar") assert.NoErr(err) // Should put kv val, err := b.Get("foo") assert.NoErr(err) // Should get kv assert.Equal(val, "bar") // key(foo) == value(bar) err = b.Delete("foo") assert.NoErr(err) // Should delete kv _, err = b.Get("foo") assert.True(errors.Is(err, ErrKeyDoesNotExist)) } func TestOptions(t *testing.T) { assert := is.New(t) tmp := t.TempDir() dbPath := filepath.Join(tmp, "opt.db") _, err := Open(dbPath, WithMode(OpenModeReadOnly)) assert.True(err != nil) // Database should not be created _, err = Open(dbPath, WithMode(OpenModeReadWrite)) assert.True(err != nil) // Database should not be created _, err = Open(dbPath, WithMode(OpenModeMemory)) assert.NoErr(err) // Database should not be created, but no error _, err = os.Stat(dbPath) assert.True(err != nil) // Database should not be created on disk db, err := Open(dbPath, WithJournalMode(OpenJournalModeWAL)) defer db.Close() var jm string row := db.db.QueryRow("PRAGMA journal_mode") assert.NoErr(row.Scan(&jm)) // Should return PRAGMA result assert.Equal(jm, "wal") // Journal mode should be WAL }