Feat v0.5.3 chat polish (#33)
All checks were successful
All checks were successful
Co-authored-by: Jeffrey Smith <jasafpro@gmail.com> Co-committed-by: Jeffrey Smith <jasafpro@gmail.com>
This commit was merged in pull request #33.
This commit is contained in:
@@ -350,3 +350,83 @@ func TestDBListTables(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// ── search_like ─────────────────────────────
|
||||
|
||||
func TestDBQuerySearchLike(t *testing.T) {
|
||||
db, cfg := newTestDB(t)
|
||||
db.Exec(`INSERT INTO ext_test_ext_logs (id, message, user_id) VALUES ('a', 'hello world', 'u1')`)
|
||||
db.Exec(`INSERT INTO ext_test_ext_logs (id, message, user_id) VALUES ('b', 'goodbye world', 'u2')`)
|
||||
db.Exec(`INSERT INTO ext_test_ext_logs (id, message, user_id) VALUES ('c', 'nothing here', 'u3')`)
|
||||
|
||||
result, err := execScript(t, cfg, `rows = db.query("logs", search_like={"message": "%hello%"})`)
|
||||
if err != nil {
|
||||
t.Fatalf("script error: %v", err)
|
||||
}
|
||||
rowsStr := result.Globals["rows"].String()
|
||||
if !strings.Contains(rowsStr, "hello world") {
|
||||
t.Errorf("expected hello world row, got: %s", rowsStr)
|
||||
}
|
||||
if strings.Contains(rowsStr, "goodbye") || strings.Contains(rowsStr, "nothing") {
|
||||
t.Errorf("unexpected rows in search_like results: %s", rowsStr)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDBQuerySearchLikeMultiColumn(t *testing.T) {
|
||||
db, cfg := newTestDB(t)
|
||||
db.Exec(`INSERT INTO ext_test_ext_logs (id, message, user_id) VALUES ('a', 'alpha', 'u1')`)
|
||||
db.Exec(`INSERT INTO ext_test_ext_logs (id, message, user_id) VALUES ('b', 'beta', 'u-alpha')`)
|
||||
db.Exec(`INSERT INTO ext_test_ext_logs (id, message, user_id) VALUES ('c', 'gamma', 'u3')`)
|
||||
|
||||
// Search across message OR user_id — should match both 'a' (message=alpha) and 'b' (user_id=u-alpha)
|
||||
result, err := execScript(t, cfg, `rows = db.query("logs", search_like={"message": "%alpha%", "user_id": "%alpha%"})`)
|
||||
if err != nil {
|
||||
t.Fatalf("script error: %v", err)
|
||||
}
|
||||
rowsStr := result.Globals["rows"].String()
|
||||
if !strings.Contains(rowsStr, "alpha") {
|
||||
t.Errorf("expected alpha match, got: %s", rowsStr)
|
||||
}
|
||||
if strings.Contains(rowsStr, "gamma") {
|
||||
t.Errorf("unexpected gamma row in multi-column search: %s", rowsStr)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDBQuerySearchLikeWithFilters(t *testing.T) {
|
||||
db, cfg := newTestDB(t)
|
||||
db.Exec(`INSERT INTO ext_test_ext_logs (id, message, user_id) VALUES ('a', 'hello from u1', 'u1')`)
|
||||
db.Exec(`INSERT INTO ext_test_ext_logs (id, message, user_id) VALUES ('b', 'hello from u2', 'u2')`)
|
||||
|
||||
// Combine search_like with filters — should only match u1's hello
|
||||
result, err := execScript(t, cfg, `rows = db.query("logs", filters={"user_id": "u1"}, search_like={"message": "%hello%"})`)
|
||||
if err != nil {
|
||||
t.Fatalf("script error: %v", err)
|
||||
}
|
||||
rowsStr := result.Globals["rows"].String()
|
||||
if !strings.Contains(rowsStr, "hello from u1") {
|
||||
t.Errorf("expected u1 hello row, got: %s", rowsStr)
|
||||
}
|
||||
if strings.Contains(rowsStr, "hello from u2") {
|
||||
t.Errorf("unexpected u2 row when filter + search_like combined: %s", rowsStr)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDBQuerySearchLikeEmptyDict(t *testing.T) {
|
||||
_, cfg := newTestDB(t)
|
||||
// Empty search_like dict should be a no-op
|
||||
_, err := execScript(t, cfg, `rows = db.query("logs", search_like={})`)
|
||||
if err != nil {
|
||||
t.Fatalf("empty search_like dict should not error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDBQuerySearchLikeInvalidColumn(t *testing.T) {
|
||||
_, cfg := newTestDB(t)
|
||||
_, err := execScript(t, cfg, `rows = db.query("logs", search_like={"bad name": "%x%"})`)
|
||||
if err == nil {
|
||||
t.Fatal("expected error for invalid column name in search_like")
|
||||
}
|
||||
if !strings.Contains(err.Error(), "invalid column name") {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user