Live video on the AT Protocol
at next 71 lines 2.3 kB view raw
1package linking 2 3import ( 4 "context" 5 "io" 6 "net/url" 7 "strings" 8 "testing" 9 10 "github.com/bluesky-social/indigo/api/atproto" 11 "github.com/bluesky-social/indigo/api/bsky" 12 lexutil "github.com/bluesky-social/indigo/lex/util" 13 "github.com/stretchr/testify/require" 14 "stream.place/streamplace/js/app" 15 "stream.place/streamplace/pkg/streamplace" 16) 17 18func IndexHTML(t *testing.T) []byte { 19 allFiles, err := app.Files() 20 require.NoError(t, err) 21 require.NotNil(t, allFiles) 22 index, err := allFiles.Open("index.html") 23 require.NoError(t, err) 24 indexBs, err := io.ReadAll(index) 25 require.NoError(t, err) 26 require.NotNil(t, indexBs) 27 return indexBs 28} 29 30func TestNewLinker(t *testing.T) { 31 index := IndexHTML(t) 32 linker, err := NewLinker(context.Background(), index, nil, nil) 33 require.NoError(t, err) 34 require.NotNil(t, linker) 35} 36 37func TestGenerateLinkCard(t *testing.T) { 38 index := IndexHTML(t) 39 linker, err := NewLinker(context.Background(), index, nil, nil) 40 require.NoError(t, err) 41 require.NotNil(t, linker) 42 43 u, err := url.Parse("https://stream.place/iame.li") 44 require.NoError(t, err) 45 sp := "https://stream.place" 46 ls := &streamplace.Livestream{ 47 CreatedAt: "2025-03-25T00:39:49.121Z", 48 Post: &atproto.RepoStrongRef{ 49 Cid: "bafyreiczmyne5jd4lpax5ttyb5p2fbcageyt6fsthdpyymecokcsmyh4a4", 50 Uri: "at://did:plc:2zmxikig2sj7gqaezl5gntae/app.bsky.feed.post/3ll5zuomua22x", 51 }, 52 Title: "Back up! Once again water in the firehose. Link cards if this stays stable", 53 Url: &sp, 54 } 55 lsv := &streamplace.Livestream_LivestreamView{ 56 Author: &bsky.ActorDefs_ProfileViewBasic{ 57 Handle: "iame.li", 58 Did: "did:plc:2zmxikig2sj7gqaezl5gntae", 59 }, 60 Cid: "bafyreib2ohz45jileumnuwa3wdoo3o7caikfyq467eanleqcscouh5wery", 61 IndexedAt: "2025-03-25T01:16:14Z", 62 Record: &lexutil.LexiconTypeDecoder{Val: ls}, 63 Uri: "at://did:plc:2zmxikig2sj7gqaezl5gntae/place.stream.livestream/3ll5zuop2k22x", 64 } 65 linkCard, err := linker.GenerateStreamerCard(context.Background(), u, lsv, "") 66 require.NoError(t, err) 67 linkStr := string(linkCard) 68 require.True(t, strings.Contains(linkStr, "iame.li")) 69 require.True(t, strings.Contains(linkStr, ls.Title), "should contain the livestream title") 70 require.True(t, strings.Count(linkStr, "<title>") == 1, "should have exactly one title tag") 71}