learnlytics-go/templ/generator/test-css-middleware/render_test.go

82 lines
1.6 KiB
Go
Raw Normal View History

2025-03-20 12:35:13 +01:00
package testcssmiddleware
import (
_ "embed"
"fmt"
"net/http/httptest"
"strings"
"sync"
"testing"
"github.com/a-h/htmlformat"
"github.com/a-h/templ"
"github.com/google/go-cmp/cmp"
)
//go:embed expected.html
var expected string
var expectedCSS = `.red_050e5e03{color:red;}
`
func Test(t *testing.T) {
var errs []error
var wg sync.WaitGroup
wg.Add(3)
// Format the expected value.
go func() {
defer wg.Done()
e := new(strings.Builder)
err := htmlformat.Fragment(e, strings.NewReader(expected))
if err != nil {
errs = append(errs, fmt.Errorf("expected html formatting error: %w", err))
}
expected = e.String()
}()
component := render("Red text")
h := templ.Handler(component)
cssmw := templ.NewCSSMiddleware(h, red())
// Create the actual value.
var actual string
go func() {
defer wg.Done()
w := httptest.NewRecorder()
cssmw.ServeHTTP(w, httptest.NewRequest("GET", "/", nil))
a := new(strings.Builder)
err := htmlformat.Fragment(a, w.Body)
if err != nil {
errs = append(errs, fmt.Errorf("actual html formatting error: %w", err))
}
actual = a.String()
}()
var actualCSS string
go func() {
defer wg.Done()
w := httptest.NewRecorder()
cssmw.ServeHTTP(w, httptest.NewRequest("GET", "/styles/templ.css", nil))
a := new(strings.Builder)
err := htmlformat.Fragment(a, w.Body)
if err != nil {
errs = append(errs, fmt.Errorf("actual html formatting error: %w", err))
}
actualCSS = a.String()
}()
wg.Wait()
if diff := cmp.Diff(expected, actual); diff != "" {
t.Error(diff)
}
if diff := cmp.Diff(expectedCSS, actualCSS); diff != "" {
t.Error(diff)
}
}