using PrivaPub.Federation.Objects; using PrivaPub.Models.Post; using System.Text.Json.Nodes; namespace PrivaPub.Tests.Federation { public class NoteParserTests { const string MastodonNote = """ { "id": "https://m.example/users/alice/statuses/1", "type": "Note", "summary": "spoilers", "inReplyTo": "https://privapub.test/peasants/bob/posts/abc", "published": "2026-09-30T10:00:00Z", "url": "https://m.example/@alice/1", "attributedTo": "https://m.example/users/alice", "to": ["https://www.w3.org/ns/activitystreams#Public"], "cc": ["https://m.example/users/alice/followers", "https://privapub.test/peasants/bob"], "sensitive": true, "conversation": "tag:m.example,2026-09-30:objectId=1:objectType=Conversation", "context": "https://m.example/contexts/1", "content": "

@bob hi #Fedi

", "contentMap": { "en": "

hi

" }, "attachment": [{ "type": "Document", "mediaType": "image/png", "url": "https://files.m.example/a.png", "name": "a cat", "blurhash": "UBL_:rOpGG-oBUNG,qRj2so|=eE1w^n4S5NH", "focalPoint": [0.5, -2.0], "width": 640, "height": 480 }], "tag": [ { "type": "Mention", "href": "https://privapub.test/peasants/bob", "name": "@bob@privapub.test" }, { "type": "Hashtag", "href": "https://m.example/tags/fedi", "name": "#Fedi" }, { "type": "Emoji", "name": ":blob:", "icon": { "type": "Image", "url": "https://files.m.example/blob.png" } } ] } """; [Fact] public void Reads_a_mastodon_note() { var note = NoteParser.Parse(JsonNode.Parse(MastodonNote)); Assert.Equal("https://m.example/users/alice", note.AttributedTo); Assert.Equal("spoilers", note.SpoilerText); Assert.True(note.Sensitive); Assert.Equal("en", note.Language); Assert.Equal("https://m.example/@alice/1", note.Url); Assert.Equal("https://m.example/contexts/1", note.Context); Assert.DoesNotContain("