swap tests
This commit is contained in:
parent
0a4bcfa7a3
commit
2d6ab078be
2 changed files with 233 additions and 0 deletions
141
framework/h/base_test.go
Normal file
141
framework/h/base_test.go
Normal 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¶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))
|
||||
}
|
||||
92
framework/h/xhr_test.go
Normal file
92
framework/h/xhr_test.go
Normal 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&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&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))
|
||||
}
|
||||
Loading…
Reference in a new issue