(Feat): Initial Commit
Some checks failed
Build & Test / build-test (push) Has been cancelled
Build & Test / swagger-codegen-cli (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled

This commit is contained in:
2026-07-03 19:41:31 +05:30
commit 7e940c83a7
461 changed files with 45002 additions and 0 deletions

View File

@@ -0,0 +1,205 @@
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/require"
)
func TestWhereJSONStruct(t *testing.T) {
age := 42
filter := struct {
First string `json:"firstName"`
MiddleName string `json:"-"`
Lastname string `json:"lastName"`
Country string `json:"country"`
City string
Scopes []string `json:"scopes"`
Age *int `json:"age"`
Height *float32 `json:"height"`
PhoneNumbers *[2]string `json:"phoneNumbers"`
Addresses []string `json:"addresses"`
}{
First: "Max",
MiddleName: "Gustav",
Lastname: "Muster",
Country: "Austria",
City: "Vienna",
Scopes: []string{"app", "user_info"},
Age: &age,
PhoneNumbers: &[2]string{
"+1 206 555 0100",
"+44 113 496 0000",
},
}
sql, args := buildWhereJSONQuery(t, filter)
test.Snapshoter.Label("SQL").Save(t, sql)
test.Snapshoter.Label("Args").Save(t, args...)
}
func TestWhereJSONStructComposition(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,
}
sql, args := buildWhereJSONQuery(t, filter)
test.Snapshoter.Label("SQL").Save(t, sql)
test.Snapshoter.Label("Args").Save(t, args...)
}
func TestWhereJSONString(t *testing.T) {
sql, args := buildWhereJSONQuery(t, "https://example.org/users/123/profile")
test.Snapshoter.Label("SQL").Save(t, sql)
test.Snapshoter.Label("Args").Save(t, args...)
}
func TestWhereJSONPanicEmptyResult(t *testing.T) {
type privateName struct {
First string `json:"firstName"`
MiddleName string `json:"-"`
Lastname string `json:"lastName"`
}
filter := struct {
privateName
City string
}{
privateName: privateName{
First: "Max",
MiddleName: "Gustav",
Lastname: "Muster",
},
City: "Vienna",
}
panicFunc := func() {
db.WhereJSON("users", "profile", filter)
}
require.PanicsWithError(t, "filter resulted in empty query", panicFunc)
}
func TestWhereJSONPanicInvalidFilterType(t *testing.T) {
panicFunc := func() {
db.WhereJSON("users", "profile", 1)
}
require.PanicsWithError(t, "invalid filter type int", panicFunc)
}
func TestWhereJSONPanicRecursion(t *testing.T) {
type A struct {
One string `json:"one"`
}
type B struct {
A
Two string `json:"two"`
}
type C struct {
B
Three string `json:"three"`
}
type D struct {
C
Four string `json:"four"`
}
type E struct {
D
Five string `json:"five"`
}
type F struct {
E
Six string `json:"six"`
}
type G struct {
F
Seven string `json:"seven"`
}
type H struct {
G
Eight string `json:"eight"`
}
type I struct {
H
Nine string `json:"nine"`
}
type J struct {
I
Ten string `json:"ten"`
}
filter := struct {
J
Country string `json:"country"`
}{
J: J{
I: I{
H: H{
G: G{
F: F{
E: E{
D: D{
C: C{
B: B{
A: A{
One: "1",
},
Two: "2",
},
Three: "3",
},
Four: "4",
},
Five: "5",
},
Six: "6",
},
Seven: "7",
},
Eight: "8",
},
Nine: "9",
},
Ten: "10",
},
Country: "Austria",
}
panicFunc := func() {
db.WhereJSON("users", "profile", filter)
}
require.PanicsWithError(t, "whereJSON reached maximum recursion (10/10)", panicFunc)
}
func buildWhereJSONQuery(t *testing.T, filter interface{}) (string, []interface{}) {
t.Helper()
query := models.NewQuery(
qm.Select("*"),
qm.From("users"),
db.WhereJSON("users", "profile", filter),
)
return queries.BuildQuery(query)
}