From 5dcca9464b78fefdffd41b0f2971dea986e2b8d2 Mon Sep 17 00:00:00 2001 From: Alessio Date: Mon, 9 Dec 2024 12:37:12 -0800 Subject: [PATCH] Add more non-happy-path HTTP tests (round #2) --- internal/webserver/handler_follow_unfollow.go | 2 ++ internal/webserver/handler_lists_test.go | 2 +- internal/webserver/handler_search.go | 2 -- internal/webserver/handler_search_test.go | 15 +++++++++++++-- internal/webserver/handler_timeline.go | 2 ++ internal/webserver/handler_timeline_test.go | 11 ++++++----- internal/webserver/handler_user_feed_test.go | 10 ++++------ 7 files changed, 28 insertions(+), 16 deletions(-) diff --git a/internal/webserver/handler_follow_unfollow.go b/internal/webserver/handler_follow_unfollow.go index f685cc1..83ac035 100644 --- a/internal/webserver/handler_follow_unfollow.go +++ b/internal/webserver/handler_follow_unfollow.go @@ -7,6 +7,8 @@ import ( "gitlab.com/offline-twitter/twitter_offline_engine/pkg/scraper" ) +// TODO: deprecated-offline-follows + func (app *Application) UserFollow(w http.ResponseWriter, r *http.Request) { app.traceLog.Printf("'UserFollow' handler (path: %q)", r.URL.Path) diff --git a/internal/webserver/handler_lists_test.go b/internal/webserver/handler_lists_test.go index bc4eb40..cf0971d 100644 --- a/internal/webserver/handler_lists_test.go +++ b/internal/webserver/handler_lists_test.go @@ -100,7 +100,7 @@ func TestListAddAndDeleteUser(t *testing.T) { assert.Len(cascadia.QueryAll(root, selector(".users-list .author-info")), 3) // Delete a user - resp_remove := do_request(httptest.NewRequest("GET", "/lists/2/remove_user?user_handle=cernovich", nil)) + resp_remove := do_request(httptest.NewRequest("GET", "/lists/2/remove_user?user_handle=@cernovich", nil)) require.Equal(resp_remove.StatusCode, 302) require.Equal("/lists/2/users", resp_remove.Header.Get("Location")) diff --git a/internal/webserver/handler_search.go b/internal/webserver/handler_search.go index 2f5c5b8..39371ea 100644 --- a/internal/webserver/handler_search.go +++ b/internal/webserver/handler_search.go @@ -52,7 +52,6 @@ func (app *Application) Search(w http.ResponseWriter, r *http.Request) { if search_text == "" { app.error_400_with_message(w, r, "Empty search query") return - // TODO: return an actual page } http.Redirect(w, r, fmt.Sprintf("/search/%s", url.PathEscape(search_text)), 302) return @@ -116,7 +115,6 @@ func (app *Application) Search(w http.ResponseWriter, r *http.Request) { if err != nil { app.error_400_with_message(w, r, err.Error()) return - // TODO: return actual page } err = parse_cursor_value(&c, r) if err != nil { diff --git a/internal/webserver/handler_search_test.go b/internal/webserver/handler_search_test.go index 2bcae20..25f0481 100644 --- a/internal/webserver/handler_search_test.go +++ b/internal/webserver/handler_search_test.go @@ -52,11 +52,22 @@ func TestSearchWithCursor(t *testing.T) { assert.Len(cascadia.QueryAll(root, selector(".timeline > .tweet")), 3) // Add a cursor with the 1st tweet's posted_at time - resp = do_request(httptest.NewRequest("GET", "/search/who%20are?cursor=1628979529000", nil)) + req := httptest.NewRequest("GET", "/search/who%20are?cursor=1628979529000", nil) + req.Header.Set("HX-Request", "true") + resp = do_request(req) require.Equal(resp.StatusCode, 200) root, err = html.Parse(resp.Body) require.NoError(err) - assert.Len(cascadia.QueryAll(root, selector(".timeline > .tweet")), 2) + assert.Len(cascadia.QueryAll(root, selector(":not(.tweet__quoted-tweet) > .tweet")), 2) +} + +func TestSearchWithInvalidCursorShould400(t *testing.T) { + require := require.New(t) + + req := httptest.NewRequest("GET", "/search/who%20are?cursor=asdf", nil) + req.Header.Set("HX-Request", "true") + resp := do_request(req) + require.Equal(resp.StatusCode, 400) } func TestSearchWithSortOrder(t *testing.T) { diff --git a/internal/webserver/handler_timeline.go b/internal/webserver/handler_timeline.go index a4d0c51..4ceb4d1 100644 --- a/internal/webserver/handler_timeline.go +++ b/internal/webserver/handler_timeline.go @@ -14,6 +14,8 @@ type TimelineData struct { ActiveTab string } +// TODO: deprecated-offline-follows + func (app *Application) OfflineTimeline(w http.ResponseWriter, r *http.Request) { app.traceLog.Printf("'Timeline' handler (path: %q)", r.URL.Path) diff --git a/internal/webserver/handler_timeline_test.go b/internal/webserver/handler_timeline_test.go index 38e6d4f..5cccd24 100644 --- a/internal/webserver/handler_timeline_test.go +++ b/internal/webserver/handler_timeline_test.go @@ -11,6 +11,8 @@ import ( "golang.org/x/net/html" ) +// TODO: deprecated-offline-follows + func TestTimeline(t *testing.T) { assert := assert.New(t) require := require.New(t) @@ -31,15 +33,14 @@ func TestTimelineWithCursor(t *testing.T) { assert := assert.New(t) require := require.New(t) - resp := do_request(httptest.NewRequest("GET", "/timeline/offline?cursor=1631935701000", nil)) + req := httptest.NewRequest("GET", "/timeline/offline?cursor=1631935701000", nil) + req.Header.Set("HX-Request", "true") + resp := do_request(req) require.Equal(resp.StatusCode, 200) root, err := html.Parse(resp.Body) require.NoError(err) - title_node := cascadia.Query(root, selector("title")) - assert.Equal(title_node.FirstChild.Data, "Timeline | Offline Twitter") - - tweet_nodes := cascadia.QueryAll(root, selector(".timeline > .tweet")) + tweet_nodes := cascadia.QueryAll(root, selector(":not(.tweet__quoted-tweet) > .tweet")) assert.Len(tweet_nodes, 10) } diff --git a/internal/webserver/handler_user_feed_test.go b/internal/webserver/handler_user_feed_test.go index c8e3c4c..643edd9 100644 --- a/internal/webserver/handler_user_feed_test.go +++ b/internal/webserver/handler_user_feed_test.go @@ -54,16 +54,14 @@ func TestUserFeedWithCursor(t *testing.T) { require := require.New(t) // With a cursor - resp := do_request(httptest.NewRequest("GET", "/cernovich?cursor=1631935701000", nil)) + req := httptest.NewRequest("GET", "/cernovich?cursor=1631935701000", nil) + req.Header.Set("HX-Request", "true") + resp := do_request(req) require.Equal(resp.StatusCode, 200) root, err := html.Parse(resp.Body) require.NoError(err) - title_node := cascadia.Query(root, selector("title")) - assert.Equal(title_node.FirstChild.Data, "@Cernovich | Offline Twitter") - - tweet_nodes := cascadia.QueryAll(root, selector(".timeline > .tweet")) - assert.Len(tweet_nodes, 2) + assert.Len(cascadia.QueryAll(root, selector(":not(.tweet__quoted-tweet) > .tweet")), 2) } func TestUserFeedWithCursorBadNumber(t *testing.T) {