diff options
| -rw-r--r-- | internal/email/util.go | 12 | ||||
| -rw-r--r-- | internal/router/template.go | 22 | ||||
| -rw-r--r-- | testrig/router.go | 34 | 
3 files changed, 40 insertions, 28 deletions
diff --git a/internal/email/util.go b/internal/email/util.go index 52290dbe4..c543db755 100644 --- a/internal/email/util.go +++ b/internal/email/util.go @@ -28,14 +28,16 @@ import (  )  func loadTemplates(templateBaseDir string) (*template.Template, error) { -	cwd, err := os.Getwd() -	if err != nil { -		return nil, fmt.Errorf("error getting current working directory: %s", err) +	if !filepath.IsAbs(templateBaseDir) { +		cwd, err := os.Getwd() +		if err != nil { +			return nil, fmt.Errorf("error getting current working directory: %s", err) +		} +		templateBaseDir = filepath.Join(cwd, templateBaseDir)  	}  	// look for all templates that start with 'email_' -	tmPath := filepath.Join(cwd, fmt.Sprintf("%semail_*", templateBaseDir)) -	return template.ParseGlob(tmPath) +	return template.ParseGlob(filepath.Join(templateBaseDir, "email_*"))  }  // https://datatracker.ietf.org/doc/html/rfc2822 diff --git a/internal/router/template.go b/internal/router/template.go index 50d5f1a82..7cc9850e0 100644 --- a/internal/router/template.go +++ b/internal/router/template.go @@ -33,20 +33,22 @@ import (  // LoadTemplates loads html templates for use by the given engine  func loadTemplates(engine *gin.Engine) error { -	cwd, err := os.Getwd() -	if err != nil { -		return fmt.Errorf("error getting current working directory: %s", err) -	} -  	templateBaseDir := viper.GetString(config.Keys.WebTemplateBaseDir) -	_, err = os.Stat(filepath.Join(cwd, templateBaseDir, "index.tmpl")) -	if err != nil { -		return fmt.Errorf("%s doesn't seem to contain the templates; index.tmpl is missing: %s", filepath.Join(cwd, templateBaseDir), err) +	if !filepath.IsAbs(templateBaseDir) { +		cwd, err := os.Getwd() +		if err != nil { +			return fmt.Errorf("error getting current working directory: %w", err) +		} + +		templateBaseDir = filepath.Join(cwd, viper.GetString(config.Keys.WebTemplateBaseDir)) +	} + +	if _, err := os.Stat(filepath.Join(templateBaseDir, "index.tmpl")); err != nil { +		return fmt.Errorf("%s doesn't seem to contain the templates; index.tmpl is missing: %w", templateBaseDir, err)  	} -	tmPath := filepath.Join(cwd, fmt.Sprintf("%s*", templateBaseDir)) -	engine.LoadHTMLGlob(tmPath) +	engine.LoadHTMLGlob(fmt.Sprintf("%s*", templateBaseDir))  	return nil  } diff --git a/testrig/router.go b/testrig/router.go index 7f883cd6a..0064ce392 100644 --- a/testrig/router.go +++ b/testrig/router.go @@ -33,7 +33,14 @@ import (  )  // NewTestRouter returns a Router suitable for testing +// +// If the environment variable GTS_WEB_TEMPLATE_BASE_DIR set, it will take that +// value as the template base directory instead.  func NewTestRouter(db db.DB) router.Router { +	if alternativeTemplateBaseDir := os.Getenv("GTS_WEB_TEMPLATE_BASE_DIR"); alternativeTemplateBaseDir != "" { +		viper.Set(config.Keys.WebTemplateBaseDir, alternativeTemplateBaseDir) +	} +  	r, err := router.New(context.Background(), db)  	if err != nil {  		panic(err) @@ -43,23 +50,24 @@ func NewTestRouter(db db.DB) router.Router {  // ConfigureTemplatesWithGin will panic on any errors related to template loading during tests  func ConfigureTemplatesWithGin(engine *gin.Engine) { -  	router.LoadTemplateFunctions(engine) -	// https://stackoverflow.com/questions/31873396/is-it-possible-to-get-the-current-root-of-package-structure-as-a-string-in-golan -	_, runtimeCallerLocation, _, _ := runtime.Caller(0) -	projectRoot, err := filepath.Abs(filepath.Join(filepath.Dir(runtimeCallerLocation), "../")) -	if err != nil { -		panic(err) -	} -  	templateBaseDir := viper.GetString(config.Keys.WebTemplateBaseDir) -	_, err = os.Stat(filepath.Join(projectRoot, templateBaseDir, "index.tmpl")) -	if err != nil { -		panic(fmt.Errorf("%s doesn't seem to contain the templates; index.tmpl is missing: %s", filepath.Join(projectRoot, templateBaseDir), err)) +	if !filepath.IsAbs(templateBaseDir) { +		// https://stackoverflow.com/questions/31873396/is-it-possible-to-get-the-current-root-of-package-structure-as-a-string-in-golan +		_, runtimeCallerLocation, _, _ := runtime.Caller(0) +		projectRoot, err := filepath.Abs(filepath.Join(filepath.Dir(runtimeCallerLocation), "../")) +		if err != nil { +			panic(err) +		} + +		templateBaseDir = filepath.Join(projectRoot, templateBaseDir) +	} + +	if _, err := os.Stat(filepath.Join(templateBaseDir, "index.tmpl")); err != nil { +		panic(fmt.Errorf("%s doesn't seem to contain the templates; index.tmpl is missing: %w", templateBaseDir, err))  	} -	tmPath := filepath.Join(projectRoot, fmt.Sprintf("%s*", templateBaseDir)) -	engine.LoadHTMLGlob(tmPath) +	engine.LoadHTMLGlob(filepath.Join(templateBaseDir, "*"))  }  | 
