// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.

package dal

import (
	"app/internal/models"
	"context"
	"fmt"
	"testing"

	"gorm.io/gen"
	"gorm.io/gen/field"
	"gorm.io/gorm/clause"
)

func init() {
	InitializeDB()
	err := _gen_test_db.AutoMigrate(&models.PostType{})
	if err != nil {
		fmt.Printf("Error: AutoMigrate(&models.PostType{}) fail: %s", err)
	}
}

func Test_postTypeQuery(t *testing.T) {
	postType := newPostType(_gen_test_db)
	postType = *postType.As(postType.TableName())
	_do := postType.WithContext(context.Background()).Debug()

	primaryKey := field.NewString(postType.TableName(), clause.PrimaryKey)
	_, err := _do.Unscoped().Where(primaryKey.IsNotNull()).Delete()
	if err != nil {
		t.Error("clean table <post_types> fail:", err)
		return
	}

	_, ok := postType.GetFieldByName("")
	if ok {
		t.Error("GetFieldByName(\"\") from postType success")
	}

	err = _do.Create(&models.PostType{})
	if err != nil {
		t.Error("create item in table <post_types> fail:", err)
	}

	err = _do.Save(&models.PostType{})
	if err != nil {
		t.Error("create item in table <post_types> fail:", err)
	}

	err = _do.CreateInBatches([]*models.PostType{{}, {}}, 10)
	if err != nil {
		t.Error("create item in table <post_types> fail:", err)
	}

	_, err = _do.Select(postType.ALL).Take()
	if err != nil {
		t.Error("Take() on table <post_types> fail:", err)
	}

	_, err = _do.First()
	if err != nil {
		t.Error("First() on table <post_types> fail:", err)
	}

	_, err = _do.Last()
	if err != nil {
		t.Error("First() on table <post_types> fail:", err)
	}

	_, err = _do.Where(primaryKey.IsNotNull()).FindInBatch(10, func(tx gen.Dao, batch int) error { return nil })
	if err != nil {
		t.Error("FindInBatch() on table <post_types> fail:", err)
	}

	err = _do.Where(primaryKey.IsNotNull()).FindInBatches(&[]*models.PostType{}, 10, func(tx gen.Dao, batch int) error { return nil })
	if err != nil {
		t.Error("FindInBatches() on table <post_types> fail:", err)
	}

	_, err = _do.Select(postType.ALL).Where(primaryKey.IsNotNull()).Order(primaryKey.Desc()).Find()
	if err != nil {
		t.Error("Find() on table <post_types> fail:", err)
	}

	_, err = _do.Distinct(primaryKey).Take()
	if err != nil {
		t.Error("select Distinct() on table <post_types> fail:", err)
	}

	_, err = _do.Select(postType.ALL).Omit(primaryKey).Take()
	if err != nil {
		t.Error("Omit() on table <post_types> fail:", err)
	}

	_, err = _do.Group(primaryKey).Find()
	if err != nil {
		t.Error("Group() on table <post_types> fail:", err)
	}

	_, err = _do.Scopes(func(dao gen.Dao) gen.Dao { return dao.Where(primaryKey.IsNotNull()) }).Find()
	if err != nil {
		t.Error("Scopes() on table <post_types> fail:", err)
	}

	_, _, err = _do.FindByPage(0, 1)
	if err != nil {
		t.Error("FindByPage() on table <post_types> fail:", err)
	}

	_, err = _do.ScanByPage(&models.PostType{}, 0, 1)
	if err != nil {
		t.Error("ScanByPage() on table <post_types> fail:", err)
	}

	_, err = _do.Attrs(primaryKey).Assign(primaryKey).FirstOrInit()
	if err != nil {
		t.Error("FirstOrInit() on table <post_types> fail:", err)
	}

	_, err = _do.Attrs(primaryKey).Assign(primaryKey).FirstOrCreate()
	if err != nil {
		t.Error("FirstOrCreate() on table <post_types> fail:", err)
	}

	var _a _another
	var _aPK = field.NewString(_a.TableName(), "id")

	err = _do.Join(&_a, primaryKey.EqCol(_aPK)).Scan(map[string]interface{}{})
	if err != nil {
		t.Error("Join() on table <post_types> fail:", err)
	}

	err = _do.LeftJoin(&_a, primaryKey.EqCol(_aPK)).Scan(map[string]interface{}{})
	if err != nil {
		t.Error("LeftJoin() on table <post_types> fail:", err)
	}

	_, err = _do.Not().Or().Clauses().Take()
	if err != nil {
		t.Error("Not/Or/Clauses on table <post_types> fail:", err)
	}
}
