Skip to content

Commit

Permalink
Allow to set to use registration order without resolving relations (#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
lafriks authored Sep 14, 2023
1 parent a9e09d1 commit 91031a3
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 9 deletions.
13 changes: 11 additions & 2 deletions fixtures.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,18 @@ type BeforeSave interface {

// Repsitory of fixtures that can be loaded and imported.
type Repository struct {
log Logger
registry map[string]any
log Logger
registry map[string]any
order []string
skipResolve bool
}

// New creates a new fixtures repository.
func New() *Repository {
return &Repository{
log: defaultLogger{},
registry: make(map[string]any, 10),
order: make([]string, 0, 10),
}
}

Expand All @@ -60,9 +63,15 @@ func (r *Repository) Register(v any) {
}

r.registry[name] = v
r.order = append(r.order, name)
}

// SetLogger sets the logger to be used by the repository to notify about warnings.
func (r *Repository) SetLogger(l Logger) {
r.log = l
}

// SetSkipResolve sets whether the repository should skip resolving relations and use registration order.
func (r *Repository) SetSkipResolve(skip bool) {
r.skipResolve = skip
}
17 changes: 10 additions & 7 deletions source.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,14 +145,17 @@ func (r *Repository) ImportDir(ctx context.Context, db rel.Repository, path stri
}

func (r *Repository) importData(ctx context.Context, db rel.Repository, data map[string][]any) error {
tables, err := r.importOrder()
if err != nil {
r.log.Warn(fmt.Sprintf("failed to get table import order: %v", err))

// Fallback to list of map keys
for table := range r.registry {
tables = append(tables, table)
var tables []string
if !r.skipResolve {
var err error
if tables, err = r.importOrder(); err != nil {
r.log.Warn(fmt.Sprintf("failed to get table import order: %v", err))

// Fallback to registration order
tables = r.order
}
} else {
tables = r.order
}

return db.Transaction(ctx, func(ctx context.Context) error {
Expand Down
13 changes: 13 additions & 0 deletions source_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,3 +119,16 @@ func TestFixtures_ImportDir(t *testing.T) {
qt.Check(t, qt.Equals(user.Address.ID, 1))
qt.Check(t, qt.Equals(user.Address.City, "New York"))
}

func TestFixtures_SkipResolve(t *testing.T) {
repo := New()
repo.SetSkipResolve(true)
repo.Register(&Address{})
repo.Register(&User{})
repo.Register(&Transaction{})

db := createTestDB(t)

err := repo.ImportDir(context.TODO(), db, "testdata/sample/")
qt.Assert(t, qt.IsNil(err))
}

0 comments on commit 91031a3

Please sign in to comment.