2016-08-15 11:36:38 +02:00
|
|
|
// This test suite runs each operation test in parallel.
|
|
|
|
// Example, if your database has 3 tables, the suite will run:
|
|
|
|
// table1, table2 and table3 Delete in parallel
|
|
|
|
// table1, table2 and table3 Insert in parallel, and so forth.
|
|
|
|
// It does NOT run each operation group in parallel.
|
|
|
|
// Separating the tests thusly grants avoidance of Postgres deadlocks.
|
2016-08-16 06:07:15 +02:00
|
|
|
func TestParent(t *testing.T) {
|
2016-08-15 11:36:38 +02:00
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
t.Run("{{$tableName}}", test{{$tableName}})
|
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestDelete(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}Delete)
|
2016-08-16 06:07:15 +02:00
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestQueryDeleteAll(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
2016-08-15 11:36:38 +02:00
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}QueryDeleteAll)
|
2016-08-16 06:07:15 +02:00
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSliceDeleteAll(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
2016-08-15 11:36:38 +02:00
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}SliceDeleteAll)
|
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestExists(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}Exists)
|
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestFind(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}Find)
|
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
2016-08-16 06:07:15 +02:00
|
|
|
func TestBind(t *testing.T) {
|
2016-08-15 11:36:38 +02:00
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}Bind)
|
2016-08-16 06:07:15 +02:00
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestOne(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
2016-08-15 11:36:38 +02:00
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}One)
|
2016-08-16 06:07:15 +02:00
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestAll(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
2016-08-15 11:36:38 +02:00
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}All)
|
2016-08-16 06:07:15 +02:00
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCount(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
2016-08-15 11:36:38 +02:00
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}Count)
|
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
2016-08-28 12:48:50 +02:00
|
|
|
{{if eq .NoHooks false -}}
|
2016-08-15 11:36:38 +02:00
|
|
|
func TestHooks(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}Hooks)
|
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
2016-08-28 12:48:50 +02:00
|
|
|
{{- end}}
|
2016-08-15 11:36:38 +02:00
|
|
|
|
|
|
|
func TestInsert(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}Insert)
|
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}InsertWhitelist)
|
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
2016-08-27 07:04:49 +02:00
|
|
|
// TestToOne tests cannot be run in parallel
|
|
|
|
// or deadlocks can occur.
|
|
|
|
func TestToOne(t *testing.T) {
|
|
|
|
{{- $dot := . -}}
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- range $table.FKeys -}}
|
2016-09-18 19:34:07 +02:00
|
|
|
{{- $txt := txtsFromFKey $dot.Tables $table . -}}
|
|
|
|
t.Run("{{$txt.LocalTable.NameGo}}To{{$txt.ForeignTable.NameGo}}_{{$txt.Function.Name}}", test{{$txt.LocalTable.NameGo}}ToOne{{$txt.ForeignTable.NameGo}}_{{$txt.Function.Name}})
|
2016-08-27 07:04:49 +02:00
|
|
|
{{end -}}{{- /* fkey range */ -}}
|
|
|
|
{{- end -}}{{- /* if join table */ -}}
|
|
|
|
{{- end -}}{{- /* tables range */ -}}
|
|
|
|
}
|
|
|
|
|
2016-09-18 19:34:07 +02:00
|
|
|
// TestOneToOne tests cannot be run in parallel
|
|
|
|
// or deadlocks can occur.
|
|
|
|
func TestOneToOne(t *testing.T) {
|
|
|
|
{{- $dot := .}}
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- range $table.ToOneRelationships -}}
|
|
|
|
{{- $txt := txtsFromOneToOne $dot.Tables $table . -}}
|
|
|
|
t.Run("{{$txt.LocalTable.NameGo}}ToMany{{$txt.Function.Name}}", test{{$txt.LocalTable.NameGo}}ToMany{{$txt.Function.Name}})
|
|
|
|
{{- end -}}{{- /* range */ -}}
|
|
|
|
{{- end -}}{{- /* outer if join table */ -}}
|
|
|
|
{{- end -}}{{- /* outer tables range */ -}}
|
|
|
|
}
|
|
|
|
|
2016-08-17 06:54:36 +02:00
|
|
|
// TestToMany tests cannot be run in parallel
|
2016-08-27 07:04:49 +02:00
|
|
|
// or deadlocks can occur.
|
2016-08-17 06:54:36 +02:00
|
|
|
func TestToMany(t *testing.T) {
|
2016-08-15 11:36:38 +02:00
|
|
|
{{- $dot := .}}
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- range $table.ToManyRelationships -}}
|
2016-09-18 19:34:07 +02:00
|
|
|
{{- $txt := txtsFromToMany $dot.Tables $table . -}}
|
|
|
|
t.Run("{{$txt.LocalTable.NameGo}}ToMany{{$txt.Function.Name}}", test{{$txt.LocalTable.NameGo}}ToMany{{$txt.Function.Name}})
|
2016-08-15 11:36:38 +02:00
|
|
|
{{- end -}}{{- /* range */ -}}
|
|
|
|
{{- end -}}{{- /* outer if join table */ -}}
|
|
|
|
{{- end -}}{{- /* outer tables range */ -}}
|
|
|
|
}
|
|
|
|
|
2016-08-27 07:04:49 +02:00
|
|
|
// TestToOneSet tests cannot be run in parallel
|
|
|
|
// or deadlocks can occur.
|
|
|
|
func TestToOneSet(t *testing.T) {
|
2016-08-17 06:54:36 +02:00
|
|
|
{{- $dot := . -}}
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- range $table.FKeys -}}
|
2016-09-18 19:34:07 +02:00
|
|
|
{{- $txt := txtsFromFKey $dot.Tables $table . -}}
|
|
|
|
t.Run("{{$txt.LocalTable.NameGo}}To{{$txt.ForeignTable.NameGo}}_{{$txt.Function.Name}}", test{{$txt.LocalTable.NameGo}}ToOneSetOp{{$txt.ForeignTable.NameGo}}_{{$txt.Function.Name}})
|
2016-08-17 06:54:36 +02:00
|
|
|
{{end -}}{{- /* fkey range */ -}}
|
|
|
|
{{- end -}}{{- /* if join table */ -}}
|
|
|
|
{{- end -}}{{- /* tables range */ -}}
|
|
|
|
}
|
|
|
|
|
2016-08-27 07:04:49 +02:00
|
|
|
// TestToOneRemove tests cannot be run in parallel
|
|
|
|
// or deadlocks can occur.
|
|
|
|
func TestToOneRemove(t *testing.T) {
|
|
|
|
{{- $dot := . -}}
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- range $table.FKeys -}}
|
2016-09-18 19:34:07 +02:00
|
|
|
{{- $txt := txtsFromFKey $dot.Tables $table . -}}
|
|
|
|
{{- if $txt.ForeignKey.Nullable -}}
|
|
|
|
t.Run("{{$txt.LocalTable.NameGo}}To{{$txt.ForeignTable.NameGo}}_{{$txt.Function.Name}}", test{{$txt.LocalTable.NameGo}}ToOneRemoveOp{{$txt.ForeignTable.NameGo}}_{{$txt.Function.Name}})
|
2016-08-27 07:04:49 +02:00
|
|
|
{{end -}}{{- /* if foreign key nullable */ -}}
|
|
|
|
{{- end -}}{{- /* fkey range */ -}}
|
|
|
|
{{- end -}}{{- /* if join table */ -}}
|
|
|
|
{{- end -}}{{- /* tables range */ -}}
|
|
|
|
}
|
|
|
|
|
2016-09-18 19:34:07 +02:00
|
|
|
// TestOneToOneSet tests cannot be run in parallel
|
|
|
|
// or deadlocks can occur.
|
|
|
|
func TestOneToOneSet(t *testing.T) {
|
|
|
|
{{- $dot := .}}
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- range $table.ToOneRelationships -}}
|
|
|
|
{{- if not .ForeignColumnNullable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $txt := textsFrom $dot.Tables $table . -}}
|
|
|
|
t.Run("{{$txt.LocalTable.NameGo}}To{{$txt.Function.Name}}", test{{$txt.LocalTable.NameGo}}OneToOneSetOp{{$txt.Function.Name}})
|
|
|
|
{{- end -}}{{- /* if foreign column nullable */ -}}
|
|
|
|
{{- end -}}{{- /* range */ -}}
|
|
|
|
{{- end -}}{{- /* outer if join table */ -}}
|
|
|
|
{{- end -}}{{- /* outer tables range */ -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
// TestOneToOneRemove tests cannot be run in parallel
|
|
|
|
// or deadlocks can occur.
|
|
|
|
func TestOneToOneRemove(t *testing.T) {
|
|
|
|
{{- $dot := .}}
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- range $table.OneToOneRelationships -}}
|
|
|
|
{{- if not .ForeignColumnNullable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $txt := txtsFromOneToOne $dot.Tables $table . -}}
|
|
|
|
t.Run("{{$txt.LocalTable.NameGo}}To{{$txt.Function.Name}}", test{{$txt.LocalTable.NameGo}}OneToOneRemoveOp{{$txt.Function.Name}})
|
|
|
|
{{- end -}}{{- /* if foreign column nullable */ -}}
|
|
|
|
{{- end -}}{{- /* range */ -}}
|
|
|
|
{{- end -}}{{- /* outer if join table */ -}}
|
|
|
|
{{- end -}}{{- /* outer tables range */ -}}
|
|
|
|
}
|
|
|
|
|
2016-08-27 07:04:49 +02:00
|
|
|
// TestToManyAdd tests cannot be run in parallel
|
|
|
|
// or deadlocks can occur.
|
|
|
|
func TestToManyAdd(t *testing.T) {
|
|
|
|
{{- $dot := .}}
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- range $table.ToManyRelationships -}}
|
2016-09-18 19:34:07 +02:00
|
|
|
{{- $txt := txtsFromToMany $dot.Tables $table . -}}
|
|
|
|
t.Run("{{$txt.LocalTable.NameGo}}To{{$txt.Function.Name}}", test{{$txt.LocalTable.NameGo}}ToManyAddOp{{$txt.Function.Name}})
|
2016-08-27 07:04:49 +02:00
|
|
|
{{- end -}}{{- /* range */ -}}
|
|
|
|
{{- end -}}{{- /* outer if join table */ -}}
|
|
|
|
{{- end -}}{{- /* outer tables range */ -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
// TestToManySet tests cannot be run in parallel
|
|
|
|
// or deadlocks can occur.
|
|
|
|
func TestToManySet(t *testing.T) {
|
|
|
|
{{- $dot := .}}
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- range $table.ToManyRelationships -}}
|
|
|
|
{{- if not .ForeignColumnNullable -}}
|
|
|
|
{{- else -}}
|
2016-09-18 19:34:07 +02:00
|
|
|
{{- $txt := txtsFromToMany $dot.Tables $table . -}}
|
|
|
|
t.Run("{{$txt.LocalTable.NameGo}}To{{$txt.Function.Name}}", test{{$txt.LocalTable.NameGo}}ToManySetOp{{$txt.Function.Name}})
|
2016-08-27 07:04:49 +02:00
|
|
|
{{- end -}}{{- /* if foreign column nullable */ -}}
|
|
|
|
{{- end -}}{{- /* range */ -}}
|
|
|
|
{{- end -}}{{- /* outer if join table */ -}}
|
|
|
|
{{- end -}}{{- /* outer tables range */ -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
// TestToManyRemove tests cannot be run in parallel
|
|
|
|
// or deadlocks can occur.
|
|
|
|
func TestToManyRemove(t *testing.T) {
|
|
|
|
{{- $dot := .}}
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- range $table.ToManyRelationships -}}
|
|
|
|
{{- if not .ForeignColumnNullable -}}
|
|
|
|
{{- else -}}
|
2016-09-18 19:34:07 +02:00
|
|
|
{{- $txt := txtsFromToMany $dot.Tables $table . -}}
|
|
|
|
t.Run("{{$txt.LocalTable.NameGo}}To{{$txt.Function.Name}}", test{{$txt.LocalTable.NameGo}}ToManyRemoveOp{{$txt.Function.Name}})
|
2016-08-27 07:04:49 +02:00
|
|
|
{{- end -}}{{- /* if foreign column nullable */ -}}
|
|
|
|
{{- end -}}{{- /* range */ -}}
|
|
|
|
{{- end -}}{{- /* outer if join table */ -}}
|
|
|
|
{{- end -}}{{- /* outer tables range */ -}}
|
|
|
|
}
|
|
|
|
|
2016-08-15 11:36:38 +02:00
|
|
|
func TestReload(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}Reload)
|
2016-08-16 06:07:15 +02:00
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestReloadAll(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
2016-08-15 11:36:38 +02:00
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}ReloadAll)
|
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSelect(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}Select)
|
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestUpdate(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}Update)
|
2016-08-16 06:07:15 +02:00
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSliceUpdateAll(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
2016-08-15 11:36:38 +02:00
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}SliceUpdateAll)
|
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestUpsert(t *testing.T) {
|
|
|
|
{{- range $index, $table := .Tables}}
|
|
|
|
{{- if $table.IsJoinTable -}}
|
|
|
|
{{- else -}}
|
|
|
|
{{- $tableName := $table.Name | plural | titleCase -}}
|
|
|
|
t.Run("{{$tableName}}", test{{$tableName}}Upsert)
|
|
|
|
{{end -}}
|
|
|
|
{{- end -}}
|
|
|
|
}
|