an atproto pds written in F# (.NET 9) 馃
pds fsharp giraffe dotnet atproto
at main 1.9 kB view raw
1module AtUriTests 2 3open Xunit 4open PDSharp.Core.AtUri 5 6[<Fact>] 7let ``Parse valid AT-URI`` () = 8 let uri = "at://did:plc:abcd1234/app.bsky.feed.post/3kbq5vk4beg2f" 9 let result = parse uri 10 11 match result with 12 | Ok parsed -> 13 Assert.Equal("did:plc:abcd1234", parsed.Did) 14 Assert.Equal("app.bsky.feed.post", parsed.Collection) 15 Assert.Equal("3kbq5vk4beg2f", parsed.Rkey) 16 | Error msg -> Assert.Fail(msg) 17 18[<Fact>] 19let ``Parse did:web AT-URI`` () = 20 let uri = "at://did:web:example.com/app.bsky.actor.profile/self" 21 let result = parse uri 22 23 match result with 24 | Ok parsed -> 25 Assert.Equal("did:web:example.com", parsed.Did) 26 Assert.Equal("app.bsky.actor.profile", parsed.Collection) 27 Assert.Equal("self", parsed.Rkey) 28 | Error msg -> Assert.Fail(msg) 29 30[<Fact>] 31let ``Parse fails without at:// prefix`` () = 32 let uri = "http://did:plc:abcd/app.bsky.feed.post/123" 33 let result = parse uri 34 35 Assert.True(Result.isError result) 36 37[<Fact>] 38let ``Parse fails with invalid DID`` () = 39 let uri = "at://not-a-did/app.bsky.feed.post/123" 40 let result = parse uri 41 42 Assert.True(Result.isError result) 43 44[<Fact>] 45let ``Parse fails with invalid collection`` () = 46 let uri = "at://did:plc:abcd/NotAnNsid/123" 47 let result = parse uri 48 49 Assert.True(Result.isError result) 50 51[<Fact>] 52let ``Parse fails with missing parts`` () = 53 let uri = "at://did:plc:abcd/app.bsky.feed.post" 54 let result = parse uri 55 56 Assert.True(Result.isError result) 57 58[<Fact>] 59let ``ToString roundtrip`` () = 60 let original = { 61 Did = "did:plc:abcd" 62 Collection = "app.bsky.feed.post" 63 Rkey = "123" 64 } 65 66 let str = toString original 67 let parsed = parse str 68 69 match parsed with 70 | Ok p -> 71 Assert.Equal(original.Did, p.Did) 72 Assert.Equal(original.Collection, p.Collection) 73 Assert.Equal(original.Rkey, p.Rkey) 74 | Error msg -> Assert.Fail(msg)