using AltBot.Core.Models; using Microsoft.Extensions.Logging; using Moq; using Xunit; namespace AltBot.Core.Tests.Models; public class DidTests { private readonly Mock> _loggerMock; public DidTests() { _loggerMock = new Mock>(); } [Theory] [InlineData("did:web:example.com")] [InlineData("did:plc:7iza6de2dwap2sbkpav7c6c6")] public void Create_ValidDid_ReturnsDidInstance(string validDid) { // Act var did = Did.Create(validDid); // Assert Assert.NotNull(did); Assert.Equal(validDid, did.Value); } [Theory] [InlineData("")] [InlineData(" ")] [InlineData(null)] [InlineData("notenough:parts")] [InlineData("wrong:prefix:parts")] public void Create_InvalidDid_ReturnsNull(string? invalidDid) { // Act var did = Did.Create(invalidDid!); // Assert Assert.Null(did); } [Fact] public void Parse_ValidDid_ReturnsDidInstance() { // Arrange const string validDid = "did:web:example.com"; // Act var did = Did.Parse(validDid, null); // Assert Assert.NotNull(did); Assert.Equal(validDid, did.Value); } [Fact] public void Parse_InvalidDid_ThrowsFormatException() { // Arrange const string invalidDid = "invalid"; // Act & Assert Assert.Throws(() => Did.Parse(invalidDid, null)); } [Fact] public void TryParse_ValidDid_ReturnsTrue() { // Arrange const string validDid = "did:web:example.com"; // Act var success = Did.TryParse(validDid, null, out var did); // Assert Assert.True(success); Assert.NotNull(did); Assert.Equal(validDid, did.Value); } [Theory] [InlineData("")] [InlineData(null)] [InlineData("invalid")] public void TryParse_InvalidDid_ReturnsFalse(string? invalidDid) { // Act var success = Did.TryParse(invalidDid, null, out var did); // Assert Assert.False(success); Assert.Null(did); } [Fact] public void Equals_SameValue_ReturnsTrue() { // Arrange var did1 = Did.Parse("did:web:example.com", null); var did2 = Did.Parse("did:web:example.com", null); // Act & Assert Assert.True(did1.Equals(did2)); Assert.True(did1 == did2); } [Fact] public void Equals_DifferentValue_ReturnsFalse() { // Arrange var did1 = Did.Parse("did:web:example1.com", null); var did2 = Did.Parse("did:web:example2.com", null); // Act & Assert Assert.False(did1.Equals(did2)); Assert.False(did1 == did2); } [Fact] public void ToString_ReturnsValue() { // Arrange const string didString = "did:web:example.com"; var did = Did.Parse(didString, null); // Act var result = did.ToString(); // Assert Assert.Equal(didString, result); } [Fact] public void ImplicitConversion_ToString_ReturnsValue() { // Arrange const string didString = "did:web:example.com"; var did = Did.Parse(didString, null); // Act string result = did; // Assert Assert.Equal(didString, result); } [Fact] public void ExplicitConversion_FromString_ReturnsDid() { // Arrange const string didString = "did:web:example.com"; // Act var did = (Did)didString; // Assert Assert.Equal(didString, did.Value); } [Fact] public void Load_AnyString_ReturnsDid() { // Arrange const string didString = "any:string:value"; // Act var did = Did.Load(didString); // Assert Assert.NotNull(did); Assert.Equal(didString, did.Value); } }