mirror of
https://github.com/aljazceru/njump.git
synced 2025-12-17 06:14:22 +01:00
a humble test framework for opengraph stuff.
This commit is contained in:
108
opengraph_test.go
Normal file
108
opengraph_test.go
Normal file
@@ -0,0 +1,108 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
type OpengraphFields struct {
|
||||
TwitterCard string
|
||||
TwitterTitle string
|
||||
Superscript string
|
||||
Subscript string
|
||||
Image string
|
||||
Video string
|
||||
VideoFullType string
|
||||
Text string
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
initCache()
|
||||
code := m.Run()
|
||||
os.Exit(code)
|
||||
}
|
||||
|
||||
func TestHomePage(t *testing.T) {
|
||||
r := httptest.NewRequest("GET", "/", nil)
|
||||
w := httptest.NewRecorder()
|
||||
renderEvent(w, r)
|
||||
if w.Code != 200 {
|
||||
t.Fatal("homepage is not 200")
|
||||
}
|
||||
if !strings.Contains(w.Body.String(), "<form") {
|
||||
fmt.Println(w.Body.String())
|
||||
t.Fatal("homepage doesn't contain a form")
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalShortTextNote(t *testing.T) {
|
||||
og := makeRequest(t, "/nevent1qqswgl5fgcwcrhzmy2u9d3nq6dg7xnsp95657xe0xk9xh6xac43vwsqpqqrf49qe")
|
||||
|
||||
assert.Equal(t, og.Image, "", "")
|
||||
assert.Equal(t, og.TwitterCard, "summary", "")
|
||||
assert.Contains(t, og.Text, "Awesome, good feedback.", "")
|
||||
}
|
||||
|
||||
func TestNoteWithTextImage(t *testing.T) {
|
||||
og := makeRequest(t, "/nevent1qqs860kwt3m500hfnve6vxdpagkfqkm6hq03dnn2n7u8dev580kd2uszyztuwzjyxe4x2dwpgken87tna2rdlhpd02va5cvvgrrywpddnr3jydc2w4t")
|
||||
|
||||
assert.Contains(t, og.Image, "/njump/image/nevent1qqs860kwt3m500hfnve6vxdpagkfqkm6hq03dnn2n7u8dev580kd2uszyztuwzjyxe4x2dwpgken87tna2rdlhpd02va5cvvgrrywpddnr3jydc2w4t", "")
|
||||
assert.Equal(t, og.TwitterCard, "summary_large_image", "")
|
||||
assert.Contains(t, og.Text, "Thanks, it's of course a work in progress", "")
|
||||
}
|
||||
|
||||
func makeRequest(t *testing.T, path string) *OpengraphFields {
|
||||
r := httptest.NewRequest("GET", path, nil)
|
||||
w := httptest.NewRecorder()
|
||||
renderEvent(w, r)
|
||||
|
||||
if w.Code != 200 {
|
||||
t.Fatal("short note is not 200")
|
||||
}
|
||||
|
||||
og := &OpengraphFields{}
|
||||
parseHead(w.Body, og)
|
||||
|
||||
return og
|
||||
}
|
||||
|
||||
func parseHead(resp io.Reader, og *OpengraphFields) error {
|
||||
doc, err := goquery.NewDocumentFromReader(resp)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to parse response with goquery: %w", err)
|
||||
}
|
||||
|
||||
doc.Find(`meta[name="twitter:card"]`).Each(func(_ int, s *goquery.Selection) {
|
||||
og.TwitterCard, _ = s.Attr("content")
|
||||
})
|
||||
doc.Find(`meta[name="twitter:title"]`).Each(func(_ int, s *goquery.Selection) {
|
||||
og.TwitterTitle, _ = s.Attr("content")
|
||||
})
|
||||
doc.Find(`meta[property="og:site_name"]`).Each(func(_ int, s *goquery.Selection) {
|
||||
og.Superscript, _ = s.Attr("content")
|
||||
})
|
||||
doc.Find(`meta[property="og:title"]`).Each(func(_ int, s *goquery.Selection) {
|
||||
og.Subscript, _ = s.Attr("content")
|
||||
})
|
||||
doc.Find(`meta[property="og:image"]`).Each(func(_ int, s *goquery.Selection) {
|
||||
og.Image, _ = s.Attr("content")
|
||||
})
|
||||
doc.Find(`meta[property="og:video"]`).Each(func(_ int, s *goquery.Selection) {
|
||||
og.Video, _ = s.Attr("content")
|
||||
})
|
||||
doc.Find(`meta[property="og:video:type"]`).Each(func(_ int, s *goquery.Selection) {
|
||||
og.VideoFullType, _ = s.Attr("content")
|
||||
})
|
||||
doc.Find(`meta[property="og:description"]`).Each(func(_ int, s *goquery.Selection) {
|
||||
og.Text, _ = s.Attr("content")
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user