diff --git a/pkg/codegen/modelgenerate/generate_model.go b/pkg/codegen/modelgenerate/generate_model.go index e837a87..52de254 100644 --- a/pkg/codegen/modelgenerate/generate_model.go +++ b/pkg/codegen/modelgenerate/generate_model.go @@ -530,8 +530,10 @@ func GenerateGetAllItemsFunc(tbl schema.Table) *ast.FuncDecl { // GenerateDeleteItemFunc produces an AST for the `DeleteXyz()` function. // E.g., a table with `table.TypeName = "foods"` will produce a "DeleteFood()" function. func GenerateDeleteItemFunc(tbl schema.Table) *ast.FuncDecl { - funcName := "Delete" + tbl.GoTypeName - arg := &ast.FieldList{List: []*ast.Field{{Names: []*ast.Ident{ast.NewIdent(tbl.VarName)}, Type: ast.NewIdent(tbl.GoTypeName)}}} + arg := &ast.FieldList{List: []*ast.Field{{ + Names: []*ast.Ident{ast.NewIdent(tbl.VarName)}, + Type: ast.NewIdent(tbl.GoTypeName), + }}} funcBody := &ast.BlockStmt{ List: []ast.Stmt{ @@ -572,7 +574,7 @@ func GenerateDeleteItemFunc(tbl schema.Table) *ast.FuncDecl { funcDecl := &ast.FuncDecl{ Recv: dbRecv, - Name: ast.NewIdent(funcName), + Name: ast.NewIdent("Delete" + tbl.GoTypeName), Type: &ast.FuncType{Params: arg, Results: nil}, Body: funcBody, } diff --git a/pkg/codegen/modelgenerate/generate_testfile.go b/pkg/codegen/modelgenerate/generate_testfile.go index a42e458..ebdb4e0 100644 --- a/pkg/codegen/modelgenerate/generate_testfile.go +++ b/pkg/codegen/modelgenerate/generate_testfile.go @@ -64,7 +64,7 @@ func GenerateModelTestAST(tbl schema.Table, gomodName string) *ast.File { Rhs: []ast.Expr{mustCall(&ast.CallExpr{ Fun: ast.NewIdent("Create"), Args: []ast.Expr{&ast.CallExpr{ - Fun: ast.NewIdent("fmt.Sprintf"), + Fun: &ast.SelectorExpr{X: ast.NewIdent("fmt"), Sel: ast.NewIdent("Sprintf")}, Args: []ast.Expr{ &ast.BasicLit{Kind: token.STRING, Value: `"file:%s?mode=memory&cache=shared"`}, ast.NewIdent("dbName"), @@ -112,21 +112,23 @@ func GenerateModelTestAST(tbl schema.Table, gomodName string) *ast.File { hasCreatedAt, hasUpdatedAt := tbl.HasAutoTimestamps() + testFuncType := &ast.FuncType{ + Params: &ast.FieldList{ + List: []*ast.Field{{ + Names: []*ast.Ident{ast.NewIdent("t")}, + Type: &ast.StarExpr{X: &ast.SelectorExpr{X: ast.NewIdent("testing"), Sel: ast.NewIdent("T")}}, + }}, + }, + } + testCreateUpdateDelete := &ast.FuncDecl{ Name: ast.NewIdent("TestCreateUpdateDelete" + tbl.GoTypeName), - Type: &ast.FuncType{ - Params: &ast.FieldList{ - List: []*ast.Field{{ - Names: []*ast.Ident{ast.NewIdent("t")}, - Type: ast.NewIdent("*testing.T"), - }}, - }, - }, + Type: testFuncType, Body: &ast.BlockStmt{ List: func() []ast.Stmt { assertNotZero := func(obj *ast.Ident, field string) *ast.ExprStmt { return &ast.ExprStmt{X: &ast.CallExpr{ - Fun: ast.NewIdent("assert.NotZero"), + Fun: &ast.SelectorExpr{X: ast.NewIdent("assert"), Sel: ast.NewIdent("NotZero")}, Args: []ast.Expr{ast.NewIdent("t"), &ast.SelectorExpr{X: obj, Sel: ast.NewIdent(field)}}, }} } @@ -149,13 +151,13 @@ func GenerateModelTestAST(tbl schema.Table, gomodName string) *ast.File { // TestDB.SaveItem(&item) &ast.ExprStmt{X: &ast.CallExpr{ - Fun: ast.NewIdent("TestDB.Save" + tbl.GoTypeName), + Fun: &ast.SelectorExpr{X: ast.NewIdent("TestDB"), Sel: ast.NewIdent("Save" + tbl.GoTypeName)}, Args: []ast.Expr{&ast.UnaryExpr{Op: token.AND, X: testObj}}, }}, // require.NotZero(t, item.ID) &ast.ExprStmt{X: &ast.CallExpr{ - Fun: ast.NewIdent("require.NotZero"), + Fun: &ast.SelectorExpr{X: ast.NewIdent("require"), Sel: ast.NewIdent("NotZero")}, Args: []ast.Expr{ast.NewIdent("t"), &ast.SelectorExpr{X: testObj, Sel: ast.NewIdent("ID")}}, }}, } @@ -174,14 +176,14 @@ func GenerateModelTestAST(tbl schema.Table, gomodName string) *ast.File { Lhs: []ast.Expr{testObj2}, Tok: token.DEFINE, Rhs: []ast.Expr{mustCall(&ast.CallExpr{ - Fun: ast.NewIdent("TestDB.Get" + tbl.GoTypeName + "ByID"), + Fun: &ast.SelectorExpr{X: ast.NewIdent("TestDB"), Sel: ast.NewIdent("Get" + tbl.GoTypeName + "ByID")}, Args: []ast.Expr{&ast.SelectorExpr{X: testObj, Sel: ast.NewIdent("ID")}}, })}, }, // assert.Equal(t, "an item", item2.Description) &ast.ExprStmt{X: &ast.CallExpr{ - Fun: ast.NewIdent("assert.Equal"), + Fun: &ast.SelectorExpr{X: ast.NewIdent("assert"), Sel: ast.NewIdent("Equal")}, Args: []ast.Expr{ ast.NewIdent("t"), &ast.BasicLit{Kind: token.STRING, Value: description1}, @@ -198,33 +200,25 @@ func GenerateModelTestAST(tbl schema.Table, gomodName string) *ast.File { // TestDB.SaveItem(&item) &ast.ExprStmt{X: &ast.CallExpr{ - Fun: ast.NewIdent("TestDB.Save" + tbl.GoTypeName), + Fun: &ast.SelectorExpr{X: ast.NewIdent("TestDB"), Sel: ast.NewIdent("Save" + tbl.GoTypeName)}, Args: []ast.Expr{&ast.UnaryExpr{Op: token.AND, X: testObj}}, }}, ) - // After update: assert timestamps are still set - if hasCreatedAt { - stmts = append(stmts, assertNotZero(testObj, "CreatedAt")) - } - if hasUpdatedAt { - stmts = append(stmts, assertNotZero(testObj, "UpdatedAt")) - } - stmts = append(stmts, // item2 = Must(TestDB.GetItemByID(item.ID)) &ast.AssignStmt{ Lhs: []ast.Expr{testObj2}, Tok: token.ASSIGN, Rhs: []ast.Expr{mustCall(&ast.CallExpr{ - Fun: ast.NewIdent("TestDB.Get" + tbl.GoTypeName + "ByID"), + Fun: &ast.SelectorExpr{X: ast.NewIdent("TestDB"), Sel: ast.NewIdent("Get" + tbl.GoTypeName + "ByID")}, Args: []ast.Expr{&ast.SelectorExpr{X: testObj, Sel: ast.NewIdent("ID")}}, })}, }, // assert.Equal(t, item.Description, item2.Description) &ast.ExprStmt{X: &ast.CallExpr{ - Fun: ast.NewIdent("assert.Equal"), + Fun: &ast.SelectorExpr{X: ast.NewIdent("assert"), Sel: ast.NewIdent("Equal")}, Args: []ast.Expr{ ast.NewIdent("t"), &ast.SelectorExpr{X: testObj, Sel: fieldName}, @@ -234,7 +228,7 @@ func GenerateModelTestAST(tbl schema.Table, gomodName string) *ast.File { // TestDB.DeleteItem(item) &ast.ExprStmt{X: &ast.CallExpr{ - Fun: ast.NewIdent("TestDB.Delete" + tbl.GoTypeName), + Fun: &ast.SelectorExpr{X: ast.NewIdent("TestDB"), Sel: ast.NewIdent("Delete" + tbl.GoTypeName)}, Args: []ast.Expr{testObj}, }}, @@ -243,14 +237,14 @@ func GenerateModelTestAST(tbl schema.Table, gomodName string) *ast.File { Lhs: []ast.Expr{ast.NewIdent("_"), ast.NewIdent("err")}, Tok: token.DEFINE, Rhs: []ast.Expr{&ast.CallExpr{ - Fun: ast.NewIdent("TestDB.Get" + tbl.GoTypeName + "ByID"), + Fun: &ast.SelectorExpr{X: ast.NewIdent("TestDB"), Sel: ast.NewIdent("Get" + tbl.GoTypeName + "ByID")}, Args: []ast.Expr{&ast.SelectorExpr{X: testObj, Sel: ast.NewIdent("ID")}}, }}, }, // assert.ErrorIs(t, err, db.ErrNotInDB) &ast.ExprStmt{X: &ast.CallExpr{ - Fun: ast.NewIdent("assert.ErrorIs"), + Fun: &ast.SelectorExpr{X: ast.NewIdent("assert"), Sel: ast.NewIdent("ErrorIs")}, Args: []ast.Expr{ ast.NewIdent("t"), ast.NewIdent("err"), @@ -266,9 +260,7 @@ func GenerateModelTestAST(tbl schema.Table, gomodName string) *ast.File { testGetAll := &ast.FuncDecl{ Name: ast.NewIdent("TestGetAll" + inflection.Plural(tbl.GoTypeName)), - Type: &ast.FuncType{Params: &ast.FieldList{List: []*ast.Field{ - {Names: []*ast.Ident{ast.NewIdent("t")}, Type: &ast.StarExpr{X: ast.NewIdent("testing.T")}}, - }}, Results: nil}, + Type: testFuncType, Body: &ast.BlockStmt{ List: []ast.Stmt{ &ast.AssignStmt{ @@ -288,21 +280,7 @@ func GenerateModelTestAST(tbl schema.Table, gomodName string) *ast.File { shouldIncludeTestFkCheck := false testFkChecking := &ast.FuncDecl{ Name: ast.NewIdent("Test" + tbl.GoTypeName + "FkChecking"), - Type: &ast.FuncType{ - Params: &ast.FieldList{ - List: []*ast.Field{ - { - Names: []*ast.Ident{ast.NewIdent("t")}, - Type: &ast.StarExpr{ - X: &ast.SelectorExpr{ - X: ast.NewIdent("testing"), - Sel: ast.NewIdent("T"), - }, - }, - }, - }, - }, - }, + Type: testFuncType, Body: &ast.BlockStmt{ List: func() []ast.Stmt { // post := MakePost()