Skip to content

Commit 3d4b0c6

Browse files
Merge pull request #195 from intelops/add-tests
Add dotnet tests
2 parents 1b87638 + 5674d8a commit 3d4b0c6

File tree

7 files changed

+203
-52
lines changed

7 files changed

+203
-52
lines changed

.vscode/launch.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"mode": "debug",
99
"program": "${workspaceRoot}/main.go",
1010
"cwd": "${workspaceRoot}",
11-
"args": ["generate"]
11+
"args": ["init", "--language","dotnet"]
1212
}
1313
]
1414
}

cmd/dotnet-config.yaml.tmpl

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
name: {{.ProjectName}}
2+
git:
3+
repository:
4+
name: {{.GitRepositoryName}}
5+
url: {{.GitRepositoryURL}}
6+
platform:
7+
name: {{.GitPlatformName}}
8+
url: {{.GitPlatformURL}}
9+
userName: {{.GitPlatformUserName}}
10+
{{if .IsRestServer}}
11+
compageJSON:
12+
edges: []
13+
nodes:
14+
- id: node-ef
15+
name: user-service
16+
language: dotnet
17+
restConfig:
18+
server:
19+
sqlDB: MSSQL
20+
port: '5170'
21+
resources:
22+
- fields:
23+
Name:
24+
datatype: string
25+
Age:
26+
datatype: int
27+
name: User
28+
allowedMethods:
29+
- POST
30+
- LIST
31+
- GET
32+
- PUT
33+
- DELETE
34+
framework: dotnet-clean-architecture
35+
template: compage
36+
{{end}}
File renamed without changes.

cmd/init.go

Lines changed: 89 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package cmd
22

33
import (
4+
"fmt"
5+
"os"
6+
47
"github.com/intelops/compage/internal/languages/executor"
58
log "github.com/sirupsen/logrus"
69
"github.com/spf13/cobra"
7-
"os"
810
)
911

1012
var (
@@ -14,6 +16,7 @@ var (
1416
platformUserName string
1517
repositoryName string
1618
serverType string
19+
language string
1720
overwriteConfigFile bool
1821
)
1922

@@ -31,9 +34,10 @@ You can change the file as per your needs and then run the compage generate comm
3134
}
3235

