go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/sdk/db/dbgen/table_from_test.go (about)

     1  /*
     2  
     3  Copyright (c) 2023 - Present. Will Charczuk. All rights reserved.
     4  Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository.
     5  
     6  */
     7  
     8  package dbgen
     9  
    10  import (
    11  	"context"
    12  	"testing"
    13  	"time"
    14  
    15  	"go.charczuk.com/sdk/assert"
    16  	"go.charczuk.com/sdk/db"
    17  	"go.charczuk.com/sdk/db/migration"
    18  	"go.charczuk.com/sdk/testutil"
    19  )
    20  
    21  func Test_dbTypeForFieldType(t *testing.T) {
    22  	var obj modelTest
    23  	objMeta := db.TypeMetaFor(obj)
    24  
    25  	assert.ItsEqual(t, "UUID", dbTypeForFieldType(objMeta.Column("id").FieldType))
    26  	assert.ItsEqual(t, "TIMESTAMP", dbTypeForFieldType(objMeta.Column("created_utc").FieldType))
    27  	assert.ItsEqual(t, "TIMESTAMP", dbTypeForFieldType(objMeta.Column("updated_utc").FieldType))
    28  	assert.ItsEqual(t, "BIGINT", dbTypeForFieldType(objMeta.Column("elapsed").FieldType))
    29  	assert.ItsEqual(t, "BIGINT", dbTypeForFieldType(objMeta.Column("int_64").FieldType))
    30  	assert.ItsEqual(t, "BIGINT", dbTypeForFieldType(objMeta.Column("int").FieldType))
    31  	assert.ItsEqual(t, "INT", dbTypeForFieldType(objMeta.Column("int_32").FieldType))
    32  	assert.ItsEqual(t, "TEXT", dbTypeForFieldType(objMeta.Column("name").FieldType))
    33  }
    34  
    35  func Test_TableFrom(t *testing.T) {
    36  	var obj modelTest
    37  
    38  	m := TableFrom(obj)
    39  
    40  	typed, ok := m.Body.(migration.StatementSlice)
    41  	assert.ItsEqual(t, true, ok)
    42  
    43  	assert.ItsEqual(t, `CREATE TABLE model_test (
    44  	id UUID NOT NULL DEFAULT gen_random_uuid()
    45  	, created_utc TIMESTAMP NOT NULL
    46  	, updated_utc TIMESTAMP
    47  	, elapsed BIGINT NOT NULL
    48  	, int_64 BIGINT NOT NULL
    49  	, int BIGINT NOT NULL
    50  	, int_32 INT NOT NULL
    51  	, name TEXT NOT NULL
    52  	, is_enabled BOOLEAN NOT NULL
    53  	, cost DOUBLE PRECISION NOT NULL
    54  	, ratio REAL NOT NULL
    55  )`, typed[0])
    56  	assert.ItsEqual(t, `ALTER TABLE model_test ADD CONSTRAINT pk_model_test_id PRIMARY KEY (id)`, typed[1])
    57  }
    58  
    59  func Test_TableFrom_integration(t *testing.T) {
    60  	tx, err := testutil.DefaultDB().BeginTx(context.Background())
    61  	assert.ItsNil(t, err)
    62  	defer tx.Rollback()
    63  
    64  	suite := migration.NewWithActions(
    65  		TableFrom(modelTest{}),
    66  	)
    67  
    68  	err = suite.ApplyTx(context.Background(), testutil.DefaultDB(), tx)
    69  	assert.ItsNil(t, err)
    70  
    71  	obj := modelTest{
    72  		Elapsed: 500 * time.Millisecond,
    73  		Int64:   1,
    74  		Int:     2,
    75  		Int32:   2,
    76  		Name:    "test_object",
    77  	}
    78  	err = testutil.DefaultDB().Invoke(db.OptTx(tx)).Create(&obj)
    79  	assert.ItsNil(t, err)
    80  }