1+ // SPDX-License-Identifier: MPL-2.0
2+ // SPDX-FileCopyrightText: Mirth Corporation
3+ // SPDX-FileCopyrightText: 2025 Mitch Gaffigan <mitch.gaffigan@comcast.net>
14package com .mirth .connect .server .api .providers ;
25
36import static org .mockito .Mockito .never ;
47import static org .mockito .Mockito .verify ;
8+ import static org .mockito .Mockito .when ;
59
6- import javax .servlet .FilterChain ;
7- import javax .servlet .http .HttpServletRequest ;
8- import javax .servlet .http .HttpServletResponse ;
10+ import javax .ws .rs .container .ContainerRequestContext ;
11+ import javax .ws .rs .core .Response ;
912
1013import org .apache .commons .configuration2 .PropertiesConfiguration ;
1114import org .junit .Test ;
15+ import org .mockito .ArgumentCaptor ;
16+ import org .mockito .ArgumentMatchers ;
1217import org .mockito .Mockito ;
1318
1419import com .mirth .connect .client .core .PropertiesConfigurationUtil ;
@@ -22,26 +27,34 @@ public class RequestedWithFilterTest extends TestCase {
2227 @ Test
2328 //assert that if property is set to false, isRequestedWithHeaderRequired = false
2429 public void testConstructor () {
25-
30+ mirthProperties .clearProperty ("server.api.require-requested-with" );
31+ RequestedWithFilter .configure (mirthProperties );
32+ assertEquals (true , RequestedWithFilter .isRequestedWithHeaderRequired ());
33+
2634 mirthProperties .setProperty ("server.api.require-requested-with" , "false" );
27- RequestedWithFilter requestedWithFilter = new RequestedWithFilter (mirthProperties );
28- assertEquals (requestedWithFilter .isRequestedWithHeaderRequired (), false );
35+ RequestedWithFilter . configure (mirthProperties );
36+ assertEquals (false , RequestedWithFilter .isRequestedWithHeaderRequired ());
2937 }
3038
3139 @ Test
3240 //assert that HttpServletResponse.sendError() is called when X-Requested-With is required but not present
3341 public void testDoFilterRequestedWithTrue () {
3442
3543 mirthProperties .setProperty ("server.api.require-requested-with" , "true" );
36- RequestedWithFilter testFilter = new RequestedWithFilter (mirthProperties );
37-
38- HttpServletRequest mockReq = Mockito .mock (HttpServletRequest .class );
39- HttpServletResponse mockResp = Mockito .mock (HttpServletResponse .class );
40- FilterChain mockFilterChain = Mockito .mock (FilterChain .class );
41-
44+ RequestedWithFilter .configure (mirthProperties );
45+
46+ ContainerRequestContext mockCtx = Mockito .mock (ContainerRequestContext .class );
47+ when (mockCtx .getHeaders ()).thenReturn (new javax .ws .rs .core .MultivaluedHashMap <String , String >());
48+
4249 try {
43- testFilter .doFilter (mockReq , mockResp , mockFilterChain );
44- verify (mockResp ).sendError (HttpServletResponse .SC_BAD_REQUEST , "All requests must have 'X-Requested-With' header" );
50+ RequestedWithFilter filter = new RequestedWithFilter ();
51+ filter .filter (mockCtx );
52+ ArgumentCaptor <Response > responseCaptor =
53+ ArgumentCaptor .forClass (Response .class );
54+ verify (mockCtx ).abortWith (responseCaptor .capture ());
55+ Response response = responseCaptor .getValue ();
56+ assertEquals (400 , response .getStatus ());
57+ assertEquals ("All requests must have 'X-Requested-With' header" , response .getEntity ());
4558 } catch (Exception e ) {
4659 e .printStackTrace ();
4760 }
@@ -52,15 +65,15 @@ public void testDoFilterRequestedWithTrue() {
5265 public void testDoFilterRequestedWithFalse () {
5366
5467 mirthProperties .setProperty ("server.api.require-requested-with" , "false" );
55- RequestedWithFilter testFilter = new RequestedWithFilter (mirthProperties );
56-
57- HttpServletRequest mockReq = Mockito .mock (HttpServletRequest .class );
58- HttpServletResponse mockResp = Mockito .mock (HttpServletResponse .class );
59- FilterChain mockFilterChain = Mockito .mock (FilterChain .class );
60-
68+ RequestedWithFilter .configure (mirthProperties );
69+
70+ ContainerRequestContext mockCtx = Mockito .mock (ContainerRequestContext .class );
71+ when (mockCtx .getHeaders ()).thenReturn (new javax .ws .rs .core .MultivaluedHashMap <String , String >());
72+
6173 try {
62- testFilter .doFilter (mockReq , mockResp , mockFilterChain );
63- verify (mockResp , never ()).sendError (HttpServletResponse .SC_BAD_REQUEST , "All requests must have 'X-Requested-With' header" );
74+ RequestedWithFilter filter = new RequestedWithFilter ();
75+ filter .filter (mockCtx );
76+ verify (mockCtx , never ()).abortWith (ArgumentMatchers .any (javax .ws .rs .core .Response .class ));
6477 } catch (Exception e ) {
6578 e .printStackTrace ();
6679 }
0 commit comments