Live video on the AT Protocol
79
fork

Configure Feed

Select the types of activity you want to include in your feed.

at eli/ingest-customization 77 lines 2.6 kB view raw
1package badges 2 3import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/bluesky-social/indigo/atproto/syntax" 9 "github.com/bluesky-social/indigo/util" 10 "github.com/stretchr/testify/require" 11 "stream.place/streamplace/pkg/constants" 12 "stream.place/streamplace/pkg/model" 13 "stream.place/streamplace/pkg/streamplace" 14) 15 16func TestGetValidBadges(t *testing.T) { 17 ctx := context.Background() 18 19 mod, err := model.MakeDB(":memory:") 20 require.NoError(t, err) 21 22 issuerDID := "did:web:node.example.com" 23 streamerDID := "did:plc:streamer" 24 moderatorDID := "did:plc:moderator" 25 regularUserDID := "did:plc:regular" 26 27 t.Run("returns empty when no streamer context", func(t *testing.T) { 28 badges, err := GetValidBadges(ctx, regularUserDID, "", issuerDID, mod) 29 require.NoError(t, err) 30 require.Empty(t, badges) 31 }) 32 33 t.Run("returns streamer badge for streamer", func(t *testing.T) { 34 badges, err := GetValidBadges(ctx, streamerDID, streamerDID, issuerDID, mod) 35 require.NoError(t, err) 36 require.Len(t, badges, 1) 37 require.Equal(t, constants.BadgeTypeStreamer, badges[0].BadgeType) 38 require.Equal(t, issuerDID, badges[0].Issuer) 39 require.Equal(t, streamerDID, badges[0].Recipient) 40 }) 41 42 t.Run("returns no badges for regular user", func(t *testing.T) { 43 badges, err := GetValidBadges(ctx, regularUserDID, streamerDID, issuerDID, mod) 44 require.NoError(t, err) 45 require.Empty(t, badges) 46 }) 47 48 t.Run("returns mod badge for moderator", func(t *testing.T) { 49 // Grant moderation permissions 50 perm := &streamplace.ModerationPermission{ 51 LexiconTypeID: "place.stream.moderation.permission", 52 Moderator: moderatorDID, 53 Permissions: []string{"ban", "hide"}, 54 CreatedAt: time.Now().Format(util.ISO8601), 55 } 56 aturi, err := syntax.ParseATURI("at://" + streamerDID + "/place.stream.moderation.permission/test123") 57 require.NoError(t, err) 58 59 err = mod.CreateModerationDelegation(ctx, perm, aturi) 60 require.NoError(t, err) 61 62 badges, err := GetValidBadges(ctx, moderatorDID, streamerDID, issuerDID, mod) 63 require.NoError(t, err) 64 require.Len(t, badges, 1) 65 require.Equal(t, constants.BadgeTypeMod, badges[0].BadgeType) 66 require.Equal(t, issuerDID, badges[0].Issuer) 67 require.Equal(t, moderatorDID, badges[0].Recipient) 68 }) 69 70 t.Run("streamer badge takes priority over mod", func(t *testing.T) { 71 // Even if streamer has mod permissions for themselves, they get streamer badge 72 badges, err := GetValidBadges(ctx, streamerDID, streamerDID, issuerDID, mod) 73 require.NoError(t, err) 74 require.Len(t, badges, 1) 75 require.Equal(t, constants.BadgeTypeStreamer, badges[0].BadgeType) 76 }) 77}