swap tests

This commit is contained in:
maddalax 2024-10-31 11:59:19 -05:00
parent 0a4bcfa7a3
commit 2d6ab078be
2 changed files with 233 additions and 0 deletions

141
framework/h/base_test.go Normal file
View file

@ -0,0 +1,141 @@
package h
import (
"github.com/maddalax/htmgo/framework/hx"
"net/http"
"testing"
"github.com/stretchr/testify/assert"
)
func TestNewPage(t *testing.T) {
root := Div()
page := NewPage(root)
assert.Equal(t, http.MethodGet, page.HttpMethod)
assert.Equal(t, root, page.Root)
}
func TestEmptyPage(t *testing.T) {
page := EmptyPage()
assert.Equal(t, http.MethodGet, page.HttpMethod)
assert.Equal(t, Empty(), page.Root)
}
func TestNewPageWithHttpMethod(t *testing.T) {
root := Div()
page := NewPageWithHttpMethod(http.MethodPost, root)
assert.Equal(t, http.MethodPost, page.HttpMethod)
assert.Equal(t, root, page.Root)
}
func TestNewPartial(t *testing.T) {
root := Div()
partial := NewPartial(root)
assert.Nil(t, partial.Headers)
assert.Equal(t, root, partial.Root)
}
func TestNewPartialWithHeaders(t *testing.T) {
root := Div()
headers := NewHeaders("Content-Type", "application/json")
partial := NewPartialWithHeaders(headers, root)
assert.Equal(t, headers, partial.Headers)
assert.Equal(t, root, partial.Root)
}
func TestSwapManyPartialWithHeaders(t *testing.T) {
ctx := &RequestContext{isHxRequest: true}
headers := NewHeaders("HX-Trigger", "reload")
elements := []*Element{Div(), Span()}
partial := SwapManyPartialWithHeaders(ctx, headers, elements...)
assert.Equal(t, headers, partial.Headers)
assert.Equal(t, SwapMany(ctx, elements...), partial.Root)
}
func TestRedirectPartial(t *testing.T) {
partial := RedirectPartial("/new-path")
headers := NewHeaders("HX-Redirect", "/new-path")
assert.Equal(t, headers, partial.Headers)
assert.Equal(t, Empty(), partial.Root)
}
func TestRedirectPartialWithHeaders(t *testing.T) {
extraHeaders := NewHeaders("X-Custom", "value")
partial := RedirectPartialWithHeaders("/redirect-path", extraHeaders)
expectedHeaders := NewHeaders("HX-Redirect", "/redirect-path", "X-Custom", "value")
assert.Equal(t, expectedHeaders, partial.Headers)
assert.Equal(t, Empty(), partial.Root)
}
func TestIsEmptyPartial(t *testing.T) {
emptyPartial := EmptyPartial()
nonEmptyPartial := NewPartial(Div())
assert.True(t, IsEmptyPartial(emptyPartial))
assert.False(t, IsEmptyPartial(nonEmptyPartial))
}
func TestGetPartialPath(t *testing.T) {
partial := func(ctx *RequestContext) *Partial {
return &Partial{}
}
path := GetPartialPath(partial)
expectedSegment := "github.com/maddalax/htmgo/framework/h.TestGetPartialPath.func1"
assert.Contains(t, path, expectedSegment)
}
func TestGetPartialPathWithQs(t *testing.T) {
partial := func(ctx *RequestContext) *Partial {
return &Partial{}
}
qs := NewQs("param1", "value1", "param2", "value2")
pathWithQs := GetPartialPathWithQs(partial, qs)
assert.Contains(t, pathWithQs, "param1=value1&param2=value2")
}
func TestSwapManyPartial(t *testing.T) {
ctx := &RequestContext{isHxRequest: true}
element1 := Div()
element2 := Span()
partial := SwapManyPartial(ctx, element1, element2)
// Ensuring the elements have been marked for swap
assert.Equal(t, 1, len(element1.children))
assert.Equal(t, 1, len(element2.children))
assert.Equal(t, Attribute(hx.SwapOobAttr, hx.SwapTypeTrue), element1.children[0])
assert.Equal(t, Attribute(hx.SwapOobAttr, hx.SwapTypeTrue), element2.children[0])
// Test with non-HX request context
ctx.isHxRequest = false
partial = SwapManyPartial(ctx, element1, element2)
assert.True(t, IsEmptyPartial(partial))
}
func TestSwapPartial(t *testing.T) {
ctx := &RequestContext{isHxRequest: true}
element := Div()
partial := SwapPartial(ctx, element)
// Ensuring the element has been marked for swap
assert.Equal(t, 1, len(element.children))
assert.Equal(t, Attribute(hx.SwapOobAttr, hx.SwapTypeTrue), element.children[0])
// Test with non-HX request context
ctx.isHxRequest = false
partial = SwapPartial(ctx, element)
assert.True(t, IsEmptyPartial(partial))
}

