AltHeroes Bot v2
1using AltBot.Core.Models;
2using Microsoft.Extensions.Logging;
3using Moq;
4using Xunit;
5
6namespace AltBot.Core.Tests.Models;
7
8public class DidTests
9{
10 private readonly Mock<ILogger<Did>> _loggerMock;
11
12 public DidTests()
13 {
14 _loggerMock = new Mock<ILogger<Did>>();
15 }
16
17 [Theory]
18 [InlineData("did:web:example.com")]
19 [InlineData("did:plc:7iza6de2dwap2sbkpav7c6c6")]
20 public void Create_ValidDid_ReturnsDidInstance(string validDid)
21 {
22 // Act
23 var did = Did.Create(validDid);
24
25 // Assert
26 Assert.NotNull(did);
27 Assert.Equal(validDid, did.Value);
28 }
29
30 [Theory]
31 [InlineData("")]
32 [InlineData(" ")]
33 [InlineData(null)]
34 [InlineData("notenough:parts")]
35 [InlineData("wrong:prefix:parts")]
36 public void Create_InvalidDid_ReturnsNull(string? invalidDid)
37 {
38 // Act
39 var did = Did.Create(invalidDid!);
40
41 // Assert
42 Assert.Null(did);
43 }
44
45 [Fact]
46 public void Parse_ValidDid_ReturnsDidInstance()
47 {
48 // Arrange
49 const string validDid = "did:web:example.com";
50
51 // Act
52 var did = Did.Parse(validDid, null);
53
54 // Assert
55 Assert.NotNull(did);
56 Assert.Equal(validDid, did.Value);
57 }
58
59 [Fact]
60 public void Parse_InvalidDid_ThrowsFormatException()
61 {
62 // Arrange
63 const string invalidDid = "invalid";
64
65 // Act & Assert
66 Assert.Throws<FormatException>(() => Did.Parse(invalidDid, null));
67 }
68
69 [Fact]
70 public void TryParse_ValidDid_ReturnsTrue()
71 {
72 // Arrange
73 const string validDid = "did:web:example.com";
74
75 // Act
76 var success = Did.TryParse(validDid, null, out var did);
77
78 // Assert
79 Assert.True(success);
80 Assert.NotNull(did);
81 Assert.Equal(validDid, did.Value);
82 }
83
84 [Theory]
85 [InlineData("")]
86 [InlineData(null)]
87 [InlineData("invalid")]
88 public void TryParse_InvalidDid_ReturnsFalse(string? invalidDid)
89 {
90 // Act
91 var success = Did.TryParse(invalidDid, null, out var did);
92
93 // Assert
94 Assert.False(success);
95 Assert.Null(did);
96 }
97
98 [Fact]
99 public void Equals_SameValue_ReturnsTrue()
100 {
101 // Arrange
102 var did1 = Did.Parse("did:web:example.com", null);
103 var did2 = Did.Parse("did:web:example.com", null);
104
105 // Act & Assert
106 Assert.True(did1.Equals(did2));
107 Assert.True(did1 == did2);
108 }
109
110 [Fact]
111 public void Equals_DifferentValue_ReturnsFalse()
112 {
113 // Arrange
114 var did1 = Did.Parse("did:web:example1.com", null);
115 var did2 = Did.Parse("did:web:example2.com", null);
116
117 // Act & Assert
118 Assert.False(did1.Equals(did2));
119 Assert.False(did1 == did2);
120 }
121
122 [Fact]
123 public void ToString_ReturnsValue()
124 {
125 // Arrange
126 const string didString = "did:web:example.com";
127 var did = Did.Parse(didString, null);
128
129 // Act
130 var result = did.ToString();
131
132 // Assert
133 Assert.Equal(didString, result);
134 }
135
136 [Fact]
137 public void ImplicitConversion_ToString_ReturnsValue()
138 {
139 // Arrange
140 const string didString = "did:web:example.com";
141 var did = Did.Parse(didString, null);
142
143 // Act
144 string result = did;
145
146 // Assert
147 Assert.Equal(didString, result);
148 }
149
150 [Fact]
151 public void ExplicitConversion_FromString_ReturnsDid()
152 {
153 // Arrange
154 const string didString = "did:web:example.com";
155
156 // Act
157 var did = (Did)didString;
158
159 // Assert
160 Assert.Equal(didString, did.Value);
161 }
162
163 [Fact]
164 public void Load_AnyString_ReturnsDid()
165 {
166 // Arrange
167 const string didString = "any:string:value";
168
169 // Act
170 var did = Did.Load(didString);
171
172 // Assert
173 Assert.NotNull(did);
174 Assert.Equal(didString, did.Value);
175 }
176}