diff --git a/internals/template/embed.go b/internals/template/embed.go new file mode 100644 index 0000000..fe9183c --- /dev/null +++ b/internals/template/embed.go @@ -0,0 +1,6 @@ +package template + +import "embed" + +//go:embed templates/*.tmpl +var Templates embed.FS diff --git a/pkg/template/model.go b/internals/template/model.go similarity index 100% rename from pkg/template/model.go rename to internals/template/model.go diff --git a/pkg/template/template.go b/internals/template/template.go similarity index 92% rename from pkg/template/template.go rename to internals/template/template.go index 5da72a6..20e72ad 100644 --- a/pkg/template/template.go +++ b/internals/template/template.go @@ -9,7 +9,6 @@ import ( "html/template" "log" "os" - "path/filepath" "strings" "github.com/Masterminds/sprig" @@ -23,7 +22,7 @@ type Template struct { } // NewTemplate creates a new Template service -func NewTemplate(templatePath string, outputDestination string) *Template { +func NewTemplate(templatePath, outputDestination string) *Template { return &Template{ templatePath: templatePath, outputFolder: outputDestination, @@ -32,10 +31,6 @@ func NewTemplate(templatePath string, outputDestination string) *Template { // GenerateTestFiles generates the test files using the provided template func (T *Template) GenerateTestFiles(swaggerJSON *swagger.JSON, testExtension string) { - tmpExtension := filepath.Ext(T.templatePath) - if tmpExtension != ".tmpl" { - log.Fatalf("invalid extension provided for template file, file must be *.tmpl") - } apiTest := GeneratedTest{ GeneratedTests: make(map[string]Test), } @@ -142,12 +137,14 @@ func (T *Template) GenerateTestFiles(swaggerJSON *swagger.JSON, testExtension st } } } - + tmplBuffer, err := Templates.ReadFile(T.templatePath) + if err != nil { + log.Fatalf("unable to read tmpl from embedded files, %v\n", err) + } for _, API := range apiTest.GeneratedTests { - fileName := filepath.Base(T.templatePath) - tmpl := template.Must(template.New("").Funcs(sprig.FuncMap()).ParseFiles(T.templatePath)) + templates := template.Must(template.New("tmpl").Funcs(sprig.FuncMap()).Parse(string(tmplBuffer))) var processed bytes.Buffer - err := tmpl.ExecuteTemplate(&processed, fileName, API) + err := templates.ExecuteTemplate(&processed, "tmpl", API) if err != nil { log.Fatalf("Unable to parse data into template: %v\n", err) } diff --git a/pkg/template/template_test.go b/internals/template/template_test.go similarity index 69% rename from pkg/template/template_test.go rename to internals/template/template_test.go index ecfc61a..bc2595f 100644 --- a/pkg/template/template_test.go +++ b/internals/template/template_test.go @@ -10,7 +10,7 @@ import ( ) func TestTemplate_GetGenerateTestFiles(t *testing.T) { - template := NewTemplate("../../internals/templates/golang.tmpl", "../../generated") + template := NewTemplate("templates/golang.tmpl", "../../generated") json := swagger.JSON{ Paths: map[string]swagger.Path{ "get": { @@ -27,7 +27,6 @@ func TestTemplate_GetGenerateTestFiles(t *testing.T) { }, }, } - _ = `// This file is generated by https://github.com/Mussabaheen/gogenswagger\n// Written by Malik Mussabeheen\npackage server\n\nimport \"testing\"\n\n// This is a comment\nfunc TestGetcreateserverinstanceReturns200(t *testing.T) {}\n` template.GenerateTestFiles(&json, "go") goFile, err := os.Open("../../generated/server/server_test.go") assert.Nil(t, err, "unable to open generated file") @@ -37,7 +36,7 @@ func TestTemplate_GetGenerateTestFiles(t *testing.T) { assert.Nil(t, err, "unable to open file") } func TestTemplate_PostGenerateTestFiles(t *testing.T) { - template := NewTemplate("../../internals/templates/golang.tmpl", "../../generated") + template := NewTemplate("templates/golang.tmpl", "../../generated") json := swagger.JSON{ Paths: map[string]swagger.Path{ "post": { @@ -54,7 +53,6 @@ func TestTemplate_PostGenerateTestFiles(t *testing.T) { }, }, } - _ = `// This file is generated by https://github.com/Mussabaheen/gogenswagger\n// Written by Malik Mussabeheen\npackage server\n\nimport \"testing\"\n\n// This is a comment\nfunc TestGetcreateserverinstanceReturns200(t *testing.T) {}\n` template.GenerateTestFiles(&json, "go") goFile, err := os.Open("../../generated/server/server_test.go") assert.Nil(t, err, "unable to open generated file") @@ -65,7 +63,7 @@ func TestTemplate_PostGenerateTestFiles(t *testing.T) { } func TestTemplate_UpdateGenerateTestFiles(t *testing.T) { - template := NewTemplate("../../internals/templates/golang.tmpl", "../../generated") + template := NewTemplate("templates/golang.tmpl", "../../generated") json := swagger.JSON{ Paths: map[string]swagger.Path{ "update": { @@ -82,7 +80,6 @@ func TestTemplate_UpdateGenerateTestFiles(t *testing.T) { }, }, } - _ = `// This file is generated by https://github.com/Mussabaheen/gogenswagger\n// Written by Malik Mussabeheen\npackage server\n\nimport \"testing\"\n\n// This is a comment\nfunc TestGetcreateserverinstanceReturns200(t *testing.T) {}\n` template.GenerateTestFiles(&json, "go") goFile, err := os.Open("../../generated/server/server_test.go") assert.Nil(t, err, "unable to open generated file") @@ -92,7 +89,7 @@ func TestTemplate_UpdateGenerateTestFiles(t *testing.T) { assert.Nil(t, err, "unable to open file") } func TestTemplate_DeleteGenerateTestFiles(t *testing.T) { - template := NewTemplate("../../internals/templates/golang.tmpl", "../../generated") + template := NewTemplate("templates/golang.tmpl", "../../generated") json := swagger.JSON{ Paths: map[string]swagger.Path{ "Delete": { @@ -109,7 +106,6 @@ func TestTemplate_DeleteGenerateTestFiles(t *testing.T) { }, }, } - _ = `// This file is generated by https://github.com/Mussabaheen/gogenswagger\n// Written by Malik Mussabeheen\npackage server\n\nimport \"testing\"\n\n// This is a comment\nfunc TestGetcreateserverinstanceReturns200(t *testing.T) {}\n` template.GenerateTestFiles(&json, "go") goFile, err := os.Open("../../generated/server/server_test.go") assert.Nil(t, err, "unable to open generated file") @@ -119,7 +115,7 @@ func TestTemplate_DeleteGenerateTestFiles(t *testing.T) { assert.Nil(t, err, "unable to open file") } func TestTemplate_PutGenerateTestFiles(t *testing.T) { - template := NewTemplate("../../internals/templates/golang.tmpl", "../../generated") + template := NewTemplate("templates/golang.tmpl", "../../generated") json := swagger.JSON{ Paths: map[string]swagger.Path{ "put": { @@ -136,7 +132,6 @@ func TestTemplate_PutGenerateTestFiles(t *testing.T) { }, }, } - _ = `// This file is generated by https://github.com/Mussabaheen/gogenswagger\n// Written by Malik Mussabeheen\npackage server\n\nimport \"testing\"\n\n// This is a comment\nfunc TestGetcreateserverinstanceReturns200(t *testing.T) {}\n` template.GenerateTestFiles(&json, "go") goFile, err := os.Open("../../generated/server/server_test.go") assert.Nil(t, err, "unable to open generated file") diff --git a/internals/templates/golang.tmpl b/internals/template/templates/golang.tmpl similarity index 100% rename from internals/templates/golang.tmpl rename to internals/template/templates/golang.tmpl diff --git a/internals/templates/nodejs.tmpl b/internals/template/templates/nodejs.tmpl similarity index 100% rename from internals/templates/nodejs.tmpl rename to internals/template/templates/nodejs.tmpl diff --git a/main.go b/main.go index b2f07de..7aa4f59 100644 --- a/main.go +++ b/main.go @@ -6,9 +6,9 @@ import ( "log" "os" + "github.com/Mussabaheen/gogenswagger/internals/template" "github.com/Mussabaheen/gogenswagger/pkg/language" "github.com/Mussabaheen/gogenswagger/pkg/swagger" - "github.com/Mussabaheen/gogenswagger/pkg/template" ) func main() { @@ -28,11 +28,11 @@ func main() { fmt.Scanln(&selectLanguage) language := language.NewLangugae(selectLanguage) - templatePath, fileExtension := language.Select() + tmplPath, fileExtension := language.Select() fetch := swagger.NewSwagger(jsonFile) jsonSwagger := fetch.JSONParser() - testGenerator := template.NewTemplate(templatePath, "./generated") + testGenerator := template.NewTemplate(tmplPath, "./generated") testGenerator.GenerateTestFiles(jsonSwagger, fileExtension) } diff --git a/pkg/language/language.go b/pkg/language/language.go index a2c2abf..665c3a0 100644 --- a/pkg/language/language.go +++ b/pkg/language/language.go @@ -4,8 +4,8 @@ package language import "log" var ( - nodejs = "internals/templates/nodejs.tmpl" - golang = "internals/templates/golang.tmpl" + nodejs = "templates/nodejs.tmpl" + golang = "templates/golang.tmpl" ) // Language handles the selection for language