111 lines
3.6 KiB
Smarty
111 lines
3.6 KiB
Smarty
{{- if .Table.IsJoinTable -}}
|
|
{{- else -}}
|
|
{{- $dot := . }}
|
|
{{- $table := .Table }}
|
|
{{- range .Table.ToManyRelationships -}}
|
|
{{- $txt := txtsFromToMany $dot.Tables $table .}}
|
|
{{- $varNameSingular := .Table | singular | camelCase -}}
|
|
{{- $foreignVarNameSingular := .ForeignTable | singular | camelCase -}}
|
|
func test{{$txt.LocalTable.NameGo}}ToMany{{$txt.Function.Name}}(t *testing.T) {
|
|
var err error
|
|
tx := MustTx(boil.Begin())
|
|
defer tx.Rollback()
|
|
|
|
var a {{$txt.LocalTable.NameGo}}
|
|
var b, c {{$txt.ForeignTable.NameGo}}
|
|
|
|
seed := randomize.NewSeed()
|
|
if err = randomize.Struct(seed, &a, {{$varNameSingular}}DBTypes, true, {{$varNameSingular}}ColumnsWithDefault...); err != nil {
|
|
t.Errorf("Unable to randomize {{$txt.LocalTable.NameGo}} struct: %s", err)
|
|
}
|
|
|
|
if err := a.Insert(tx); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
randomize.Struct(seed, &b, {{$foreignVarNameSingular}}DBTypes, false, {{$foreignVarNameSingular}}ColumnsWithDefault...)
|
|
randomize.Struct(seed, &c, {{$foreignVarNameSingular}}DBTypes, false, {{$foreignVarNameSingular}}ColumnsWithDefault...)
|
|
{{if .Nullable -}}
|
|
a.{{.Column | titleCase}}.Valid = true
|
|
{{- end}}
|
|
{{- if .ForeignColumnNullable -}}
|
|
b.{{.ForeignColumn | titleCase}}.Valid = true
|
|
c.{{.ForeignColumn | titleCase}}.Valid = true
|
|
{{- end}}
|
|
{{if not .ToJoinTable -}}
|
|
b.{{$txt.Function.ForeignAssignment}} = a.{{$txt.Function.LocalAssignment}}
|
|
c.{{$txt.Function.ForeignAssignment}} = a.{{$txt.Function.LocalAssignment}}
|
|
{{- end}}
|
|
if err = b.Insert(tx); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err = c.Insert(tx); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
{{if .ToJoinTable -}}
|
|
_, err = tx.Exec("insert into {{.JoinTable | $dot.SchemaTable}} ({{.JoinLocalColumn | $dot.Quotes}}, {{.JoinForeignColumn | $dot.Quotes}}) values {{if $dot.Dialect.IndexPlaceholders}}($1, $2){{else}}(?, ?){{end}}", a.{{$txt.LocalTable.ColumnNameGo}}, b.{{$txt.ForeignTable.ColumnNameGo}})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
_, err = tx.Exec("insert into {{.JoinTable | $dot.SchemaTable}} ({{.JoinLocalColumn | $dot.Quotes}}, {{.JoinForeignColumn | $dot.Quotes}}) values {{if $dot.Dialect.IndexPlaceholders}}($1, $2){{else}}(?, ?){{end}}", a.{{$txt.LocalTable.ColumnNameGo}}, c.{{$txt.ForeignTable.ColumnNameGo}})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
{{end}}
|
|
|
|
{{$varname := .ForeignTable | singular | camelCase -}}
|
|
{{$varname}}, err := a.{{$txt.Function.Name}}(tx).All()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
bFound, cFound := false, false
|
|
for _, v := range {{$varname}} {
|
|
{{if $txt.Function.UsesBytes -}}
|
|
if 0 == bytes.Compare(v.{{$txt.Function.ForeignAssignment}}, b.{{$txt.Function.ForeignAssignment}}) {
|
|
bFound = true
|
|
}
|
|
if 0 == bytes.Compare(v.{{$txt.Function.ForeignAssignment}}, c.{{$txt.Function.ForeignAssignment}}) {
|
|
cFound = true
|
|
}
|
|
{{else -}}
|
|
if v.{{$txt.Function.ForeignAssignment}} == b.{{$txt.Function.ForeignAssignment}} {
|
|
bFound = true
|
|
}
|
|
if v.{{$txt.Function.ForeignAssignment}} == c.{{$txt.Function.ForeignAssignment}} {
|
|
cFound = true
|
|
}
|
|
{{end -}}
|
|
}
|
|
|
|
if !bFound {
|
|
t.Error("expected to find b")
|
|
}
|
|
if !cFound {
|
|
t.Error("expected to find c")
|
|
}
|
|
|
|
slice := {{$txt.LocalTable.NameGo}}Slice{&a}
|
|
if err = a.L.Load{{$txt.Function.Name}}(tx, false, &slice); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := len(a.R.{{$txt.Function.Name}}); got != 2 {
|
|
t.Error("number of eager loaded records wrong, got:", got)
|
|
}
|
|
|
|
a.R.{{$txt.Function.Name}} = nil
|
|
if err = a.L.Load{{$txt.Function.Name}}(tx, true, &a); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := len(a.R.{{$txt.Function.Name}}); got != 2 {
|
|
t.Error("number of eager loaded records wrong, got:", got)
|
|
}
|
|
|
|
if t.Failed() {
|
|
t.Logf("%#v", {{$varname}})
|
|
}
|
|
}
|
|
|
|
{{end -}}{{- /* range */ -}}
|
|
{{- end -}}{{- /* outer if join table */ -}}
|