github.com/Ali-iotechsys/sqlboiler/v4@v4.0.0-20221208124957-6aec9a5f1f71/templates/test/relationship_to_many.go.tpl (about)

     1  {{- if .Table.IsJoinTable -}}
     2  {{- else -}}
     3  	{{- $table := .Table }}
     4  	{{- range $rel := .Table.ToManyRelationships -}}
     5  		{{- $ltable := $.Aliases.Table $rel.Table -}}
     6  		{{- $ftable := $.Aliases.Table $rel.ForeignTable -}}
     7  		{{- $relAlias := $.Aliases.ManyRelationship $rel.ForeignTable $rel.Name $rel.JoinTable $rel.JoinLocalFKeyName -}}
     8  		{{- $colField := $ltable.Column $rel.Column -}}
     9  		{{- $fcolField := $ftable.Column $rel.ForeignColumn -}}
    10  		{{- $usesPrimitives := usesPrimitives $.Tables $rel.Table $rel.Column $rel.ForeignTable $rel.ForeignColumn -}}
    11  		{{- $schemaForeignTable := .ForeignTable | $.SchemaTable }}
    12  func test{{$ltable.UpSingular}}ToMany{{$relAlias.Local}}(t *testing.T) {
    13  	var err error
    14  	{{if not $.NoContext}}ctx := context.Background(){{end}}
    15  	tx := MustTx({{if $.NoContext}}boil.Begin(){{else}}boil.BeginTx(ctx, nil){{end}})
    16  	defer func() { _ = tx.Rollback() }()
    17  
    18  	var a {{$ltable.UpSingular}}
    19  	var b, c {{$ftable.UpSingular}}
    20  
    21  	seed := randomize.NewSeed()
    22  	if err = randomize.Struct(seed, &a, {{$ltable.DownSingular}}DBTypes, true, {{$ltable.DownSingular}}ColumnsWithDefault...); err != nil {
    23  		t.Errorf("Unable to randomize {{$ltable.UpSingular}} struct: %s", err)
    24  	}
    25  
    26  	if err := a.Insert({{if not $.NoContext}}ctx, {{end -}} tx, boil.Infer()); err != nil {
    27  		t.Fatal(err)
    28  	}
    29  
    30  	if err = randomize.Struct(seed, &b, {{$ftable.DownSingular}}DBTypes, false, {{$ftable.DownSingular}}ColumnsWithDefault...); err != nil {
    31  		t.Fatal(err)
    32  	}
    33  	if err = randomize.Struct(seed, &c, {{$ftable.DownSingular}}DBTypes, false, {{$ftable.DownSingular}}ColumnsWithDefault...); err != nil {
    34  		t.Fatal(err)
    35  	}
    36  
    37  	{{if not .ToJoinTable -}}
    38  		{{if $usesPrimitives}}
    39  	b.{{$fcolField}} = a.{{$colField}}
    40  	c.{{$fcolField}} = a.{{$colField}}
    41  		{{else -}}
    42  	queries.Assign(&b.{{$fcolField}}, a.{{$colField}})
    43  	queries.Assign(&c.{{$fcolField}}, a.{{$colField}})
    44  		{{- end}}
    45  	{{- end}}
    46  	if err = b.Insert({{if not $.NoContext}}ctx, {{end -}} tx, boil.Infer()); err != nil {
    47  		t.Fatal(err)
    48  	}
    49  	if err = c.Insert({{if not $.NoContext}}ctx, {{end -}} tx, boil.Infer()); err != nil {
    50  		t.Fatal(err)
    51  	}
    52  
    53  	{{if .ToJoinTable -}}
    54  	_, err = tx.Exec("insert into {{.JoinTable | $.SchemaTable}} ({{.JoinLocalColumn | $.Quotes}}, {{.JoinForeignColumn | $.Quotes}}) values {{if $.Dialect.UseIndexPlaceholders}}($1, $2){{else}}(?, ?){{end}}", a.{{$colField}}, b.{{$fcolField}})
    55  	if err != nil {
    56  		t.Fatal(err)
    57  	}
    58  	_, err = tx.Exec("insert into {{.JoinTable | $.SchemaTable}} ({{.JoinLocalColumn | $.Quotes}}, {{.JoinForeignColumn | $.Quotes}}) values {{if $.Dialect.UseIndexPlaceholders}}($1, $2){{else}}(?, ?){{end}}", a.{{$colField}}, c.{{$fcolField}})
    59  	if err != nil {
    60  		t.Fatal(err)
    61  	}
    62  	{{end}}
    63  
    64  	check, err := a.{{$relAlias.Local}}().All({{if not $.NoContext}}ctx, {{end -}} tx)
    65  	if err != nil {
    66  		t.Fatal(err)
    67  	}
    68  
    69  	bFound, cFound := false, false
    70  	for _, v := range check {
    71  		{{if $usesPrimitives -}}
    72  		if v.{{$fcolField}} == b.{{$fcolField}} {
    73  			bFound = true
    74  		}
    75  		if v.{{$fcolField}} == c.{{$fcolField}} {
    76  			cFound = true
    77  		}
    78  		{{else -}}
    79  		if queries.Equal(v.{{$fcolField}}, b.{{$fcolField}}) {
    80  			bFound = true
    81  		}
    82  		if queries.Equal(v.{{$fcolField}}, c.{{$fcolField}}) {
    83  			cFound = true
    84  		}
    85  		{{end -}}
    86  	}
    87  
    88  	if !bFound {
    89  		t.Error("expected to find b")
    90  	}
    91  	if !cFound {
    92  		t.Error("expected to find c")
    93  	}
    94  
    95  	slice := {{$ltable.UpSingular}}Slice{&a}
    96  	if err = a.L.Load{{$relAlias.Local}}({{if not $.NoContext}}ctx, {{end -}} tx, false, (*[]*{{$ltable.UpSingular}})(&slice), nil); err != nil {
    97  		t.Fatal(err)
    98  	}
    99  	if got := len(a.R.{{$relAlias.Local}}); got != 2 {
   100  		t.Error("number of eager loaded records wrong, got:", got)
   101  	}
   102  
   103  	a.R.{{$relAlias.Local}} = nil
   104  	if err = a.L.Load{{$relAlias.Local}}({{if not $.NoContext}}ctx, {{end -}} tx, true, &a, nil); err != nil {
   105  		t.Fatal(err)
   106  	}
   107  	if got := len(a.R.{{$relAlias.Local}}); got != 2 {
   108  		t.Error("number of eager loaded records wrong, got:", got)
   109  	}
   110  
   111  	if t.Failed() {
   112  		t.Logf("%#v", check)
   113  	}
   114  }
   115  
   116  {{end -}}{{- /* range */ -}}
   117  {{- end -}}{{- /* outer if join table */ -}}