// PopulateCommonTypes makes sure the database is populated with the correct types (e.g. bug etc.) func PopulateCommonTypes(ctx context.Context, db *gorm.DB, witr *workitem.GormWorkItemTypeRepository) error { if err := createOrUpdateSystemPlannerItemType(ctx, witr, db); err != nil { return errs.WithStack(err) } workitem.ClearGlobalWorkItemTypeCache() // Clear the WIT cache after updating existing WITs if err := createOrUpdatePlannerItemExtension(workitem.SystemUserStory, ctx, witr, db); err != nil { return errs.WithStack(err) } if err := createOrUpdatePlannerItemExtension(workitem.SystemValueProposition, ctx, witr, db); err != nil { return errs.WithStack(err) } if err := createOrUpdatePlannerItemExtension(workitem.SystemFundamental, ctx, witr, db); err != nil { return errs.WithStack(err) } if err := createOrUpdatePlannerItemExtension(workitem.SystemExperience, ctx, witr, db); err != nil { return errs.WithStack(err) } if err := createOrUpdatePlannerItemExtension(workitem.SystemScenario, ctx, witr, db); err != nil { return errs.WithStack(err) } if err := createOrUpdatePlannerItemExtension(workitem.SystemFeature, ctx, witr, db); err != nil { return errs.WithStack(err) } if err := createOrUpdatePlannerItemExtension(workitem.SystemBug, ctx, witr, db); err != nil { return errs.WithStack(err) } workitem.ClearGlobalWorkItemTypeCache() // Clear the WIT cache after updating existing WITs return nil }
// DeleteCreatedEntities records all created entities on the gorm.DB connection // and returns a function which can be called on defer to delete created // entities in reverse order on function exit. // // In addition to that, the WIT cache is cleared as well in order to respect any // deletions made to the db. // // Usage: // // func TestDatabaseActions(t *testing.T) { // // // setup database connection // db := .... // // setup auto clean up of created entities // defer DeleteCreatedEntities(db)() // // repo := NewRepo(db) // repo.Create(X) // repo.Create(X) // repo.Create(X) // } // // Output: // // 2017/01/31 12:08:08 Deleting from x 6d143405-1232-40de-bc73-835b543cd972 // 2017/01/31 12:08:08 Deleting from x 0685068d-4934-4d9a-bac2-91eebbca9575 // 2017/01/31 12:08:08 Deleting from x 2d20944e-7952-40c1-bd15-f3fa1a70026d func DeleteCreatedEntities(db *gorm.DB) func() { hookName := "mighti:record" type entity struct { table string keyname string key interface{} } var entires []entity db.Callback().Create().After("gorm:create").Register(hookName, func(scope *gorm.Scope) { entires = append(entires, entity{table: scope.TableName(), keyname: scope.PrimaryKey(), key: scope.PrimaryKeyValue()}) }) return func() { defer db.Callback().Create().Remove(hookName) tx := db.Begin() for i := len(entires) - 1; i >= 0; i-- { entry := entires[i] log.Debug(nil, map[string]interface{}{ "pkg": "cleaner", "table": entry.table, "key": entry.key, }, "Deleting entities from %s with key %s", entry.table, entry.key) tx.Table(entry.table).Where(entry.keyname+" = ?", entry.key).Delete("") } // Delete the work item cache as well // NOTE: Feel free to add more cache freeing calls here as needed. workitem.ClearGlobalWorkItemTypeCache() tx.Commit() } }
func (s *workItemTypeRepoBlackBoxTest) SetupTest() { s.undoScript = &gormsupport.DBScript{} gWitRepo := workitem.NewWorkItemTypeRepository(s.DB) s.repo = workitem.NewUndoableWorkItemTypeRepository(gWitRepo, s.undoScript) db2 := s.DB.Unscoped().Delete(workitem.WorkItemType{Name: "foo_bar"}) if db2.Error != nil { s.T().Fatalf("Could not setup test %s", db2.Error.Error()) return } workitem.ClearGlobalWorkItemTypeCache() }