status-go/protocol/urls/urls_test.go

180 lines
6.4 KiB
Go
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package urls
import (
"strings"
"testing"
"github.com/stretchr/testify/require"
)
func TestGetLinkPreviewData(t *testing.T) {
statusTownhall := LinkPreviewData{
Site: "YouTube",
Title: "Status Town Hall #67 - 12 October 2020",
ThumbnailURL: "https://i.ytimg.com/vi/mzOyYtfXkb0/hqdefault.jpg",
}
ts := []struct {
URL string
ShouldFail bool
}{
{"https://www.youtube.com/watch?v=mzOyYtfXkb0", false},
{"https://youtu.be/mzOyYtfXkb0", false},
{"https://www.test.com/unknown", true},
}
for _, u := range ts {
previewData, err := GetLinkPreviewData(u.URL)
if u.ShouldFail {
require.Error(t, err)
continue
}
require.NoError(t, err)
require.Equal(t, statusTownhall.Site, previewData.Site)
require.Equal(t, statusTownhall.Title, previewData.Title)
require.Equal(t, statusTownhall.ThumbnailURL, previewData.ThumbnailURL)
}
}
// split at "." and ignore the first item
func thumbnailURLWithoutSubdomain(url string) []string {
return strings.Split(url, ".")[1:]
}
func TestGetGiphyPreviewData(t *testing.T) {
validGiphyLink := "https://giphy.com/gifs/FullMag-robot-boston-dynamics-dance-lcG3qwtTKSNI2i5vst"
previewData, err := GetGiphyPreviewData(validGiphyLink)
bostonDynamicsEthGifData := LinkPreviewData{
Site: "GIPHY",
Title: "Boston Dynamics Yes GIF by FullMag - Find & Share on GIPHY",
ThumbnailURL: "https://media1.giphy.com/media/lcG3qwtTKSNI2i5vst/giphy.gif",
Height: 480,
Width: 480,
}
require.NoError(t, err)
require.Equal(t, bostonDynamicsEthGifData.Site, previewData.Site)
require.Equal(t, bostonDynamicsEthGifData.Title, previewData.Title)
require.Equal(t, bostonDynamicsEthGifData.Height, previewData.Height)
require.Equal(t, bostonDynamicsEthGifData.Width, previewData.Width)
// Giphy oembed returns links to different servers: https://media1.giphy.com, https://media2.giphy.com and so on
// We don't care about the server as long as other parts are equal, so we split at "." and ignore the first item
require.Equal(t, thumbnailURLWithoutSubdomain(bostonDynamicsEthGifData.ThumbnailURL), thumbnailURLWithoutSubdomain(previewData.ThumbnailURL))
invalidGiphyLink := "https://giphy.com/gifs/this-gif-does-not-exist-44444"
_, err = GetGiphyPreviewData(invalidGiphyLink)
require.Error(t, err)
mediaLink := "https://media.giphy.com/media/lcG3qwtTKSNI2i5vst/giphy.gif"
mediaLinkData, _ := GetGiphyPreviewData(mediaLink)
require.Equal(t, thumbnailURLWithoutSubdomain(mediaLinkData.ThumbnailURL), thumbnailURLWithoutSubdomain(previewData.ThumbnailURL))
}
func TestGetGiphyLongURL(t *testing.T) {
shortURL := "https://gph.is/g/aXLyK7P"
computedLongURL, _ := GetGiphyLongURL(shortURL)
actualLongURL := "https://giphy.com/gifs/FullMag-robot-boston-dynamics-dance-lcG3qwtTKSNI2i5vst"
require.Equal(t, computedLongURL, actualLongURL)
_, err := GetGiphyLongURL("http://this-giphy-site-doesn-not-exist.se/bogus-url")
require.Error(t, err)
_, err = GetGiphyLongURL("http://gph.is/bogus-url-but-correct-domain")
require.Error(t, err)
}
func TestGetGiphyShortURLPreviewData(t *testing.T) {
shortURL := "https://gph.is/g/aXLyK7P"
previewData, err := GetGiphyShortURLPreviewData(shortURL)
bostonDynamicsEthGifData := LinkPreviewData{
Site: "GIPHY",
Title: "Boston Dynamics Yes GIF by FullMag - Find & Share on GIPHY",
ThumbnailURL: "https://media1.giphy.com/media/lcG3qwtTKSNI2i5vst/giphy.gif",
}
require.NoError(t, err)
require.Equal(t, bostonDynamicsEthGifData.Site, previewData.Site)
require.Equal(t, bostonDynamicsEthGifData.Title, previewData.Title)
}
func TestStatusLinkPreviewData(t *testing.T) {
statusSecurityAudit := LinkPreviewData{
Site: "Our Status",
Title: "What is a Security Audit, When You Should Get One, and How to Prepare.",
ThumbnailURL: "https://our.status.im/content/images/2021/02/Security-Audit-Header.png",
}
previewData, err := GetLinkPreviewData("https://our.status.im/what-is-a-security-audit-when-you-should-get-one-and-how-to-prepare/")
require.NoError(t, err)
require.Equal(t, statusSecurityAudit.Site, previewData.Site)
require.Equal(t, statusSecurityAudit.Title, previewData.Title)
require.Equal(t, statusSecurityAudit.ThumbnailURL, previewData.ThumbnailURL)
}
// Medium unfurling is failing - https://github.com/status-im/status-go/issues/2192
func TestMediumLinkPreviewData(t *testing.T) {
t.Skip("broken test") // https://github.com/status-im/status-go/issues/2192
statusSecurityAudit := LinkPreviewData{
Site: "Medium",
Title: "A Look at the Status.im ICO Token Distribution",
ThumbnailURL: "https://miro.medium.com/max/700/1*Smc0y_TOL1XsofS1wxa3rg.jpeg",
}
previewData, err := GetLinkPreviewData("https://medium.com/the-bitcoin-podcast-blog/a-look-at-the-status-im-ico-token-distribution-f5bcf7f00907")
require.NoError(t, err)
require.Equal(t, statusSecurityAudit.Site, previewData.Site)
require.Equal(t, statusSecurityAudit.Title, previewData.Title)
require.Equal(t, statusSecurityAudit.ThumbnailURL, previewData.ThumbnailURL)
}
func TestTwitterLinkPreviewData(t *testing.T) {
t.Skip("flaky test") // https://github.com/status-im/status-go/issues/3529
statusTweet1 := LinkPreviewData{
Site: "Twitter",
Title: "Crypto isn't going anywhere.— Status (@ethstatus) July 26, 2021",
}
statusTweet2 := LinkPreviewData{
Site: "Twitter",
Title: "🎉 Status v1.15 is a go! 🎉\n\n📌 Pin important messages in chats and groups" +
"\n✏ Edit messages after sending\n🔬 Scan QR codes with the browser\n⚡ FASTER app navigation!" +
"\nhttps://t.co/qKrhDArVKb— Status (@ethstatus) July 27, 2021",
}
statusProfile := LinkPreviewData{
Site: "Twitter",
Title: "Tweets by ethstatus",
}
ts := []struct {
URL string
Expected LinkPreviewData
ShouldFail bool
}{
{"https://twitter.com/ethstatus/status/1419674733885407236", statusTweet1, false},
{"https://twitter.com/ethstatus/status/1420035091997278214", statusTweet2, false},
{"https://twitter.com/ethstatus", statusProfile, false},
{"https://www.test.com/unknown", LinkPreviewData{}, true},
}
for _, u := range ts {
previewData, err := GetLinkPreviewData(u.URL)
if u.ShouldFail {
require.Error(t, err)
continue
}
require.NoError(t, err)
require.Equal(t, u.Expected.Site, previewData.Site)
require.Equal(t, u.Expected.Title, previewData.Title)
require.Equal(t, u.Expected.ThumbnailURL, previewData.ThumbnailURL)
}
}