223 lines
4.9 KiB
Go
223 lines
4.9 KiB
Go
// Copyright 2017 The Xorm Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package xorm
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestBelongsTo_Get(t *testing.T) {
|
|
assert.NoError(t, prepareEngine())
|
|
|
|
type Face struct {
|
|
Id int64
|
|
Name string
|
|
}
|
|
|
|
type Nose struct {
|
|
Id int64
|
|
Face Face `xorm:"belongs_to"`
|
|
}
|
|
|
|
err := testEngine.Sync2(new(Nose), new(Face))
|
|
assert.NoError(t, err)
|
|
|
|
var face = Face{
|
|
Name: "face1",
|
|
}
|
|
_, err = testEngine.Insert(&face)
|
|
assert.NoError(t, err)
|
|
|
|
var cfgFace Face
|
|
has, err := testEngine.Get(&cfgFace)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, true, has)
|
|
assert.Equal(t, face, cfgFace)
|
|
|
|
var nose = Nose{Face: face}
|
|
_, err = testEngine.Insert(&nose)
|
|
assert.NoError(t, err)
|
|
|
|
var cfgNose Nose
|
|
has, err = testEngine.Get(&cfgNose)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, true, has)
|
|
assert.Equal(t, nose.Id, cfgNose.Id)
|
|
assert.Equal(t, nose.Face.Id, cfgNose.Face.Id)
|
|
assert.Equal(t, "", cfgNose.Face.Name)
|
|
|
|
err = testEngine.EagerLoad(&cfgNose)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, nose.Id, cfgNose.Id)
|
|
assert.Equal(t, nose.Face.Id, cfgNose.Face.Id)
|
|
assert.Equal(t, "face1", cfgNose.Face.Name)
|
|
|
|
var cfgNose2 Nose
|
|
has, err = testEngine.Cascade().Get(&cfgNose2)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, true, has)
|
|
assert.Equal(t, nose.Id, cfgNose2.Id)
|
|
assert.Equal(t, nose.Face.Id, cfgNose2.Face.Id)
|
|
assert.Equal(t, "face1", cfgNose2.Face.Name)
|
|
}
|
|
|
|
func TestBelongsTo_GetPtr(t *testing.T) {
|
|
assert.NoError(t, prepareEngine())
|
|
|
|
type Face struct {
|
|
Id int64
|
|
Name string
|
|
}
|
|
|
|
type Nose struct {
|
|
Id int64
|
|
Face *Face `xorm:"belongs_to"`
|
|
}
|
|
|
|
err := testEngine.Sync2(new(Nose), new(Face))
|
|
assert.NoError(t, err)
|
|
|
|
var face = Face{
|
|
Name: "face1",
|
|
}
|
|
_, err = testEngine.Insert(&face)
|
|
assert.NoError(t, err)
|
|
|
|
var cfgFace Face
|
|
has, err := testEngine.Get(&cfgFace)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, true, has)
|
|
assert.Equal(t, face, cfgFace)
|
|
|
|
var nose = Nose{Face: &face}
|
|
_, err = testEngine.Insert(&nose)
|
|
assert.NoError(t, err)
|
|
|
|
var cfgNose Nose
|
|
has, err = testEngine.Get(&cfgNose)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, true, has)
|
|
assert.Equal(t, nose.Id, cfgNose.Id)
|
|
assert.Equal(t, nose.Face.Id, cfgNose.Face.Id)
|
|
|
|
err = testEngine.EagerLoad(&cfgNose)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, nose.Id, cfgNose.Id)
|
|
assert.Equal(t, nose.Face.Id, cfgNose.Face.Id)
|
|
assert.Equal(t, "face1", cfgNose.Face.Name)
|
|
|
|
var cfgNose2 Nose
|
|
has, err = testEngine.Cascade().Get(&cfgNose2)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, true, has)
|
|
assert.Equal(t, nose.Id, cfgNose2.Id)
|
|
assert.Equal(t, nose.Face.Id, cfgNose2.Face.Id)
|
|
assert.Equal(t, "face1", cfgNose2.Face.Name)
|
|
}
|
|
|
|
func TestBelongsTo_Find(t *testing.T) {
|
|
assert.NoError(t, prepareEngine())
|
|
|
|
type Face struct {
|
|
Id int64
|
|
Name string
|
|
}
|
|
|
|
type Nose struct {
|
|
Id int64
|
|
Face Face `xorm:"belongs_to"`
|
|
}
|
|
|
|
err := testEngine.Sync2(new(Nose), new(Face))
|
|
assert.NoError(t, err)
|
|
|
|
var face1 = Face{
|
|
Name: "face1",
|
|
}
|
|
var face2 = Face{
|
|
Name: "face2",
|
|
}
|
|
_, err = testEngine.Insert(&face1, &face2)
|
|
assert.NoError(t, err)
|
|
|
|
var noses = []Nose{
|
|
{Face: face1},
|
|
{Face: face2},
|
|
}
|
|
_, err = testEngine.Insert(&noses)
|
|
assert.NoError(t, err)
|
|
|
|
var noses1 []Nose
|
|
err = testEngine.Find(&noses1)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 2, len(noses1))
|
|
assert.Equal(t, face1.Id, noses1[0].Face.Id)
|
|
assert.Equal(t, face2.Id, noses1[1].Face.Id)
|
|
assert.Equal(t, "", noses1[0].Face.Name)
|
|
assert.Equal(t, "", noses1[1].Face.Name)
|
|
|
|
var noses2 []Nose
|
|
err = testEngine.Cascade().Find(&noses2)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 2, len(noses2))
|
|
assert.Equal(t, face1.Id, noses2[0].Face.Id)
|
|
assert.Equal(t, face2.Id, noses2[1].Face.Id)
|
|
assert.Equal(t, "face1", noses2[0].Face.Name)
|
|
assert.Equal(t, "face2", noses2[1].Face.Name)
|
|
}
|
|
|
|
func TestBelongsTo_FindPtr(t *testing.T) {
|
|
assert.NoError(t, prepareEngine())
|
|
|
|
type Face struct {
|
|
Id int64
|
|
Name string
|
|
}
|
|
|
|
type Nose struct {
|
|
Id int64
|
|
Face *Face `xorm:"belongs_to"`
|
|
}
|
|
|
|
err := testEngine.Sync2(new(Nose), new(Face))
|
|
assert.NoError(t, err)
|
|
|
|
var face1 = Face{
|
|
Name: "face1",
|
|
}
|
|
var face2 = Face{
|
|
Name: "face2",
|
|
}
|
|
_, err = testEngine.Insert(&face1, &face2)
|
|
assert.NoError(t, err)
|
|
|
|
var noses = []Nose{
|
|
{Face: &face1},
|
|
{Face: &face2},
|
|
}
|
|
_, err = testEngine.Insert(&noses)
|
|
assert.NoError(t, err)
|
|
|
|
var noses1 []Nose
|
|
err = testEngine.Find(&noses1)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 2, len(noses1))
|
|
assert.Equal(t, face1.Id, noses1[0].Face.Id)
|
|
assert.Equal(t, face2.Id, noses1[1].Face.Id)
|
|
assert.Equal(t, "", noses1[0].Face.Name)
|
|
assert.Equal(t, "", noses1[1].Face.Name)
|
|
|
|
var noses2 []Nose
|
|
err = testEngine.Cascade().Find(&noses2)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 2, len(noses2))
|
|
assert.Equal(t, face1.Id, noses2[0].Face.Id)
|
|
assert.Equal(t, face2.Id, noses2[1].Face.Id)
|
|
assert.Equal(t, "face1", noses2[0].Face.Name)
|
|
assert.Equal(t, "face2", noses2[1].Face.Name)
|
|
}
|