1+ using Moq ;
2+ using Newtonsoft . Json ;
3+ using Newtonsoft . Json . Linq ;
4+ using Xunit ;
5+
6+ namespace TensionDev . ULID . Serialization . JsonNet . Tests
7+ {
8+ public class UlidJsonNetConverterTests : IDisposable
9+ {
10+ private bool disposedValue ;
11+
12+ private readonly UlidJsonNetConverter _converter ;
13+
14+ public UlidJsonNetConverterTests ( )
15+ {
16+ _converter = new UlidJsonNetConverter ( ) ;
17+ }
18+
19+ [ Theory ]
20+ [ InlineData ( "00000000000000000000000000" ) ]
21+ [ InlineData ( "7ZZZZZZZZZZZZZZZZZZZZZZZZZ" ) ]
22+ [ InlineData ( "01ARZ3NDEKTSV4RRFFQ69G5FAV" ) ]
23+ public void TestReadJson ( string validUlidString )
24+ {
25+ // Arrange
26+ var readerMock = new Mock < JsonReader > ( MockBehavior . Strict ) ;
27+ readerMock . SetupGet ( r => r . TokenType ) . Returns ( JsonToken . String ) ;
28+ readerMock . SetupGet ( r => r . Value ) . Returns ( ( object ) validUlidString ) ;
29+
30+ var converter = new UlidJsonNetConverter ( ) ;
31+
32+ // existingValue must be non-nullable; obtain an instance via Parse to satisfy parameter constraints.
33+ Ulid existingValue = Ulid . Parse ( validUlidString ) ;
34+ var serializer = new JsonSerializer ( ) ;
35+
36+ // Act
37+ Ulid result = converter . ReadJson ( readerMock . Object , typeof ( Ulid ) , existingValue , hasExistingValue : false , serializer : serializer ) ;
38+
39+ // Assert
40+ Assert . NotNull ( result ) ;
41+ Assert . Equal ( validUlidString , result . ToString ( ) ) ;
42+ }
43+
44+ [ Theory ]
45+ [ InlineData ( "00000000000000000000000000" ) ]
46+ [ InlineData ( "7ZZZZZZZZZZZZZZZZZZZZZZZZZ" ) ]
47+ [ InlineData ( "01ARZ3NDEKTSV4RRFFQ69G5FAV" ) ]
48+ public void TestWriteJson ( string validUlidString )
49+ {
50+ var writerMock = new Mock < JsonWriter > ( MockBehavior . Strict ) ;
51+ object ? capturedValue = null ;
52+ // Setup to accept any object and capture it
53+ writerMock . Setup ( w => w . WriteValue ( It . IsAny < string ? > ( ) ) )
54+ . Callback < string ? > ( v => capturedValue = v )
55+ . Verifiable ( ) ;
56+
57+ var serializerMock = new Mock < JsonSerializer > ( MockBehavior . Loose ) ;
58+
59+ TensionDev . ULID . Ulid value = TensionDev . ULID . Ulid . Parse ( validUlidString ) ;
60+
61+ // Act
62+ _converter . WriteJson ( writerMock . Object , value , serializerMock . Object ) ;
63+
64+ // Assert
65+ writerMock . Verify ( w => w . WriteValue ( It . IsAny < string ? > ( ) ) , Times . Once , "WriteValue should be called exactly once." ) ;
66+ // Ensure the captured value matches the value.ToString() result
67+ var expected = value . ToString ( ) ;
68+ Assert . NotNull ( capturedValue ) ;
69+ Assert . Equal ( expected , capturedValue ? . ToString ( ) ) ;
70+ }
71+
72+ protected virtual void Dispose ( bool disposing )
73+ {
74+ if ( ! disposedValue )
75+ {
76+ if ( disposing )
77+ {
78+ // TODO: dispose managed state (managed objects)
79+ }
80+
81+ // TODO: free unmanaged resources (unmanaged objects) and override finalizer
82+ // TODO: set large fields to null
83+ disposedValue = true ;
84+ }
85+ }
86+
87+ // // TODO: override finalizer only if 'Dispose(bool disposing)' has code to free unmanaged resources
88+ // ~UlidJsonNetConverterTests()
89+ // {
90+ // // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
91+ // Dispose(disposing: false);
92+ // }
93+
94+ public void Dispose ( )
95+ {
96+ // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
97+ Dispose ( disposing : true ) ;
98+ GC . SuppressFinalize ( this ) ;
99+ }
100+ }
101+ }
0 commit comments