yao/dsl/io/db_test.go
Max bd95ac0604 Enhance DSL data handling and model structure
- Introduced a new fmtRow function to format row data for DSL info, improving data consistency and readability.
- Updated the Inspect and List methods to utilize the fmtRow function for better data representation.
- Added new fields for 'readonly' and 'built_in' in the DSL model, allowing for more detailed metadata management.
- Enhanced the Create and Update methods to handle the new fields, ensuring proper data storage and retrieval.
- Updated the ListOptions struct to include a Pattern field for file name matching, improving search capabilities.
2025-07-15 18:28:01 +08:00

162 lines
3.1 KiB
Go

package io
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/yaoapp/yao/dsl/types"
)
func TestDBNew(t *testing.T) {
db := NewDB(types.TypeModel)
dbImpl, ok := db.(*DB)
assert.True(t, ok)
assert.Equal(t, types.TypeModel, dbImpl.Type)
}
func TestDBCreate(t *testing.T) {
prepare(t)
db := NewDB(types.TypeModel)
tc := NewTestCase()
err := db.Create(tc.CreateOptions())
assert.Nil(t, err)
// Check if exists
exists, err := db.Exists(tc.ID)
assert.Nil(t, err)
assert.True(t, exists)
// Create again should fail
err = db.Create(tc.CreateOptions())
assert.NotNil(t, err)
}
func TestDBInspect(t *testing.T) {
prepare(t)
db := NewDB(types.TypeModel)
tc := NewTestCase()
err := db.Create(tc.CreateOptions())
assert.Nil(t, err)
info, exists, err := db.Inspect(tc.ID)
assert.Nil(t, err)
assert.True(t, exists)
assert.True(t, tc.AssertInfo(info))
}
func TestDBSource(t *testing.T) {
prepare(t)
db := NewDB(types.TypeModel)
tc := NewTestCase()
err := db.Create(tc.CreateOptions())
assert.Nil(t, err)
data, exists, err := db.Source(tc.ID)
assert.Nil(t, err)
assert.True(t, exists)
assert.Equal(t, tc.Source, data)
}
func TestDBList(t *testing.T) {
prepare(t)
db := NewDB(types.TypeModel)
tc1 := NewTestCase()
tc2 := NewTestCase()
// Create test files
err := db.Create(tc1.CreateOptions())
assert.Nil(t, err)
err = db.Create(tc2.CreateOptions())
assert.Nil(t, err)
// List all
list, err := db.List(&types.ListOptions{})
assert.Nil(t, err)
assert.Equal(t, 2, len(list))
// List with tag
list, err = db.List(tc1.ListOptions(false))
assert.Nil(t, err)
assert.Equal(t, 1, len(list))
assert.Equal(t, tc1.ID, list[0].ID)
}
func TestDBUpdate(t *testing.T) {
prepare(t)
db := NewDB(types.TypeModel)
tc := NewTestCase()
err := db.Create(tc.CreateOptions())
assert.Nil(t, err)
// Update source
err = db.Update(tc.UpdateOptions())
assert.Nil(t, err)
info, exists, err := db.Inspect(tc.ID)
assert.Nil(t, err)
assert.True(t, exists)
assert.True(t, tc.AssertUpdatedInfo(info))
// Update info
err = db.Update(tc.UpdateInfoOptions())
assert.Nil(t, err)
info, exists, err = db.Inspect(tc.ID)
assert.Nil(t, err)
assert.True(t, exists)
assert.True(t, tc.AssertUpdatedInfoViaInfo(info))
}
func TestDBDelete(t *testing.T) {
prepare(t)
db := NewDB(types.TypeModel)
tc := NewTestCase()
err := db.Create(tc.CreateOptions())
assert.Nil(t, err)
err = db.Delete(tc.ID)
assert.Nil(t, err)
exists, err := db.Exists(tc.ID)
assert.Nil(t, err)
assert.False(t, exists)
}
func TestDBFlow(t *testing.T) {
prepare(t)
db := NewDB(types.TypeModel)
tc := NewTestCase()
// Create
err := db.Create(tc.CreateOptions())
assert.Nil(t, err)
// Inspect
info, exists, err := db.Inspect(tc.ID)
assert.Nil(t, err)
assert.True(t, exists)
assert.True(t, tc.AssertInfo(info))
// Update
err = db.Update(tc.UpdateOptions())
assert.Nil(t, err)
info, exists, err = db.Inspect(tc.ID)
assert.Nil(t, err)
assert.True(t, exists)
assert.True(t, tc.AssertUpdatedInfo(info))
// Delete
err = db.Delete(tc.ID)
assert.Nil(t, err)
exists, err = db.Exists(tc.ID)
assert.Nil(t, err)
assert.False(t, exists)
}