an atproto pds written in F# (.NET 9) 馃
pds
fsharp
giraffe
dotnet
atproto
1module BlockStoreTests
2
3open Xunit
4open PDSharp.Core
5open PDSharp.Core.BlockStore
6
7[<Fact>]
8let ``MemoryBlockStore Put and Get roundtrip`` () =
9 let store = MemoryBlockStore() :> IBlockStore
10 let data = System.Text.Encoding.UTF8.GetBytes("hello world")
11
12 let cid = store.Put(data) |> Async.RunSynchronously
13 let retrieved = store.Get(cid) |> Async.RunSynchronously
14
15 Assert.True(Option.isSome retrieved)
16 Assert.Equal<byte[]>(data, Option.get retrieved)
17
18[<Fact>]
19let ``MemoryBlockStore Has returns true for existing`` () =
20 let store = MemoryBlockStore() :> IBlockStore
21 let data = System.Text.Encoding.UTF8.GetBytes("test data")
22
23 let cid = store.Put(data) |> Async.RunSynchronously
24 let exists = store.Has(cid) |> Async.RunSynchronously
25
26 Assert.True(exists)
27
28[<Fact>]
29let ``MemoryBlockStore Has returns false for missing`` () =
30 let store = MemoryBlockStore() :> IBlockStore
31 let fakeCid = Cid.FromHash(Crypto.sha256Str "nonexistent")
32
33 let exists = store.Has(fakeCid) |> Async.RunSynchronously
34
35 Assert.False(exists)
36
37[<Fact>]
38let ``MemoryBlockStore Get returns None for missing`` () =
39 let store = MemoryBlockStore() :> IBlockStore
40 let fakeCid = Cid.FromHash(Crypto.sha256Str "nonexistent")
41
42 let result = store.Get(fakeCid) |> Async.RunSynchronously
43
44 Assert.True(Option.isNone result)
45
46[<Fact>]
47let ``MemoryBlockStore CID is content-addressed`` () =
48 let store = MemoryBlockStore() :> IBlockStore
49 let data = System.Text.Encoding.UTF8.GetBytes("same content")
50 let cid1 = store.Put data |> Async.RunSynchronously
51 let cid2 = store.Put data |> Async.RunSynchronously
52 Assert.Equal<byte[]>(cid1.Bytes, cid2.Bytes)