1
mirror of https://github.com/jlelse/GoBlog synced 2024-05-30 11:34:27 +00:00
GoBlog/webmentionVerification_test.go

162 lines
5.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"net/http"
"os"
"strings"
"testing"
"github.com/stretchr/testify/require"
)
func Test_verifyMention(t *testing.T) {
testHtmlBytes, err := os.ReadFile("testdata/wmtest.html")
require.NoError(t, err)
testHtml := string(testHtmlBytes)
mockClient := newFakeHttpClient()
mockClient.setFakeResponse(http.StatusOK, testHtml)
app := &goBlog{
httpClient: mockClient.Client,
cfg: createDefaultTestConfig(t),
d: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if strings.HasSuffix(r.URL.Path, "/") {
http.Redirect(w, r, r.URL.Path[:len(r.URL.Path)-1], http.StatusFound)
}
}),
}
app.cfg.Server.PublicAddress = "https://example.org"
_ = app.initConfig(false)
m := &mention{
Source: "https://example.net/articles/micropub-crossposting-to-twitter-and-enabling-tweetstorms",
Target: "https://example.org/articles/micropub-syndication-targets-and-crossposting-to-mastodon/",
}
err = app.verifyMention(m)
require.NoError(t, err)
require.Equal(t, "https://example.org/articles/micropub-syndication-targets-and-crossposting-to-mastodon", m.Target)
require.Equal(t, "https://example.net/articles/micropub-crossposting-to-twitter-and-enabling-tweetstorms", m.Source)
require.Equal(t, "https://example.net/articles/micropub-crossposting-to-twitter-and-enabling-tweetstorms", m.Url)
require.Equal(t, "Micropub, Crossposting to Twitter, and Enabling “Tweetsto…", m.Title)
require.Equal(t, "Ive previously talked about how I crosspost from this blog to my Mastodon account without the need for a third-party service, and how I leverage WordPresss hook system to even enable toot threading. In this post, Im going to really quickly explain my (extremely similar) Twitter setup. (Note: I dont actually syndicate this blogs posts to Twitter, but I do use this very setup on another site of mine.) I liked the idea of a dead-simple Twitter plugin, so I forked my Mastodon plugin and twea…", m.Content)
require.Equal(t, "Test Blogger", m.Author)
err = app.verifyMention(m)
require.NoError(t, err)
}
func Test_verifyMentionBridgy(t *testing.T) {
testHtmlBytes, err := os.ReadFile("testdata/bridgy.html")
require.NoError(t, err)
testHtml := string(testHtmlBytes)
mockClient := newFakeHttpClient()
mockClient.setFakeResponse(http.StatusOK, testHtml)
app := &goBlog{
httpClient: mockClient.Client,
cfg: createDefaultTestConfig(t),
d: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// do nothing
}),
}
app.cfg.Server.PublicAddress = "https://example.org"
_ = app.initConfig(false)
m := &mention{
Source: "https://example.com/abc",
Target: "https://example.org/walks/2021/11/9k-local-run",
}
err = app.verifyMention(m)
require.NoError(t, err)
require.Equal(t, "https://example.org/walks/2021/11/9k-local-run", m.Target)
require.Equal(t, "https://example.com/abc", m.Source)
require.Equal(t, "https://example.net/notice/ADYb7HhxE6UzPpfFiK", m.Url)
require.Equal(t, "", m.Title)
require.Equal(t, "comment test", m.Content)
require.Equal(t, "m4rk", m.Author)
}
func Test_verifyMastodonLikeBridgy(t *testing.T) {
testHtmlBytes, err := os.ReadFile("testdata/bridgymastodon.html")
require.NoError(t, err)
testHtml := string(testHtmlBytes)
mockClient := newFakeHttpClient()
mockClient.setFakeResponse(http.StatusOK, testHtml)
app := &goBlog{
httpClient: mockClient.Client,
cfg: createDefaultTestConfig(t),
d: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// do nothing
}),
}
app.cfg.Server.PublicAddress = "https://example.org"
_ = app.initConfig(false)
m := &mention{
Source: "https://example.com/@abc/109404425715413954#favorited-by-327512",
Target: "https://example.org/notes/2022-11-25-yijsn",
}
err = app.verifyMention(m)
require.NoError(t, err)
require.Equal(t, "https://example.org/notes/2022-11-25-yijsn", m.Target)
require.Equal(t, "https://example.com/@abc/109404425715413954#favorited-by-327512", m.Source)
require.Equal(t, "https://example.com/@abc/109404425715413954#favorited-by-327512", m.Url)
require.Equal(t, "Bridgy Response", m.Title)
require.Equal(t, "", m.Content)
require.Equal(t, "Jan-Lukas Else", m.Author)
}
func Test_verifyMentionColin(t *testing.T) {
testHtmlBytes, err := os.ReadFile("testdata/colin.html")
require.NoError(t, err)
testHtml := string(testHtmlBytes)
mockClient := newFakeHttpClient()
mockClient.setFakeResponse(http.StatusOK, testHtml)
app := &goBlog{
httpClient: mockClient.Client,
cfg: createDefaultTestConfig(t),
d: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// do nothing
}),
}
app.cfg.Server.PublicAddress = "https://jlelse.blog"
err = app.initConfig(false)
require.NoError(t, err)
m := &mention{
Source: "https://colinwalker.blog/?date=2021-11-14#p3",
Target: "https://jlelse.blog/micro/2021/11/2021-11-13-lrhvj",
}
err = app.verifyMention(m)
require.NoError(t, err)
require.Equal(t, "https://jlelse.blog/micro/2021/11/2021-11-13-lrhvj", m.Target)
require.Equal(t, "https://colinwalker.blog/?date=2021-11-14#p3", m.Source)
require.Equal(t, "https://colinwalker.blog/?date=2021-11-14#p3", m.Url)
require.True(t, strings.HasPrefix(m.Title, "Congratulations"))
require.True(t, strings.HasPrefix(m.Content, "Congratulations"))
require.Equal(t, "Colin Walker", m.Author)
}