@@ -14,11 +14,12 @@ jest.unstable_mockModule('../repositories/audit.repository.js', () => ({
1414 } ,
1515} ) ) ;
1616
17- // Mock config
17+ // Mock config (mutable so individual tests can override flags)
18+ const mockConfig = {
19+ audit : { enabled : true , ttlDays : 90 , captureIp : true , captureUserAgent : true } ,
20+ } ;
1821jest . unstable_mockModule ( '../../../config/index.js' , ( ) => ( {
19- default : {
20- audit : { enabled : true , ttlDays : 90 } ,
21- } ,
22+ default : mockConfig ,
2223} ) ) ;
2324
2425// Mock logger to avoid winston config dependency in unit tests
@@ -46,6 +47,8 @@ describe('AuditService unit tests:', () => {
4647
4748 afterEach ( ( ) => {
4849 jest . restoreAllMocks ( ) ;
50+ // Reset config to defaults
51+ mockConfig . audit = { enabled : true , ttlDays : 90 , captureIp : true , captureUserAgent : true } ;
4952 } ) ;
5053
5154 test ( 'should log an audit entry with request context' , async ( ) => {
@@ -111,4 +114,37 @@ describe('AuditService unit tests:', () => {
111114 await AuditService . list ( { action : undefined , userId } , 1 , 10 ) ;
112115 expect ( mockList ) . toHaveBeenCalledWith ( { userId } , 1 , 10 ) ;
113116 } ) ;
117+
118+ // GDPR config flag tests
119+ test ( 'should capture IP when captureIp is true (default)' , async ( ) => {
120+ mockConfig . audit = { enabled : true , ttlDays : 90 , captureIp : true , captureUserAgent : true } ;
121+ const req = { ip : '10.0.0.1' , headers : { 'user-agent' : 'Bot/1.0' } } ;
122+ await AuditService . log ( { action : 'test.ip' , req } ) ;
123+ const arg = mockCreate . mock . calls [ 0 ] [ 0 ] ;
124+ expect ( arg . ip ) . toBe ( '10.0.0.1' ) ;
125+ } ) ;
126+
127+ test ( 'should set IP to empty string when captureIp is false' , async ( ) => {
128+ mockConfig . audit = { enabled : true , ttlDays : 90 , captureIp : false , captureUserAgent : true } ;
129+ const req = { ip : '10.0.0.1' , headers : { 'user-agent' : 'Bot/1.0' } } ;
130+ await AuditService . log ( { action : 'test.ip' , req } ) ;
131+ const arg = mockCreate . mock . calls [ 0 ] [ 0 ] ;
132+ expect ( arg . ip ) . toBe ( '' ) ;
133+ } ) ;
134+
135+ test ( 'should capture User-Agent when captureUserAgent is true (default)' , async ( ) => {
136+ mockConfig . audit = { enabled : true , ttlDays : 90 , captureIp : true , captureUserAgent : true } ;
137+ const req = { ip : '10.0.0.1' , headers : { 'user-agent' : 'Bot/1.0' } } ;
138+ await AuditService . log ( { action : 'test.ua' , req } ) ;
139+ const arg = mockCreate . mock . calls [ 0 ] [ 0 ] ;
140+ expect ( arg . userAgent ) . toBe ( 'Bot/1.0' ) ;
141+ } ) ;
142+
143+ test ( 'should set User-Agent to empty string when captureUserAgent is false' , async ( ) => {
144+ mockConfig . audit = { enabled : true , ttlDays : 90 , captureIp : true , captureUserAgent : false } ;
145+ const req = { ip : '10.0.0.1' , headers : { 'user-agent' : 'Bot/1.0' } } ;
146+ await AuditService . log ( { action : 'test.ua' , req } ) ;
147+ const arg = mockCreate . mock . calls [ 0 ] [ 0 ] ;
148+ expect ( arg . userAgent ) . toBe ( '' ) ;
149+ } ) ;
114150} ) ;
0 commit comments