goyave.dev/goyave/v5@v5.0.0-rc9.0.20240517145003-d3f977d0b9f3/database/factory_test.go (about) 1 package database 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/stretchr/testify/require" 8 "gorm.io/driver/sqlite" 9 "goyave.dev/goyave/v5/config" 10 ) 11 12 type TestUser struct { 13 Name string `gorm:"type:varchar(100)"` 14 Email string `gorm:"type:varchar(100)"` 15 ID uint `gorm:"primaryKey"` 16 } 17 18 func userGenerator() *TestUser { 19 return &TestUser{ 20 Name: "John Doe", 21 Email: "johndoe@example.org", 22 } 23 } 24 25 func TestFactory(t *testing.T) { 26 27 t.Run("New", func(t *testing.T) { 28 factory := NewFactory(userGenerator) 29 30 if !assert.NotNil(t, factory) { 31 return 32 } 33 assert.Equal(t, 100, factory.BatchSize) 34 assert.Nil(t, factory.override) 35 }) 36 37 t.Run("Generate", func(t *testing.T) { 38 factory := NewFactory(userGenerator) 39 40 records := factory.Generate(3) 41 expected := []*TestUser{ 42 userGenerator(), 43 userGenerator(), 44 userGenerator(), 45 } 46 assert.Equal(t, expected, records) 47 48 records = factory.Generate(0) 49 assert.Equal(t, []*TestUser{}, records) 50 }) 51 52 t.Run("Override", func(t *testing.T) { 53 factory := NewFactory(userGenerator) 54 factory.Override(&TestUser{Name: "name override"}) 55 56 records := factory.Generate(1) 57 expected := []*TestUser{{ 58 Name: "name override", 59 Email: "johndoe@example.org", 60 }} 61 assert.Equal(t, expected, records) 62 }) 63 64 t.Run("Save", func(t *testing.T) { 65 RegisterDialect("sqlite3_factory_test", "file:{name}?{options}", sqlite.Open) 66 t.Cleanup(func() { 67 mu.Lock() 68 delete(dialects, "sqlite3_factory_test") 69 mu.Unlock() 70 }) 71 72 cfg := config.LoadDefault() 73 cfg.Set("app.debug", false) 74 cfg.Set("database.connection", "sqlite3_factory_test") 75 cfg.Set("database.name", "factory_test.db") 76 cfg.Set("database.options", "mode=memory") 77 db, err := New(cfg, nil) 78 require.NoError(t, err) 79 require.NoError(t, db.AutoMigrate(&TestUser{})) 80 81 factory := NewFactory(userGenerator) 82 records := factory.Save(db, 3) 83 84 results := []*TestUser{} 85 res := db.Find(&results) 86 require.NoError(t, res.Error) 87 assert.Equal(t, records, results) 88 }) 89 }