1+ using System . Text . Json ;
2+ using AWS . Lambda . Powertools . Logging . Serializers ;
3+ using Microsoft . Extensions . Logging ;
4+ using Xunit ;
5+
6+ namespace AWS . Lambda . Powertools . Logging . Tests . Utilities ;
7+
8+ public class LogLevelJsonConverterTests
9+ {
10+ private readonly LogLevelJsonConverter _converter ;
11+ private readonly JsonSerializerOptions _options ;
12+
13+ public LogLevelJsonConverterTests ( )
14+ {
15+ _converter = new LogLevelJsonConverter ( ) ;
16+ _options = new JsonSerializerOptions
17+ {
18+ Converters = { _converter }
19+ } ;
20+ }
21+
22+ [ Theory ]
23+ [ InlineData ( "Information" , LogLevel . Information ) ]
24+ [ InlineData ( "Error" , LogLevel . Error ) ]
25+ [ InlineData ( "Warning" , LogLevel . Warning ) ]
26+ [ InlineData ( "Debug" , LogLevel . Debug ) ]
27+ [ InlineData ( "Trace" , LogLevel . Trace ) ]
28+ [ InlineData ( "Critical" , LogLevel . Critical ) ]
29+ [ InlineData ( "None" , LogLevel . None ) ]
30+ public void Read_ValidLogLevel_ReturnsCorrectEnum ( string input , LogLevel expected )
31+ {
32+ // Arrange
33+ var json = $ "\" { input } \" ";
34+
35+ // Act
36+ var result = JsonSerializer . Deserialize < LogLevel > ( json , _options ) ;
37+
38+ // Assert
39+ Assert . Equal ( expected , result ) ;
40+ }
41+
42+ [ Theory ]
43+ [ InlineData ( "information" , LogLevel . Information ) ]
44+ [ InlineData ( "ERROR" , LogLevel . Error ) ]
45+ [ InlineData ( "Warning" , LogLevel . Warning ) ]
46+ [ InlineData ( "deBUG" , LogLevel . Debug ) ]
47+ public void Read_CaseInsensitive_ReturnsCorrectEnum ( string input , LogLevel expected )
48+ {
49+ // Arrange
50+ var json = $ "\" { input } \" ";
51+
52+ // Act
53+ var result = JsonSerializer . Deserialize < LogLevel > ( json , _options ) ;
54+
55+ // Assert
56+ Assert . Equal ( expected , result ) ;
57+ }
58+
59+ [ Theory ]
60+ [ InlineData ( "" ) ]
61+ [ InlineData ( "InvalidLevel" ) ]
62+ [ InlineData ( "NotALevel" ) ]
63+ public void Read_InvalidLogLevel_ReturnsDefault ( string input )
64+ {
65+ // Arrange
66+ var json = $ "\" { input } \" ";
67+
68+ // Act
69+ var result = JsonSerializer . Deserialize < LogLevel > ( json , _options ) ;
70+
71+ // Assert
72+ Assert . Equal ( default ( LogLevel ) , result ) ;
73+ }
74+
75+ [ Fact ]
76+ public void Read_NullValue_ReturnsDefault ( )
77+ {
78+ // Arrange
79+ var json = "null" ;
80+
81+ // Act
82+ var result = JsonSerializer . Deserialize < LogLevel > ( json , _options ) ;
83+
84+ // Assert
85+ Assert . Equal ( default ( LogLevel ) , result ) ;
86+ }
87+
88+ [ Theory ]
89+ [ InlineData ( LogLevel . Information , "Information" ) ]
90+ [ InlineData ( LogLevel . Error , "Error" ) ]
91+ [ InlineData ( LogLevel . Warning , "Warning" ) ]
92+ [ InlineData ( LogLevel . Debug , "Debug" ) ]
93+ [ InlineData ( LogLevel . Trace , "Trace" ) ]
94+ [ InlineData ( LogLevel . Critical , "Critical" ) ]
95+ [ InlineData ( LogLevel . None , "None" ) ]
96+ public void Write_ValidLogLevel_WritesCorrectString ( LogLevel input , string expected )
97+ {
98+ // Act
99+ var result = JsonSerializer . Serialize ( input , _options ) ;
100+
101+ // Assert
102+ Assert . Equal ( $ "\" { expected } \" ", result ) ;
103+ }
104+
105+ [ Fact ]
106+ public void Write_DefaultLogLevel_WritesCorrectString ( )
107+ {
108+ // Arrange
109+ var input = default ( LogLevel ) ;
110+
111+ // Act
112+ var result = JsonSerializer . Serialize ( input , _options ) ;
113+
114+ // Assert
115+ Assert . Equal ( $ "\" { input } \" ", result ) ;
116+ }
117+
118+ [ Fact ]
119+ public void Converter_CanConvert_LogLevelType ( )
120+ {
121+ // Act
122+ var canConvert = _converter . CanConvert ( typeof ( LogLevel ) ) ;
123+
124+ // Assert
125+ Assert . True ( canConvert ) ;
126+ }
127+
128+ [ Fact ]
129+ public void SerializeAndDeserialize_RoundTrip_MaintainsValue ( )
130+ {
131+ // Arrange
132+ var originalValue = LogLevel . Information ;
133+
134+ // Act
135+ var serialized = JsonSerializer . Serialize ( originalValue , _options ) ;
136+ var deserialized = JsonSerializer . Deserialize < LogLevel > ( serialized , _options ) ;
137+
138+ // Assert
139+ Assert . Equal ( originalValue , deserialized ) ;
140+ }
141+ }
0 commit comments