22
33import com .fasterxml .jackson .databind .JsonNode ;
44import com .fasterxml .jackson .databind .ObjectMapper ;
5- import com .fasterxml .jackson .databind .node .ArrayNode ;
65import com .fasterxml .jackson .databind .node .ObjectNode ;
7- import org .junit .jupiter .api .BeforeAll ;
86import org .junit .jupiter .api .BeforeEach ;
97import org .junit .jupiter .api .Test ;
108import org .springframework .beans .factory .annotation .Autowired ;
119import org .springframework .boot .test .autoconfigure .web .servlet .AutoConfigureMockMvc ;
1210import org .springframework .boot .test .context .SpringBootTest ;
1311import org .springframework .boot .test .mock .mockito .MockBean ;
12+ import org .springframework .boot .test .mock .mockito .SpyBean ;
1413import org .springframework .http .MediaType ;
1514import org .springframework .test .context .DynamicPropertyRegistry ;
1615import org .springframework .test .context .DynamicPropertySource ;
1716import org .springframework .test .web .servlet .MockMvc ;
1817import org .springframework .transaction .annotation .Transactional ;
19- import org .springframework .web .client .RestTemplate ;
2018import org .testcontainers .containers .PostgreSQLContainer ;
2119import org .testcontainers .junit .jupiter .Container ;
2220import org .testcontainers .junit .jupiter .Testcontainers ;
2624import uk .ac .ebi .eva .submission .service .GlobusTokenRefreshService ;
2725import uk .ac .ebi .eva .submission .util .SchemaDownloader ;
2826
29- import java .io .BufferedReader ;
30- import java .io .IOException ;
31- import java .io .InputStream ;
32- import java .io .InputStreamReader ;
33- import java .net .URL ;
34- import java .nio .charset .StandardCharsets ;
3527import java .time .ZonedDateTime ;
3628import java .util .List ;
3729import java .util .stream .Collectors ;
3830import java .util .stream .StreamSupport ;
3931
4032import static org .assertj .core .api .Assertions .assertThat ;
41- import static org .mockito .ArgumentMatchers .eq ;
42- import static org .mockito .Mockito .when ;
33+ import static org .mockito .Mockito .doThrow ;
4334import static org .springframework .test .web .servlet .request .MockMvcRequestBuilders .post ;
4435import static org .springframework .test .web .servlet .result .MockMvcResultMatchers .content ;
4536import static org .springframework .test .web .servlet .result .MockMvcResultMatchers .status ;
4839@ AutoConfigureMockMvc
4940@ Testcontainers
5041public class CallHomeWSIntegrationTest {
42+ private static String callhomeSchemaURL = "https://raw.githubusercontent.com/EBIvariation/eva-sub-cli/main/eva_sub_cli/etc/call_home_payload_schema.json" ;
43+
5144 @ Autowired
5245 private CallHomeEventRepository callHomeEventRepository ;
5346
47+ @ SpyBean
5448 @ Autowired
5549 private SchemaDownloader schemaDownloader ;
5650
@@ -63,34 +57,9 @@ public class CallHomeWSIntegrationTest {
6357 @ Autowired
6458 private MockMvc mvc ;
6559
66- @ MockBean
67- private static RestTemplate restTemplate ;
68-
69- private static String mockVersion = "v1.0.0" ;
70- private static String mockSchemaUrl = SchemaDownloader .SCHEMA_URL .replace ("{tag}" , mockVersion );
71- private static String schema = "" ;
72-
73- @ BeforeAll
74- public static void downloadSchema () throws IOException {
75- // get schema from main
76- String schemaURL = "https://raw.githubusercontent.com/EBIvariation/eva-sub-cli/main/eva_sub_cli/etc/call_home_payload_schema.json" ;
77- try (InputStream in = new URL (schemaURL ).openStream ();
78- BufferedReader reader = new BufferedReader (new InputStreamReader (in , StandardCharsets .UTF_8 ))) {
79- schema = reader .lines ().collect (Collectors .joining ("\n " ));
80- }
81- }
82-
8360 @ BeforeEach
84- public void setup () throws IOException {
61+ public void setup () {
8562 schemaDownloader .evictSchemaCache ();
86-
87- // mock tag
88- ObjectMapper mapper = new ObjectMapper ();
89- ArrayNode arrayNode = mapper .createArrayNode ();
90- ObjectNode tagNode = mapper .createObjectNode ();
91- tagNode .put ("name" , mockVersion );
92- arrayNode .add (tagNode );
93- when (restTemplate .getForObject (eq (SchemaDownloader .TAG_URL ), eq (JsonNode .class ))).thenReturn (arrayNode );
9463 }
9564
9665 @ Container
@@ -108,15 +77,14 @@ static void dataSourceProperties(DynamicPropertyRegistry registry) {
10877 registry .add ("eva.email.server" , () -> "test-email-server" );
10978 registry .add ("eva.email.port" , () -> 1025 );
11079 registry .add ("eva.helpdesk.email" , () -> "test-helpdesk-email" );
80+ registry .add ("callhome.schema.url" , () -> callhomeSchemaURL );
11181 }
11282
11383
11484 @ Test
11585 @ Transactional
11686 public void testRegisterCallHomeEvent () throws Exception {
117- when (restTemplate .getForObject (eq (mockSchemaUrl ), eq (String .class ))).thenReturn (schema );
11887 ObjectMapper mapper = new ObjectMapper ();
119-
12088 ObjectNode callHomeJsonRootNode = getCallHomeJson (mapper );
12189
12290 mvc .perform (post ("/v1/call-home/events" )
@@ -151,9 +119,7 @@ public void testRegisterCallHomeEvent() throws Exception {
151119 @ Test
152120 @ Transactional
153121 public void testRegisterCallHomeEvent_BadRequestAsFieldIsMissing () throws Exception {
154- when (restTemplate .getForObject (eq (mockSchemaUrl ), eq (String .class ))).thenReturn (schema );
155122 ObjectMapper mapper = new ObjectMapper ();
156-
157123 ObjectNode callHomeJsonRootNode = getCallHomeJson (mapper );
158124 callHomeJsonRootNode .putNull ("eventType" );
159125
@@ -174,9 +140,10 @@ public void testRegisterCallHomeEvent_BadRequestAsFieldIsMissing() throws Except
174140 @ Test
175141 @ Transactional
176142 public void testRegisterCallHomeEvent_InternalServerError () throws Exception {
177- when ( restTemplate . getForObject ( eq ( mockSchemaUrl ), eq ( String . class ))). thenReturn ( null );
178- ObjectMapper mapper = new ObjectMapper ( );
143+ doThrow ( new RuntimeException ( "Exception while downloading schema" ))
144+ . when ( schemaDownloader ). loadSchemaFromGitHub ( callhomeSchemaURL );
179145
146+ ObjectMapper mapper = new ObjectMapper ();
180147 ObjectNode callHomeJsonRootNode = getCallHomeJson (mapper );
181148
182149 mvc .perform (post ("/v1/call-home/events" )
0 commit comments