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 }