11using System ;
2- using System . Collections . Generic ;
32using System . IO ;
43using System . Linq ;
54using System . Xml . Linq ;
@@ -92,16 +91,15 @@ public void SetExecutionEnvironment_Should_Format_Strings_Correctly_With_Mocked_
9291 {
9392 // Arrange
9493 var mockEnvironment = Substitute . For < IPowertoolsEnvironment > ( ) ;
95- var testType = this . GetType ( ) ;
96-
94+
9795 // Mock the dependencies to return controlled values
9896 mockEnvironment . GetAssemblyName ( Arg . Any < object > ( ) ) . Returns ( "AWS.Lambda.Powertools.Common.Tests" ) ;
9997 mockEnvironment . GetAssemblyVersion ( Arg . Any < object > ( ) ) . Returns ( "1.2.3" ) ;
10098 mockEnvironment . GetEnvironmentVariable ( "AWS_EXECUTION_ENV" ) . Returns ( ( string ) null ) ;
10199
102100 // Setup the actual method call to use real implementation logic
103101 mockEnvironment . When ( x => x . SetExecutionEnvironment ( Arg . Any < object > ( ) ) )
104- . Do ( callInfo =>
102+ . Do ( _ =>
105103 {
106104 var assemblyName = "PT/Tests" ; // Parsed name
107105 var assemblyVersion = "1.2.3" ;
@@ -131,7 +129,7 @@ public void SetExecutionEnvironment_Should_Append_To_Existing_Environment_With_M
131129
132130 // Setup the method call
133131 mockEnvironment . When ( x => x . SetExecutionEnvironment ( Arg . Any < object > ( ) ) )
134- . Do ( callInfo =>
132+ . Do ( _ =>
135133 {
136134 var currentEnv = "ExistingValue" ;
137135 var assemblyName = "PT/Logging" ;
@@ -162,7 +160,7 @@ public void SetExecutionEnvironment_Should_Not_Add_PTENV_Twice_With_Mocked_Value
162160
163161 // Setup the method call - should not add PTENV again
164162 mockEnvironment . When ( x => x . SetExecutionEnvironment ( Arg . Any < object > ( ) ) )
165- . Do ( callInfo =>
163+ . Do ( _ =>
166164 {
167165 var currentEnv = "PT/Metrics/1.0.0 PTENV/AWS_LAMBDA_DOTNET8" ;
168166 var assemblyName = "PT/Tracing" ;
@@ -180,10 +178,158 @@ public void SetExecutionEnvironment_Should_Not_Add_PTENV_Twice_With_Mocked_Value
180178 mockEnvironment . Received ( 1 ) . SetEnvironmentVariable ( "AWS_EXECUTION_ENV" , "PT/Metrics/1.0.0 PTENV/AWS_LAMBDA_DOTNET8 PT/Tracing/1.5.0" ) ;
181179 }
182180
181+ [ Fact ]
182+ public void GetAssemblyName_Should_Handle_Type_Object ( )
183+ {
184+ // Arrange
185+ var powertoolsEnv = new PowertoolsEnvironment ( ) ;
186+ var typeObject = typeof ( PowertoolsEnvironment ) ;
187+
188+ // Act
189+ var result = powertoolsEnv . GetAssemblyName ( typeObject ) ;
190+
191+ // Assert
192+ Assert . Equal ( "AWS.Lambda.Powertools.Common" , result ) ;
193+ }
194+
195+ [ Fact ]
196+ public void GetAssemblyName_Should_Handle_Regular_Object ( )
197+ {
198+ // Arrange
199+ var powertoolsEnv = new PowertoolsEnvironment ( ) ;
200+
201+ // Act
202+ var result = powertoolsEnv . GetAssemblyName ( this ) ;
203+
204+ // Assert
205+ Assert . Equal ( "AWS.Lambda.Powertools.Common.Tests" , result ) ;
206+ }
207+
208+ [ Fact ]
209+ public void GetAssemblyVersion_Should_Handle_Type_Object ( )
210+ {
211+ // Arrange
212+ var powertoolsEnv = new PowertoolsEnvironment ( ) ;
213+ var typeObject = typeof ( PowertoolsEnvironment ) ;
214+
215+ // Act
216+ var result = powertoolsEnv . GetAssemblyVersion ( typeObject ) ;
217+
218+ // Assert
219+ Assert . Matches ( @"\d+\.\d+\.\d+" , result ) ; // Should match version pattern like "1.0.0"
220+ }
221+
222+ [ Fact ]
223+ public void GetAssemblyVersion_Should_Handle_Regular_Object ( )
224+ {
225+ // Arrange
226+ var powertoolsEnv = new PowertoolsEnvironment ( ) ;
227+
228+ // Act
229+ var result = powertoolsEnv . GetAssemblyVersion ( this ) ;
230+
231+ // Assert
232+ Assert . Matches ( @"\d+\.\d+\.\d+" , result ) ; // Should match version pattern like "1.0.0"
233+ }
234+
235+ [ Fact ]
236+ public void ParseAssemblyName_Should_Handle_Assembly_Without_Dots ( )
237+ {
238+ // Arrange
239+ var powertoolsEnv = new PowertoolsEnvironment ( ) ;
240+
241+ // Act
242+ var result = powertoolsEnv . ParseAssemblyName ( "SimpleAssemblyName" ) ;
243+
244+ // Assert
245+ Assert . Equal ( $ "{ Constants . FeatureContextIdentifier } /SimpleAssemblyName", result ) ;
246+ }
247+
248+ [ Fact ]
249+ public void ParseAssemblyName_Should_Handle_Assembly_With_Dots ( )
250+ {
251+ // Arrange
252+ var powertoolsEnv = new PowertoolsEnvironment ( ) ;
253+
254+ // Act
255+ var result = powertoolsEnv . ParseAssemblyName ( "AWS.Lambda.Powertools.Common" ) ;
256+
257+ // Assert
258+ Assert . Equal ( $ "{ Constants . FeatureContextIdentifier } /Common", result ) ;
259+ }
260+
261+ [ Fact ]
262+ public void ParseAssemblyName_Should_Use_Cache_For_Same_Assembly_Name ( )
263+ {
264+ // Arrange
265+ var powertoolsEnv = new PowertoolsEnvironment ( ) ;
266+
267+ // Act - Call twice with same assembly name
268+ var result1 = powertoolsEnv . ParseAssemblyName ( "AWS.Lambda.Powertools.Tests" ) ;
269+ var result2 = powertoolsEnv . ParseAssemblyName ( "AWS.Lambda.Powertools.Tests" ) ;
270+
271+ // Assert - Should return same result (cached)
272+ Assert . Equal ( result1 , result2 ) ;
273+ Assert . Equal ( $ "{ Constants . FeatureContextIdentifier } /Tests", result1 ) ;
274+ }
275+
276+ [ Fact ]
277+ public void SetExecutionEnvironment_Should_Handle_Empty_Current_Environment ( )
278+ {
279+ // Arrange
280+ var powertoolsEnv = new PowertoolsEnvironment ( ) ;
281+ Environment . SetEnvironmentVariable ( "AWS_EXECUTION_ENV" , "" ) ;
282+
283+ // Act
284+ powertoolsEnv . SetExecutionEnvironment ( this ) ;
285+
286+ // Assert
287+ var result = powertoolsEnv . GetEnvironmentVariable ( "AWS_EXECUTION_ENV" ) ;
288+ Assert . Contains ( $ "{ Constants . FeatureContextIdentifier } /Tests/", result ) ;
289+ Assert . Contains ( "PTENV/AWS_LAMBDA_DOTNET" , result ) ;
290+ }
291+
292+ [ Fact ]
293+ public void SetExecutionEnvironment_Should_Add_PTENV_When_Not_Present ( )
294+ {
295+ // Arrange
296+ var powertoolsEnv = new PowertoolsEnvironment ( ) ;
297+ powertoolsEnv . SetEnvironmentVariable ( "AWS_EXECUTION_ENV" , "SomeExistingValue" ) ;
298+
299+ // Act
300+ powertoolsEnv . SetExecutionEnvironment ( this ) ;
301+
302+ // Assert
303+ var result = powertoolsEnv . GetEnvironmentVariable ( "AWS_EXECUTION_ENV" ) ;
304+ Assert . StartsWith ( "SomeExistingValue" , result ) ;
305+ Assert . Contains ( "PTENV/AWS_LAMBDA_DOTNET" , result ) ;
306+ }
307+
308+ [ Fact ]
309+ public void SetExecutionEnvironment_Should_Not_Add_PTENV_When_Already_Present ( )
310+ {
311+ // Arrange
312+ var powertoolsEnv = new PowertoolsEnvironment ( ) ;
313+ var existingValue = $ "ExistingValue PTENV/AWS_LAMBDA_DOTNET{ Environment . Version . Major } ";
314+ powertoolsEnv . SetEnvironmentVariable ( "AWS_EXECUTION_ENV" , existingValue ) ;
315+
316+ // Act
317+ powertoolsEnv . SetExecutionEnvironment ( this ) ;
318+
319+ // Assert
320+ var result = powertoolsEnv . GetEnvironmentVariable ( "AWS_EXECUTION_ENV" ) ;
321+ var ptenvCount = result . Split ( "PTENV/" ) . Length - 1 ;
322+ Assert . Equal ( 1 , ptenvCount ) ; // Should only have one PTENV entry
323+ }
324+
183325 public void Dispose ( )
184326 {
185327 //Do cleanup actions here
186-
187328 Environment . SetEnvironmentVariable ( "AWS_EXECUTION_ENV" , null ) ;
329+
330+ // Clear the singleton instance to ensure fresh state for each test
331+ var instanceField = typeof ( PowertoolsEnvironment ) . GetField ( "_instance" ,
332+ System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
333+ instanceField ? . SetValue ( null , null ) ;
188334 }
189335}
0 commit comments