92
framework/h/xhr_test.go Normal file
View file

@ -0,0 +1,92 @@
package h
import (
"github.com/stretchr/testify/assert"
"testing"
)
func TestGet(t *testing.T) {
attr := Div(Get("/path", "load"))
assert.Equal(t, `<div hx-get="/path" hx-trigger="load"></div>`, Render(attr))
}
func TestGetPartial(t *testing.T) {
partial := func(ctx *RequestContext) *Partial {
return &Partial{}
}
attr := Div(GetPartial(partial, "load"))
expected := Render(Div(Get(GetPartialPath(partial), "load")))
assert.Equal(t, expected, Render(attr))
}
func TestGetPartialWithQs(t *testing.T) {
partial := func(ctx *RequestContext) *Partial {
return &Partial{}
}
qs := NewQs("param", "value")
attr := Div(GetPartialWithQs(partial, qs, "load"))
expectedPath := Render(Div(Get(GetPartialPathWithQs(partial, qs), "load")))
assert.Equal(t, expectedPath, Render(attr))
}
func TestPost(t *testing.T) {
attr := Div(Post("/path", "submit"))
assert.Equal(t, `<div hx-post="/path" hx-trigger="submit"></div>`, Render(attr))
}
func TestPostOnClick(t *testing.T) {
attr := Div(PostOnClick("/path"))
assert.Equal(t, `<div hx-post="/path" hx-trigger="click"></div>`, Render(attr))
}
func TestPostPartialOnClick(t *testing.T) {
partial := func(ctx *RequestContext) *Partial {
return &Partial{}
}
attr := Div(PostPartialOnClick(partial))
expected := Render(Div(PostOnClick(GetPartialPath(partial))))
assert.Equal(t, expected, Render(attr))
}
func TestPostPartialWithQs(t *testing.T) {
partial := func(ctx *RequestContext) *Partial {
return &Partial{}
}
qs := NewQs("key", "value")
attr := Div(PostPartialWithQs(partial, qs, "click"))
expected := Render(Div(Post(GetPartialPathWithQs(partial, qs), "click")))
assert.Equal(t, expected, Render(attr))
}
func TestPostPartialOnClickQs(t *testing.T) {
partial := func(ctx *RequestContext) *Partial {
return &Partial{}
}
qs := NewQs("key", "value")
attr := Div(PostPartialOnClickQs(partial, qs))
expected := Render(Div(PostOnClick(GetPartialPathWithQs(partial, qs))))
assert.Equal(t, expected, Render(attr))
}
func TestGetWithQs(t *testing.T) {
qs := NewQs("param1", "value1", "param2", "value2")
attr := Div(GetWithQs("/path", qs, "load"))
expected := `<div hx-get="/path?param1=value1&amp;param2=value2" hx-trigger="load"></div>`
assert.Equal(t, expected, Render(attr))
}
func TestPostWithQs(t *testing.T) {
qs := NewQs("param1", "value1", "param2", "value2")
attr := Div(PostWithQs("/path", qs, "submit"))
expected := `<div hx-post="/path?param1=value1&amp;param2=value2" hx-trigger="submit"></div>`
assert.Equal(t, expected, Render(attr))
}
func TestPostPartial(t *testing.T) {
partial := func(ctx *RequestContext) *Partial {
return &Partial{}
}
attr := Div(PostPartial(partial, "submit"))
expected := Render(Div(Post(GetPartialPath(partial), "submit")))
assert.Equal(t, expected, Render(attr))
}