68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
package db_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"allaboutapps.dev/aw/go-starter/internal/models"
|
|
"allaboutapps.dev/aw/go-starter/internal/test"
|
|
"allaboutapps.dev/aw/go-starter/internal/util/db"
|
|
"github.com/aarondl/sqlboiler/v4/queries"
|
|
"github.com/aarondl/sqlboiler/v4/queries/qm"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestOr(t *testing.T) {
|
|
age := 42
|
|
filter := UserFilter{
|
|
Name: Name{
|
|
PublicName: PublicName{
|
|
First: "Max",
|
|
},
|
|
MiddleName: "Gustav",
|
|
Lastname: "Muster",
|
|
},
|
|
Country: "Austria",
|
|
City: "Vienna",
|
|
Scopes: []string{"app", "user_info"},
|
|
Age: &age,
|
|
}
|
|
|
|
qms := []qm.QueryMod{
|
|
qm.Where("id = ?", 123),
|
|
qm.Where("username = ?", "max.muster@example.org"),
|
|
db.WhereJSON("users", "profile", filter),
|
|
}
|
|
sql, args := buildOrQuery(t, qms)
|
|
|
|
test.Snapshoter.Label("SQL").Save(t, sql)
|
|
test.Snapshoter.Label("Args").Save(t, args...)
|
|
}
|
|
|
|
func TestOrSingle(t *testing.T) {
|
|
q := qm.Where("username = ?", "max.muster@example.org")
|
|
qms := db.CombineWithOr([]qm.QueryMod{q})
|
|
require.Len(t, qms, 1)
|
|
assert.Equal(t, q, qms[0])
|
|
}
|
|
|
|
func TestOrEmpty(t *testing.T) {
|
|
qms := db.CombineWithOr([]qm.QueryMod{})
|
|
assert.Empty(t, qms)
|
|
|
|
qms = db.CombineWithOr(nil)
|
|
assert.Empty(t, qms)
|
|
}
|
|
|
|
func buildOrQuery(t *testing.T, qms []qm.QueryMod) (string, []interface{}) {
|
|
t.Helper()
|
|
|
|
o := db.CombineWithOr(qms)
|
|
require.NotEmpty(t, o)
|
|
|
|
o = append(o, qm.Select("*"), qm.From("users"))
|
|
q := models.NewQuery(o...)
|
|
|
|
return queries.BuildQuery(q)
|
|
}
|