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  }