@@ -80,6 +80,35 @@ describe('Class: Metrics', () => {
8080 expect ( loggedData [ additionalDimension . name ] ) . toEqual ( additionalDimension . value ) ;
8181 } ) ;
8282
83+ test ( 'Publish Stored Metrics should clear added dimensions' , async ( ) => {
84+ const metrics = new Metrics ( { namespace : 'test' } ) ;
85+ const dimensionItem = { name : 'dimensionName' , value : 'dimensionValue' } ;
86+
87+ class LambdaFunction implements LambdaInterface {
88+ @metrics . logMetrics ( )
89+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
90+ // @ts -ignore
91+ public handler < TEvent , TResult > (
92+ _event : TEvent ,
93+ _context : Context ,
94+ _callback : Callback < TResult > ,
95+ ) : void | Promise < TResult > {
96+ metrics . addMetric ( 'test_name_1' , MetricUnits . Count , 1 ) ;
97+ metrics . addDimension ( dimensionItem . name , dimensionItem . value ) ;
98+ metrics . publishStoredMetrics ( ) ;
99+ }
100+ }
101+
102+ await new LambdaFunction ( ) . handler ( dummyEvent , dummyContext . helloworldContext , ( ) => console . log ( 'Lambda invoked!' ) ) ;
103+ const loggedData = [ JSON . parse ( consoleSpy . mock . calls [ 0 ] [ 0 ] ) , JSON . parse ( consoleSpy . mock . calls [ 1 ] [ 0 ] ) ] ;
104+
105+ expect ( console . log ) . toBeCalledTimes ( 2 ) ;
106+ expect ( loggedData [ 0 ] [ dimensionItem . name ] ) . toEqual ( dimensionItem . value ) ;
107+ expect ( loggedData [ 0 ] . _aws . CloudWatchMetrics [ 0 ] . Dimensions [ 0 ] . length ) . toEqual ( 1 ) ;
108+ expect ( loggedData [ 1 ] [ dimensionItem . name ] ) . toBeUndefined ( ) ;
109+ expect ( loggedData [ 1 ] . _aws . CloudWatchMetrics [ 0 ] . Dimensions [ 0 ] . length ) . toEqual ( 0 ) ;
110+ } ) ;
111+
83112 test ( 'Adding more than max dimensions should throw error' , ( ) => {
84113 expect . assertions ( 1 ) ;
85114 const metrics = new Metrics ( ) ;
@@ -144,6 +173,33 @@ describe('Class: Metrics', () => {
144173 expect ( loggedData [ metadataItem . name ] ) . toEqual ( metadataItem . value ) ;
145174 expect ( postClearLoggedData [ metadataItem . name ] ) . toBeUndefined ( ) ;
146175 } ) ;
176+
177+ test ( 'Publish Stored Metrics should clear metadata' , async ( ) => {
178+ const metrics = new Metrics ( { namespace : 'test' } ) ;
179+ const metadataItem = { name : 'metaName' , value : 'metaValue' } ;
180+
181+ class LambdaFunction implements LambdaInterface {
182+ @metrics . logMetrics ( )
183+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
184+ // @ts -ignore
185+ public handler < TEvent , TResult > (
186+ _event : TEvent ,
187+ _context : Context ,
188+ _callback : Callback < TResult > ,
189+ ) : void | Promise < TResult > {
190+ metrics . addMetric ( 'test_name_1' , MetricUnits . Count , 1 ) ;
191+ metrics . addMetadata ( metadataItem . name , metadataItem . value ) ;
192+ metrics . publishStoredMetrics ( ) ;
193+ }
194+ }
195+
196+ await new LambdaFunction ( ) . handler ( dummyEvent , dummyContext . helloworldContext , ( ) => console . log ( 'Lambda invoked!' ) ) ;
197+ const loggedData = [ JSON . parse ( consoleSpy . mock . calls [ 0 ] [ 0 ] ) , JSON . parse ( consoleSpy . mock . calls [ 1 ] [ 0 ] ) ] ;
198+
199+ expect ( console . log ) . toBeCalledTimes ( 2 ) ;
200+ expect ( loggedData [ 0 ] [ metadataItem . name ] ) . toEqual ( metadataItem . value ) ;
201+ expect ( loggedData [ 1 ] [ metadataItem . name ] ) . toBeUndefined ( ) ;
202+ } ) ;
147203 } ) ;
148204
149205 describe ( 'Feature: Default Dimensions' , ( ) => {
0 commit comments