offline-twitter/pkg/webserver/handler_bookmarks_test.go
2025-02-15 19:46:10 -08:00

70 lines
2.0 KiB
Go

package webserver_test
import (
"testing"
"net/http/httptest"
"github.com/andybalholm/cascadia"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golang.org/x/net/html"
)
func TestBookmarksTab(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
resp := do_request_with_active_user(httptest.NewRequest("GET", "/bookmarks", nil))
require.Equal(resp.StatusCode, 200)
root, err := html.Parse(resp.Body)
require.NoError(err)
tweets := cascadia.QueryAll(root, selector(".timeline > .tweet"))
assert.Len(tweets, 2)
// With pagination
req := httptest.NewRequest("GET", "/bookmarks?cursor=1800452344077464795", nil)
req.Header.Set("HX-Request", "true")
resp = do_request_with_active_user(req)
require.Equal(resp.StatusCode, 200)
root, err = html.Parse(resp.Body)
require.NoError(err)
tweets = cascadia.QueryAll(root, selector(".tweet"))
assert.Len(tweets, 1)
}
// When scraping is disabled, should 401
func TestBookmarksScrape(t *testing.T) {
require := require.New(t)
// Attempt to scrape with scraping disabled
resp := do_request_with_active_user(httptest.NewRequest("GET", "/bookmarks?scrape", nil))
require.Equal(resp.StatusCode, 401)
}
// If cursor is invalid, it should 400
func TestBookmarksInvalidCursor(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
// HTMX version
req := httptest.NewRequest("GET", "/bookmarks?cursor=asdf", nil)
req.Header.Set("HX-Request", "true")
resp := do_request_with_active_user(req)
require.Equal(resp.StatusCode, 400)
// Piggyback in testing of HTMX 400 error toasts
assert.Equal("beforeend", resp.Header.Get("HX-Reswap"))
assert.Equal("#toasts", resp.Header.Get("HX-Retarget"))
assert.Equal("false", resp.Header.Get("HX-Push-Url"))
// Non-HTMX version
req1 := httptest.NewRequest("GET", "/bookmarks?cursor=asdf", nil)
resp1 := do_request_with_active_user(req1)
require.Equal(resp1.StatusCode, 400)
assert.Equal("", resp1.Header.Get("HX-Reswap"))
assert.Equal("", resp1.Header.Get("HX-Retarget"))
assert.Equal("", resp1.Header.Get("HX-Push-Url"))
}