3336
func createOrUpdateDefaultConfigFile() error {
37+
var err error
3438
// create default config file
3539
configFilePath := "config.yaml"
36-
_, err := os.Stat(configFilePath)
40+
_, err = os.Stat(configFilePath)
3741
if err == nil {
3842
log.Warnf("config file already exists at %s", configFilePath)
3943
if !overwriteConfigFile {
@@ -48,50 +52,94 @@ func createOrUpdateDefaultConfigFile() error {
4852
}
4953
}
5054

51-
_, err = os.Create(configFilePath)
52-
if err != nil {
53-
log.Errorf("error while creating the config file %s", err)
54-
return err
55-
}
56-
contentData, err := Content.ReadFile("config.yaml.tmpl")
57-
if err != nil {
58-
log.Errorf("error while reading the config file %s", err)
59-
return err
55+
if language != "go" && language != "dotnet" {
56+
message := fmt.Sprintf("language %s is not supported", language)
57+
log.Errorf(message)
58+
return fmt.Errorf(message)
6059
}
61-
// copy the default config file and use go template to replace the values
62-
err = os.WriteFile(configFilePath, contentData, 0644)
60+
61+
_, err = os.Create(configFilePath)
6362
if err != nil {
6463
log.Errorf("error while creating the config file %s", err)
6564
return err
6665
}
67-
var filePaths []*string
68-
filePaths = append(filePaths, &configFilePath)
69-
data := make(map[string]interface{})
70-
data["ProjectName"] = projectName
71-
data["GitRepositoryName"] = repositoryName
72-
data["GitRepositoryURL"] = platformURL + "/" + platformUserName + "/" + repositoryName
73-
data["GitPlatformName"] = platformName
74-
data["GitPlatformURL"] = platformURL
75-
data["GitPlatformUserName"] = platformUserName
76-
if serverType == "grpc" {
77-
data["IsRestAndGrpcServer"] = false
78-
data["IsGrpcServer"] = true
79-
data["IsRestServer"] = false
80-
} else if serverType == "rest-grpc" {
81-
data["IsRestAndGrpcServer"] = true
82-
data["IsGrpcServer"] = false
83-
data["IsRestServer"] = false
84-
} else {
85-
data["IsRestAndGrpcServer"] = false
86-
data["IsGrpcServer"] = false
87-
data["IsRestServer"] = true
88-
}
89-
err = executor.Execute(filePaths, data)
90-
if err != nil {
91-
log.Errorf("error while creating the config file %s", err)
92-
return err
66+
67+
if language == "go" {
68+
var goContentData []byte
69+
goContentData, err = GoConfigContent.ReadFile("go-config.yaml.tmpl")
70+
if err != nil {
71+
log.Errorf("error while reading the config file %s", err)
72+
return err
73+
}
74+
// copy the default config file and use go template to replace the values
75+
err = os.WriteFile(configFilePath, goContentData, 0644)
76+
if err != nil {
77+
log.Errorf("error while creating the config file %s", err)
78+
return err
79+
}
80+
var filePaths []*string
81+
filePaths = append(filePaths, &configFilePath)
82+
data := make(map[string]interface{})
83+
data["ProjectName"] = projectName
84+
data["GitRepositoryName"] = repositoryName
85+
data["GitRepositoryURL"] = platformURL + "/" + platformUserName + "/" + repositoryName
86+
data["GitPlatformName"] = platformName
87+
data["GitPlatformURL"] = platformURL
88+
data["GitPlatformUserName"] = platformUserName
89+
if serverType == "grpc" {
90+
data["IsRestAndGrpcServer"] = false
91+
data["IsGrpcServer"] = true
92+
data["IsRestServer"] = false
93+
} else if serverType == "rest-grpc" {
94+
data["IsRestAndGrpcServer"] = true
95+
data["IsGrpcServer"] = false
96+
data["IsRestServer"] = false
97+
} else {
98+
data["IsRestAndGrpcServer"] = false
99+
data["IsGrpcServer"] = false
100+
data["IsRestServer"] = true
101+
}
102+
err = executor.Execute(filePaths, data)
103+
if err != nil {
104+
log.Errorf("error while creating the config file %s", err)
105+
return err
106+
}
107+
log.Infof("config file created at %s", configFilePath)
108+
} else if language == "dotnet" {
109+
var dotnetContentData []byte
110+
dotnetContentData, err = DotNetConfigContent.ReadFile("dotnet-config.yaml.tmpl")
111+
if err != nil {
112+
log.Errorf("error while reading the config file %s", err)
113+
return err
114+
}
115+
// copy the default config file and use go template to replace the values
116+
err = os.WriteFile(configFilePath, dotnetContentData, 0644)
117+
if err != nil {
118+
log.Errorf("error while creating the config file %s", err)
119+
return err
120+
}
121+
var filePaths []*string
122+
filePaths = append(filePaths, &configFilePath)
123+
data := make(map[string]interface{})
124+
data["ProjectName"] = projectName
125+
data["GitRepositoryName"] = repositoryName
126+
data["GitRepositoryURL"] = platformURL + "/" + platformUserName + "/" + repositoryName
127+
data["GitPlatformName"] = platformName
128+
data["GitPlatformURL"] = platformURL
129+
data["GitPlatformUserName"] = platformUserName
130+
if serverType == "rest" {
131+
data["IsRestAndGrpcServer"] = false
132+
data["IsGrpcServer"] = false
133+
data["IsRestServer"] = true
134+
}
135+
err = executor.Execute(filePaths, data)
136+
if err != nil {
137+
log.Errorf("error while creating the config file %s", err)
138+
return err
139+
}
140+
log.Infof("config file created at %s", configFilePath)
93141
}
94-
log.Infof("config file created at %s", configFilePath)
142+
95143
return nil
96144
}
97145

@@ -114,4 +162,5 @@ func init() {
114162
initCmd.Flags().StringVar(&repositoryName, "repositoryName", "myproject", "Git Repository Name")
115163
initCmd.Flags().StringVar(&serverType, "serverType", "rest", "Server Type (rest, grpc, rest-grpc)")
116164
initCmd.Flags().BoolVar(&overwriteConfigFile, "overwriteConfigFile", false, "Overwrite the config file if it already exists")
165+
initCmd.Flags().StringVar(&language, "language", "go", "Language (go, dotnet)")
117166
}

cmd/root.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ import (
1212

1313
var cfgFile string
1414

15-
//go:embed config.yaml.tmpl
16-
var Content embed.FS
15+
//go:embed go-config.yaml.tmpl
16+
var GoConfigContent embed.FS
17+
18+
//go:embed dotnet-config.yaml.tmpl
19+
var DotNetConfigContent embed.FS
1720

1821
// rootCmd represents the base command when called without any subcommands
1922
var rootCmd = &cobra.Command{

internal/languages/dotnet/frameworks/dotnet-clean-architecture/copier.go

Lines changed: 70 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dotnetcleanarchitecture
22

33
import (
4+
"errors"
45
"github.com/gertd/go-pluralize"
56
"github.com/iancoleman/strcase"
67
corenode "github.com/intelops/compage/internal/core/node"
@@ -112,12 +113,11 @@ const TestsGlobalUsingsCSFile = "/Tests/Application.Tests/GlobalUsings.cs.tmpl"
112113
const MicroServiceNameSlnFile = "/MicroServiceName.sln.tmpl"
113114

114115
// handlers
115-
const TestsHandlersPath = "/Tests/Application.Tests/Handlers"
116-
const TestsHandlersResourceNameServicePath = "/Tests/Application.Tests/Handlers/ResourceNameService"
116+
const TestsApplicationTestsHandlersPath = "/Tests/Application.Tests/Handlers"
117117
const TestsHandlersCreateResourceNameCommandHandlerTestsCSFile = "/Tests/Application.Tests/Handlers/ResourceNameService/CreateResourceNameCommandHandlerTests.cs.tmpl"
118118
const TestsHandlersDeleteResourceNameCommandHandlerTestsCSFile = "/Tests/Application.Tests/Handlers/ResourceNameService/DeleteResourceNameCommandHandlerTests.cs.tmpl"
119119
const TestsHandlersUpdateResourceNameCommandHandlerTestsCSFile = "/Tests/Application.Tests/Handlers/ResourceNameService/UpdateResourceNameCommandHandlerTests.cs.tmpl"
120-
const TestsHandlersTestsHandlersGetResourceNameByIDQueryHandlerTestsCSFile = "/Tests/Application.Tests/Handlers/ResourceNameService/GetResourceNameByIdQueryHandlerTests.cs.tmpl"
120+
const TestsHandlersGetResourceNameByIDQueryHandlerTestsCSFile = "/Tests/Application.Tests/Handlers/ResourceNameService/GetResourceNameByIdQueryHandlerTests.cs.tmpl"
121121
const TestsHandlersGetAllResourceNamesQueryHandlerTestsCSFile = "/Tests/Application.Tests/Handlers/ResourceNameService/GetAllResourceNamesQueryHandlerTests.cs.tmpl"
122122

123123
// Copier Language specific *Copier
@@ -300,7 +300,7 @@ func (c *Copier) createRestServerDirectories() error {
300300
}
301301

302302
testsDirectory := c.NodeDirectoryName + TestsPath
303-
testsHandlersDirectory := c.NodeDirectoryName + TestsHandlersPath
303+
testsHandlersDirectory := c.NodeDirectoryName + TestsApplicationTestsHandlersPath
304304
if err := utils.CreateDirectories(testsDirectory); err != nil {
305305
log.Errorf("error creating tests directory: %v", err)
306306
return err
@@ -318,9 +318,9 @@ func (c *Copier) copyRestServerResourceFiles(resource *corenode.Resource) error
318318
filePaths := &[]*string{}
319319
var err error
320320
// copy sql files (core)
321-
//if c.IsSQLDB {
322-
// // add files to filePaths and copy them to the generated project
323-
//}
321+
if !c.IsSQLDB || c.SQLDB != "MSSQL" {
322+
return errors.New("only MSSQL is supported")
323+
}
324324

325325
// add files for application
326326
err = c.addApplicationRelatedDirectoriesAndFiles(resource, filePaths)
@@ -350,6 +350,12 @@ func (c *Copier) copyRestServerResourceFiles(resource *corenode.Resource) error
350350
return err
351351
}
352352

353+
// add files for tests
354+
err = c.addTestsRelatedDirectoriesAndFiles(resource, filePaths)
355+
if err != nil {
356+
log.Errorf("error adding tests related directories and files: %v", err)
357+
return err
358+
}
353359
// add resource-specific data to map in c needed for templates.
354360
err = c.addResourceSpecificTemplateData(resource)
355361
if err != nil {
@@ -640,6 +646,63 @@ func (c *Copier) addMicroServiceNameRelatedDirectoriesAndFiles(resource *corenod
640646
return nil
641647
}
642648

649+
func (c *Copier) addTestsRelatedDirectoriesAndFiles(resource *corenode.Resource, filePaths *[]*string) error {
650+
var err error
651+
652+
// create a directory for resource Application.Tests/handlers/ResourceNameService
653+
resourceHandlersResourceNameDirectory := c.NodeDirectoryName + TestsApplicationTestsHandlersPath + "/" + resource.Name + "Service"
654+
if err = utils.CreateDirectories(resourceHandlersResourceNameDirectory); err != nil {
655+
log.Errorf("error creating resource handlers resource name directory: %v", err)
656+
return err
657+
}
658+
// copy tests/Application.Tests/Handlers/ResourceNameService/CreateResourceNameCommandHandlerTests.cs
659+
targetTestsApplicationTestsHandlersResourceNameServiceCreateResourceNameCommandHandlerTestsFileName := resourceHandlersResourceNameDirectory + "/" + "Create" + resource.Name + "CommandHandlerTests.cs"
660+
_, err = utils.CopyFile(targetTestsApplicationTestsHandlersResourceNameServiceCreateResourceNameCommandHandlerTestsFileName, c.TemplatesRootPath+TestsHandlersCreateResourceNameCommandHandlerTestsCSFile)
661+
if err != nil {
662+
log.Errorf("error copying tests application tests handlers resource name service create resource name command handler tests cs file: %v", err)
663+
return err
664+
}
665+
*filePaths = append(*filePaths, &targetTestsApplicationTestsHandlersResourceNameServiceCreateResourceNameCommandHandlerTestsFileName)
666+
667+
// copy tests/Application.Tests/Handlers/ResourceNameService/GetAllResourceNamesQueryHandlerTests.cs
668+
targetTestsApplicationTestsHandlersResourceNameServiceGetAllResourceNamesQueryHandlerTestsFileName := resourceHandlersResourceNameDirectory + "/" + "GetAll" + c.PluralizeClient.Plural(resource.Name) + "QueryHandlerTests.cs"
669+
_, err = utils.CopyFile(targetTestsApplicationTestsHandlersResourceNameServiceGetAllResourceNamesQueryHandlerTestsFileName, c.TemplatesRootPath+TestsHandlersGetAllResourceNamesQueryHandlerTestsCSFile)
670+
if err != nil {
671+
log.Errorf("error copying tests application tests handlers resource name service get all resource names query handler tests cs file: %v", err)
672+
return err
673+
}
674+
*filePaths = append(*filePaths, &targetTestsApplicationTestsHandlersResourceNameServiceGetAllResourceNamesQueryHandlerTestsFileName)
675+
676+
// copy tests/Application.Tests/Handlers/ResourceNameService/GetResourceNameByIdQueryHandlerTests.cs
677+
targetTestsApplicationTestsHandlersResourceNameServiceGetResourceNameByIDQueryHandlerTestsFileName := resourceHandlersResourceNameDirectory + "/" + "Get" + resource.Name + "ByIdQueryHandlerTests.cs"
678+
_, err = utils.CopyFile(targetTestsApplicationTestsHandlersResourceNameServiceGetResourceNameByIDQueryHandlerTestsFileName, c.TemplatesRootPath+TestsHandlersGetResourceNameByIDQueryHandlerTestsCSFile)
679+
if err != nil {
680+
log.Errorf("error copying tests application tests handlers resource name service get resource name by id query handler tests cs file: %v", err)
681+
return err
682+
}
683+
*filePaths = append(*filePaths, &targetTestsApplicationTestsHandlersResourceNameServiceGetResourceNameByIDQueryHandlerTestsFileName)
684+
685+
// copy tests/Application.Tests/Handlers/ResourceNameService/UpdateResourceNameCommandHandlerTests.cs
686+
targetTestsApplicationTestsHandlersResourceNameServiceUpdateResourceNameCommandHandlerTestsFileName := resourceHandlersResourceNameDirectory + "/" + "Update" + resource.Name + "CommandHandlerTests.cs"
687+
_, err = utils.CopyFile(targetTestsApplicationTestsHandlersResourceNameServiceUpdateResourceNameCommandHandlerTestsFileName, c.TemplatesRootPath+TestsHandlersUpdateResourceNameCommandHandlerTestsCSFile)
688+
if err != nil {
689+
log.Errorf("error copying tests application tests handlers resource name service update resource name command handler tests cs file: %v", err)
690+
return err
691+
}
692+
*filePaths = append(*filePaths, &targetTestsApplicationTestsHandlersResourceNameServiceUpdateResourceNameCommandHandlerTestsFileName)
693+
694+
// copy tests/Application.Tests/Handlers/ResourceNameService/DeleteResourceNameCommandHandlerTests.cs
695+
targetTestsApplicationTestsHandlersResourceNameServiceDeleteResourceNameCommandHandlerTestsFileName := resourceHandlersResourceNameDirectory + "/" + "Delete" + resource.Name + "CommandHandlerTests.cs"
696+
_, err = utils.CopyFile(targetTestsApplicationTestsHandlersResourceNameServiceDeleteResourceNameCommandHandlerTestsFileName, c.TemplatesRootPath+TestsHandlersDeleteResourceNameCommandHandlerTestsCSFile)
697+
if err != nil {
698+
log.Errorf("error copying tests application tests handlers resource name service delete resource name command handler tests cs file: %v", err)
699+
return err
700+
}
701+
*filePaths = append(*filePaths, &targetTestsApplicationTestsHandlersResourceNameServiceDeleteResourceNameCommandHandlerTestsFileName)
702+
703+
return nil
704+
}
705+
643706
func (c *Copier) addResourceSpecificTemplateData(resource *corenode.Resource) error {
644707
// make every field public by making its first character capital.
645708
fields := map[string]string{}

test/generator_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1380,7 +1380,7 @@ func TestDotNetCleanArchitectureGenerator(t *testing.T) {
13801380
"language": "dotnet",
13811381
"restConfig": {
13821382
"server": {
1383-
"sqlDB": "SQLite",
1383+
"sqlDB": "MSSQL",
13841384
"port": "5005",
13851385
"resources": [
13861386
{
@@ -1424,7 +1424,7 @@ func TestDotNetCleanArchitectureGenerator(t *testing.T) {
14241424
ProjectJSON: restServerConfigJSON,
14251425
}
14261426
defer func() {
1427-
//_ = os.RemoveAll("/tmp/first-rest-server-project-dotnet")
1427+
_ = os.RemoveAll("/tmp/first-rest-server-project-dotnet")
14281428
}()
14291429

14301430
// retrieve project struct

0 commit comments

Comments
 (0)