141 lines
3.8 KiB
Go
141 lines
3.8 KiB
Go
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¶m2=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))
|
|
}
|