diff --git a/pkg/codegen/modelgenerate/generate_testfile.go b/pkg/codegen/modelgenerate/generate_testfile.go index a8f562c..d42363a 100644 --- a/pkg/codegen/modelgenerate/generate_testfile.go +++ b/pkg/codegen/modelgenerate/generate_testfile.go @@ -297,82 +297,91 @@ func GenerateModelTestAST(tbl pkgschema.Table, schema pkgschema.Schema, gomodNam Name: ast.NewIdent("Test" + tbl.GoTypeName + "FkChecking"), Type: testFuncType, Body: &ast.BlockStmt{ - List: func() []ast.Stmt { - // post := MakePost() - stmts := []ast.Stmt{ - &ast.AssignStmt{ - Lhs: []ast.Expr{ast.NewIdent(tbl.VarName)}, - Tok: token.DEFINE, - Rhs: []ast.Expr{ - &ast.CallExpr{ - Fun: ast.NewIdent("Make" + tbl.GoTypeName), + List: func() (stmts []ast.Stmt) { + isFirst := true + for _, col := range tbl.Columns { + if !col.IsForeignKey { + continue + } + shouldIncludeTestFkCheck = true + + // post := MakePost() + if !isFirst { + stmts = append(stmts, BlankLine()) + } + + stmts = append(stmts, []ast.Stmt{ + // Comment header + Comment(fmt.Sprintf("Invalid %s", col.GoFieldName())), + + // `Invalid BlahBlahID` + &ast.AssignStmt{ + Lhs: []ast.Expr{ast.NewIdent(tbl.VarName)}, + Tok: map[bool]token.Token{true: token.DEFINE, false: token.ASSIGN}[isFirst], + Rhs: []ast.Expr{ + &ast.CallExpr{ + Fun: ast.NewIdent("Make" + tbl.GoTypeName), + }, }, }, - }, - } - shouldDefineErr := true - for _, col := range tbl.Columns { - if col.IsForeignKey { - shouldIncludeTestFkCheck = true - stmts = append(stmts, []ast.Stmt{ - // post.QuotedPostID = 94354538969386985 - &ast.AssignStmt{ - Lhs: []ast.Expr{ + + // `post.QuotedPostID = 94354538969386985` + &ast.AssignStmt{ + Lhs: []ast.Expr{ + &ast.SelectorExpr{ + X: ast.NewIdent(tbl.VarName), + Sel: ast.NewIdent(col.GoFieldName()), + }, + }, + Tok: token.ASSIGN, + Rhs: []ast.Expr{ + &ast.BasicLit{ + Kind: token.INT, + Value: "94354538969386985", + }, + }, + }, + + // `err := db.SavePost(&post)` + &ast.AssignStmt{ + Lhs: []ast.Expr{ast.NewIdent("err")}, + Tok: map[bool]token.Token{true: token.DEFINE, false: token.ASSIGN}[isFirst], + Rhs: []ast.Expr{ + &ast.CallExpr{ + Fun: &ast.SelectorExpr{ + X: testDB, + Sel: ast.NewIdent("Save" + tbl.GoTypeName), + }, + Args: []ast.Expr{ + &ast.UnaryExpr{ + Op: token.AND, + X: ast.NewIdent(tbl.VarName), + }, + }, + }, + }, + }, + + // `assertForeignKeyError(t, err, "QuotedPostID", post.QuotedPostID)` + &ast.ExprStmt{ + X: &ast.CallExpr{ + Fun: ast.NewIdent("AssertForeignKeyError"), + Args: []ast.Expr{ + ast.NewIdent("t"), + ast.NewIdent("err"), + &ast.BasicLit{ + Kind: token.STRING, + Value: fmt.Sprintf("%q", col.GoFieldName()), + }, &ast.SelectorExpr{ X: ast.NewIdent(tbl.VarName), Sel: ast.NewIdent(col.GoFieldName()), }, }, - Tok: token.ASSIGN, - Rhs: []ast.Expr{ - &ast.BasicLit{ - Kind: token.INT, - Value: "94354538969386985", - }, - }, }, - - // err := db.SavePost(&post) - &ast.AssignStmt{ - Lhs: []ast.Expr{ast.NewIdent("err")}, - Tok: map[bool]token.Token{true: token.DEFINE, false: token.ASSIGN}[shouldDefineErr], - Rhs: []ast.Expr{ - &ast.CallExpr{ - Fun: &ast.SelectorExpr{ - X: testDB, - Sel: ast.NewIdent("Save" + tbl.GoTypeName), - }, - Args: []ast.Expr{ - &ast.UnaryExpr{ - Op: token.AND, - X: ast.NewIdent(tbl.VarName), - }, - }, - }, - }, - }, - - // assertForeignKeyError(t, err, "QuotedPostID", post.QuotedPostID) - &ast.ExprStmt{ - X: &ast.CallExpr{ - Fun: ast.NewIdent("AssertForeignKeyError"), - Args: []ast.Expr{ - ast.NewIdent("t"), - ast.NewIdent("err"), - &ast.BasicLit{ - Kind: token.STRING, - Value: fmt.Sprintf("%q", col.GoFieldName()), - }, - &ast.SelectorExpr{ - X: ast.NewIdent(tbl.VarName), - Sel: ast.NewIdent(col.GoFieldName()), - }, - }, - }, - }, - }...) - shouldDefineErr = false - } + }, + }...) + isFirst = false } return stmts }(),