From ef719f74da300611ea874e56b4527e9dc6f466ad Mon Sep 17 00:00:00 2001 From: Tony Grosinger Date: Fri, 19 Jul 2024 20:44:09 -0700 Subject: [PATCH] Most tests passing except templating ones --- pkg/middleware/cache_test.go | 9 ++- pkg/{services => models}/posts.go | 4 +- pkg/{services => models}/users.go | 4 +- pkg/services/db.go | 9 +-- templ/layouts/htmx.templ | 9 +++ templ/layouts/htmx_templ.go | 39 ++++++++++++ templ/pages/home.templ | 4 +- templ/pages/home_templ.go | 4 +- templates/components/core.gohtml | 42 ------------- templates/components/forms.gohtml | 9 --- templates/components/messages.gohtml | 21 ------- templates/layouts/auth.gohtml | 35 ----------- templates/layouts/htmx.gohtml | 1 - templates/layouts/main.gohtml | 92 ---------------------------- templates/templates_test.go | 5 +- 15 files changed, 70 insertions(+), 217 deletions(-) rename pkg/{services => models}/posts.go (95%) rename pkg/{services => models}/users.go (85%) create mode 100644 templ/layouts/htmx.templ create mode 100644 templ/layouts/htmx_templ.go delete mode 100644 templates/components/core.gohtml delete mode 100644 templates/components/forms.gohtml delete mode 100644 templates/components/messages.gohtml delete mode 100644 templates/layouts/auth.gohtml delete mode 100644 templates/layouts/htmx.gohtml delete mode 100644 templates/layouts/main.gohtml diff --git a/pkg/middleware/cache_test.go b/pkg/middleware/cache_test.go index 7cc7ee3..b71db96 100644 --- a/pkg/middleware/cache_test.go +++ b/pkg/middleware/cache_test.go @@ -5,11 +5,14 @@ import ( "testing" "time" + "github.com/a-h/templ" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "git.grosinger.net/tgrosinger/saasitone/pkg/page" "git.grosinger.net/tgrosinger/saasitone/pkg/tests" + "git.grosinger.net/tgrosinger/saasitone/templ/pages" + "git.grosinger.net/tgrosinger/saasitone/templ/layouts" "git.grosinger.net/tgrosinger/saasitone/templates" ) @@ -17,14 +20,16 @@ func TestServeCachedPage(t *testing.T) { // Cache a page ctx, rec := tests.NewContext(c.Web, "/cache") p := page.New(ctx) - p.Layout = templates.LayoutHTMX p.Name = templates.PageHome p.Cache.Enabled = true p.Cache.Expiration = time.Minute p.StatusCode = http.StatusCreated p.Headers["a"] = "b" p.Headers["c"] = "d" - err := c.TemplateRenderer.RenderPage(ctx, p) + p.LayoutComponent = func(content templ.Component) templ.Component { + return layouts.HTMX(p, content) + } + err := c.TemplateRenderer.RenderPageTempl(ctx, p, pages.Cache(p, &pages.CacheForm{}, nil)) output := rec.Body.Bytes() require.NoError(t, err) diff --git a/pkg/services/posts.go b/pkg/models/posts.go similarity index 95% rename from pkg/services/posts.go rename to pkg/models/posts.go index a8206b8..04c6887 100644 --- a/pkg/services/posts.go +++ b/pkg/models/posts.go @@ -1,4 +1,4 @@ -package services +package models import ( "database/sql" @@ -13,7 +13,7 @@ type Post struct { } type DBPostClient struct { - db *sql.DB + DB *sql.DB } // FetchAll is an mock example of fetching posts to illustrate how paging works diff --git a/pkg/services/users.go b/pkg/models/users.go similarity index 85% rename from pkg/services/users.go rename to pkg/models/users.go index 2672327..19bb479 100644 --- a/pkg/services/users.go +++ b/pkg/models/users.go @@ -1,9 +1,9 @@ -package services +package models import "database/sql" // UserClient is a struct that can be used to create custom methods for // interacting with users in the database. type DBUserClient struct { - db *sql.DB + DB *sql.DB } diff --git a/pkg/services/db.go b/pkg/services/db.go index 54e2ef3..acdd754 100644 --- a/pkg/services/db.go +++ b/pkg/services/db.go @@ -10,6 +10,7 @@ import ( "github.com/golang-migrate/migrate/v4/source/file" "git.grosinger.net/tgrosinger/saasitone/config" + "git.grosinger.net/tgrosinger/saasitone/pkg/models" "git.grosinger.net/tgrosinger/saasitone/pkg/models/sqlc" ) @@ -17,8 +18,8 @@ type DBClient struct { db *sql.DB C *sqlc.Queries - User *DBUserClient - Post *DBPostClient + User *models.DBUserClient + Post *models.DBPostClient } func NewDBClient(cfg *config.Config) (*DBClient, error) { @@ -43,8 +44,8 @@ func NewDBClient(cfg *config.Config) (*DBClient, error) { db: db, C: sqlc.New(db), } - client.User = &DBUserClient{db: db} - client.Post = &DBPostClient{db: db} + client.User = &models.DBUserClient{DB: db} + client.Post = &models.DBPostClient{DB: db} migrationsDirPath := cfg.Storage.MigrationsDir logger.Info("Loading schema migrations", diff --git a/templ/layouts/htmx.templ b/templ/layouts/htmx.templ new file mode 100644 index 0000000..24b427a --- /dev/null +++ b/templ/layouts/htmx.templ @@ -0,0 +1,9 @@ +package layouts + +import ( + "git.grosinger.net/tgrosinger/saasitone/pkg/page" +) + +templ HTMX(p page.Page, content templ.Component) { + @content +} diff --git a/templ/layouts/htmx_templ.go b/templ/layouts/htmx_templ.go new file mode 100644 index 0000000..bc59312 --- /dev/null +++ b/templ/layouts/htmx_templ.go @@ -0,0 +1,39 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.2.707 +package layouts + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import "context" +import "io" +import "bytes" + +import ( + "git.grosinger.net/tgrosinger/saasitone/pkg/page" +) + +func HTMX(p page.Page, content templ.Component) templ.Component { + return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) { + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer) + if !templ_7745c5c3_IsBuffer { + templ_7745c5c3_Buffer = templ.GetBuffer() + defer templ.ReleaseBuffer(templ_7745c5c3_Buffer) + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var1 := templ.GetChildren(ctx) + if templ_7745c5c3_Var1 == nil { + templ_7745c5c3_Var1 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = content.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + if !templ_7745c5c3_IsBuffer { + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W) + } + return templ_7745c5c3_Err + }) +} diff --git a/templ/pages/home.templ b/templ/pages/home.templ index ec50634..b25625d 100644 --- a/templ/pages/home.templ +++ b/templ/pages/home.templ @@ -4,11 +4,11 @@ import ( "strconv" "git.grosinger.net/tgrosinger/saasitone/pkg/page" - "git.grosinger.net/tgrosinger/saasitone/pkg/services" + "git.grosinger.net/tgrosinger/saasitone/pkg/models" "git.grosinger.net/tgrosinger/saasitone/pkg/funcmap" ) -templ Home(p page.Page, posts []services.Post) { +templ Home(p page.Page, posts []models.Post) { if (p.HTMX.Request.Target != "posts") { @topContent(p) } diff --git a/templ/pages/home_templ.go b/templ/pages/home_templ.go index 6e95148..2cc91fa 100644 --- a/templ/pages/home_templ.go +++ b/templ/pages/home_templ.go @@ -14,11 +14,11 @@ import ( "strconv" "git.grosinger.net/tgrosinger/saasitone/pkg/funcmap" + "git.grosinger.net/tgrosinger/saasitone/pkg/models" "git.grosinger.net/tgrosinger/saasitone/pkg/page" - "git.grosinger.net/tgrosinger/saasitone/pkg/services" ) -func Home(p page.Page, posts []services.Post) templ.Component { +func Home(p page.Page, posts []models.Post) templ.Component { return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) { templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer) if !templ_7745c5c3_IsBuffer { diff --git a/templates/components/core.gohtml b/templates/components/core.gohtml deleted file mode 100644 index 0eb2f69..0000000 --- a/templates/components/core.gohtml +++ /dev/null @@ -1,42 +0,0 @@ -{{define "metatags"}} - {{ .AppName }}{{ if .Title }} | {{ .Title }}{{ end }} - - - - - {{- if .Metatags.Description}} - - {{- end}} - {{- if .Metatags.Keywords}} - - {{- end}} -{{end}} - -{{define "css"}} - -{{end}} - -{{define "js"}} - - -{{end}} - -{{define "footer"}} - {{- if .CSRF}} - - {{end}} - -{{end}} \ No newline at end of file diff --git a/templates/components/forms.gohtml b/templates/components/forms.gohtml deleted file mode 100644 index d67e716..0000000 --- a/templates/components/forms.gohtml +++ /dev/null @@ -1,9 +0,0 @@ -{{define "csrf"}} - -{{end}} - -{{define "field-errors"}} - {{- range .}} -

{{.}}

- {{- end}} -{{end}} \ No newline at end of file diff --git a/templates/components/messages.gohtml b/templates/components/messages.gohtml deleted file mode 100644 index ba0dd5a..0000000 --- a/templates/components/messages.gohtml +++ /dev/null @@ -1,21 +0,0 @@ -{{define "messages"}} - {{- range (.GetMessages "success")}} - {{template "message" dict "Type" "success" "Text" .}} - {{- end}} - {{- range (.GetMessages "info")}} - {{template "message" dict "Type" "info" "Text" .}} - {{- end}} - {{- range (.GetMessages "warning")}} - {{template "message" dict "Type" "warning" "Text" .}} - {{- end}} - {{- range (.GetMessages "danger")}} - {{template "message" dict "Type" "danger" "Text" .}} - {{- end}} -{{end}} - -{{define "message"}} -
- - {{.Text}} -
-{{end}} \ No newline at end of file diff --git a/templates/layouts/auth.gohtml b/templates/layouts/auth.gohtml deleted file mode 100644 index f315402..0000000 --- a/templates/layouts/auth.gohtml +++ /dev/null @@ -1,35 +0,0 @@ - - - - {{template "metatags" .}} - {{template "css" .}} - {{template "js" .}} - - -
-
-
-
-
- {{- if .Title}} -

{{.Title}}

- {{- end}} -
- {{template "messages" .}} - {{template "content" .}} - - -
-
-
-
-
-
- - {{template "footer" .}} - - \ No newline at end of file diff --git a/templates/layouts/htmx.gohtml b/templates/layouts/htmx.gohtml deleted file mode 100644 index 9846ca5..0000000 --- a/templates/layouts/htmx.gohtml +++ /dev/null @@ -1 +0,0 @@ -{{template "content" .}} \ No newline at end of file diff --git a/templates/layouts/main.gohtml b/templates/layouts/main.gohtml deleted file mode 100644 index 66f872b..0000000 --- a/templates/layouts/main.gohtml +++ /dev/null @@ -1,92 +0,0 @@ - - - - {{template "metatags" .}} - {{template "css" .}} - {{template "js" .}} - - - - -
-
-
- -
- -
-
- {{- if .Title}} -

{{.Title}}

- {{- end}} - - {{template "messages" .}} - {{template "content" .}} -
-
-
-
- - {{template "footer" .}} - - - -{{define "search"}} - -{{end}} \ No newline at end of file diff --git a/templates/templates_test.go b/templates/templates_test.go index 9b28e34..030c722 100644 --- a/templates/templates_test.go +++ b/templates/templates_test.go @@ -1,18 +1,17 @@ package templates import ( - "fmt" "testing" "github.com/stretchr/testify/require" ) func TestGet(t *testing.T) { - _, err := Get().Open(fmt.Sprintf("pages/%s.gohtml", PageHome)) + _, err := Get().Open("emails/test.gohtml") require.NoError(t, err) } func TestGetOS(t *testing.T) { - _, err := GetOS().Open(fmt.Sprintf("pages/%s.gohtml", PageHome)) + _, err := GetOS().Open("emails/test.gohtml") require.NoError(t, err) }