Files
threshold/internal/db/assert/asserts_test.go
T
Jim 591ec476e7 refactor: Update internal/db and oplog to use go-dbw package for database operations. (#1785)
* chore: Add new dbw dependency

* refactor: Convert to use dbw.DB

* refactor (db): Change GetTicket(...) signature

* feature (db tests): Added TestDeleteWhere(...)
Adding this allows us to eliminate a leak of the gorm library

* refactor: Add ctx to ScanRows(...) signature
This is required to refactor all the deprecated errors pkg calls.
This refactor required adding a context to quite a few call chains
and in particular the job scheduler bits

* feature (db/tests): Add support for test opt: WithTestLogLevel(...)
This test only option allows callers to specify a log level for the
underlying db package (where supported/applicable) when calling
TestSetup(...)

* refactor (db): Simplify Db type
Only store the underlying *DB and create the *RW on demand when
needed.

* refactor (oplog): Port to using dbw pkg for db operations

* refactor (db): Remove gormDB(...) func

* tests (db): Add unit tests for TestDeleteWhere(...)

* chore: make fmt changes to formatting
2022-01-05 14:38:38 -05:00

161 lines
3.7 KiB
Go

package dbassert
import (
"context"
"testing"
"github.com/hashicorp/boundary/internal/db"
dbassert "github.com/hashicorp/dbassert"
gormAssert "github.com/hashicorp/dbassert/gorm"
"github.com/hashicorp/vault/sdk/helper/base62"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func Test_FieldDomain(t *testing.T) {
t.Parallel()
cleanup, conn, _ := dbassert.TestSetup(t, "postgres")
defer func() {
if err := cleanup(); err != nil {
t.Error(err)
}
if err := conn.Close(); err != nil {
t.Error(err)
}
}()
mockery := new(dbassert.MockTesting)
dbassert := New(mockery, conn)
dbassert.Domain(&gormAssert.TestModel{}, "PublicId", "dbasserts_public_id")
mockery.AssertNoError(t)
mockery.Reset()
dbassert.Domain(&gormAssert.TestModel{}, "nullable", "dbasserts_public_id")
mockery.AssertError(t)
}
func Test_FieldNullable(t *testing.T) {
t.Parallel()
cleanup, conn, _ := dbassert.TestSetup(t, "postgres")
defer func() {
if err := cleanup(); err != nil {
t.Error(err)
}
if err := conn.Close(); err != nil {
t.Error(err)
}
}()
mockery := new(dbassert.MockTesting)
dbassert := New(mockery, conn)
dbassert.Nullable(&gormAssert.TestModel{}, "Nullable")
mockery.AssertNoError(t)
mockery.Reset()
dbassert.Nullable(&gormAssert.TestModel{}, "PublicId")
mockery.AssertError(t)
}
func Test_FieldIsNull(t *testing.T) {
t.Parallel()
ctx := context.Background()
assert := assert.New(t)
conn, _ := db.TestSetup(t, "postgres")
initStore(t, conn)
require := require.New(t)
underlyingDB, err := conn.SqlDB(ctx)
require.NoError(err)
assert.NoError(err)
mockery := new(dbassert.MockTesting)
dbassert := New(mockery, underlyingDB)
v := 1
m := createTestModel(t, conn, nil, &v)
dbassert.IsNull(&m, "Nullable")
mockery.AssertNoError(t)
mockery.Reset()
dbassert.IsNull(&m, "typeint")
mockery.AssertError(t)
}
func Test_FieldNotNull(t *testing.T) {
t.Parallel()
ctx := context.Background()
conn, _ := db.TestSetup(t, "postgres")
initStore(t, conn)
require := require.New(t)
underlyingDB, err := conn.SqlDB(ctx)
require.NoError(err)
mockery := new(dbassert.MockTesting)
dbassert := New(mockery, underlyingDB)
v := 1
m := createTestModel(t, conn, nil, &v)
dbassert.NotNull(&m, "Nullable")
mockery.AssertError(t)
mockery.Reset()
dbassert.NotNull(&m, "typeint")
mockery.AssertNoError(t)
}
type testModel struct {
Id int `gorm:"primary_key"`
PublicId string
Nullable *string
TypeInt *int
}
// TableName is required by Gorm to define the model's table name when it
// doesn't match the model's Go type name.
func (*testModel) TableName() string { return "test_table_dbasserts" }
// CreateTestModel is a helper that creates a testModel in the DB.
func createTestModel(t dbassert.TestingT, d *db.DB, nullable *string, typeInt *int) *testModel {
publicId, err := base62.Random(12)
assert.NoError(t, err)
m := testModel{
PublicId: publicId,
Nullable: nullable,
TypeInt: typeInt,
}
rw := db.New(d)
require.NoError(t, rw.Create(context.Background(), &m))
return &m
}
func initStore(t *testing.T, d *db.DB) {
t.Helper()
const (
createDomainType = `
create domain dbasserts_public_id as text
check(
length(trim(value)) > 10
);
comment on domain dbasserts_public_id is
'dbasserts test domain type';
`
createTable = `
create table if not exists test_table_dbasserts (
id bigint generated always as identity primary key,
public_id dbasserts_public_id not null,
nullable text,
type_int int
);
comment on table test_table_dbasserts is
'dbasserts test table'
`
)
rw := db.New(d)
ctx := context.Background()
_, err := rw.Exec(ctx, createDomainType, nil)
require.NoError(t, err)
_, err = rw.Exec(ctx, createTable, nil)
require.NoError(t, err)
}