11package com .example .demo .integration ;
22
3- import com .example .demo .model .Player ;
4- import com .example .demo .repository .PlayerRepository ;
5- import jakarta .persistence .EntityManager ;
3+ import com .example .demo .dto .PlayerDTO ;
4+ import com .example .demo .service .PlayerDataService ;
65import org .junit .jupiter .api .BeforeEach ;
76import org .junit .jupiter .api .Test ;
87import org .springframework .beans .factory .annotation .Autowired ;
9- import org .springframework .boot .test .autoconfigure .web .servlet .AutoConfigureMockMvc ;
10- import org .springframework .boot .test .context .SpringBootTest ;
11- import org .springframework .test .context .ActiveProfiles ;
8+ import org .springframework .boot .test .autoconfigure .web .servlet .WebMvcTest ;
9+ import org .springframework .boot .test .mock .mockito .MockBean ;
1210import org .springframework .test .web .servlet .MockMvc ;
13- import org .springframework .transaction .annotation .Transactional ;
1411
12+ import java .util .Arrays ;
13+ import java .util .List ;
14+
15+ import static org .mockito .Mockito .when ;
1516import static org .springframework .test .web .servlet .request .MockMvcRequestBuilders .get ;
1617import static org .springframework .test .web .servlet .result .MockMvcResultMatchers .*;
1718
18- @ SpringBootTest (webEnvironment = SpringBootTest .WebEnvironment .MOCK )
19- @ AutoConfigureMockMvc
20- @ ActiveProfiles ("test" )
21- @ Transactional
19+ /**
20+ * Integration tests for PlayerController HTTP endpoints.
21+ * Uses @WebMvcTest to test controller layer in isolation without database.
22+ */
23+ @ WebMvcTest (controllers = com .example .demo .controller .PlayerController .class ,
24+ excludeAutoConfiguration = {
25+ org .springframework .boot .autoconfigure .security .servlet .SecurityAutoConfiguration .class
26+ })
2227class PlayerControllerIntegrationTest {
2328
2429 @ Autowired
2530 private MockMvc mockMvc ;
2631
27- @ Autowired
28- private PlayerRepository playerRepository ;
32+ @ MockBean
33+ private PlayerDataService playerDataService ;
2934
30- @ Autowired
31- private EntityManager entityManager ;
35+ @ MockBean
36+ private org .springframework .web .client .RestTemplate restTemplate ;
37+
38+ private List <PlayerDTO > testPlayers ;
3239
3340 @ BeforeEach
3441 void setUp () {
35- // Schema is created by SQL scripts (schema.sql) before Hibernate validates
36- // Create test data - tables should already exist
37- Player testPlayer = new Player ();
38- testPlayer .setName ("Test Player" );
39- testPlayer .setPosition ("MID" );
40- testPlayer .setTeam ("Arsenal" );
41- testPlayer .setValue (50.0 );
42- testPlayer .setTotalPoints (100 );
43- testPlayer .setWeeklyPoints (10 );
44- testPlayer .setFplId (1L );
45- playerRepository .saveAndFlush (testPlayer );
42+ // Create test data - no database needed, service is mocked
43+ PlayerDTO player1 = new PlayerDTO ();
44+ player1 .setId (1L );
45+ player1 .setName ("Test Player" );
46+ player1 .setPosition ("MID" );
47+ player1 .setTeam ("Arsenal" );
48+ player1 .setValue (50.0 );
49+ player1 .setTotalPoints (100 );
50+ player1 .setWeeklyPoints (10 );
51+ player1 .setFplId (1L );
52+
53+ PlayerDTO player2 = new PlayerDTO ();
54+ player2 .setId (2L );
55+ player2 .setName ("Another Player" );
56+ player2 .setPosition ("DEF" );
57+ player2 .setTeam ("Chelsea" );
58+ player2 .setValue (45.0 );
59+ player2 .setTotalPoints (80 );
60+ player2 .setWeeklyPoints (5 );
61+ player2 .setFplId (2L );
62+
63+ testPlayers = Arrays .asList (player1 , player2 );
64+ when (playerDataService .getAllPlayers ()).thenReturn (testPlayers );
4665 }
4766
4867 @ Test
@@ -54,17 +73,29 @@ void testGetPlayersEndpoint() throws Exception {
5473
5574 @ Test
5675 void testGetPlayersWithPagination () throws Exception {
76+ // Mock service to return paginated results
77+ when (playerDataService .getAllPlayers ()).thenReturn (testPlayers .subList (0 , 1 ));
78+
5779 mockMvc .perform (get ("/api/v1/players" )
5880 .param ("page" , "0" )
59- .param ("size" , "5" ))
60- .andExpect (status ().isOk ());
81+ .param ("size" , "1" ))
82+ .andExpect (status ().isOk ())
83+ .andExpect (content ().contentType ("application/json" ));
6184 }
6285
6386 @ Test
6487 void testGetPlayersWithTeamFilter () throws Exception {
88+ // Mock service to return filtered results
89+ when (playerDataService .getAllPlayers ()).thenReturn (
90+ testPlayers .stream ()
91+ .filter (p -> "Arsenal" .equals (p .getTeam ()))
92+ .toList ()
93+ );
94+
6595 mockMvc .perform (get ("/api/v1/players" )
6696 .param ("team" , "Arsenal" ))
67- .andExpect (status ().isOk ());
97+ .andExpect (status ().isOk ())
98+ .andExpect (content ().contentType ("application/json" ));
6899 }
69100}
70101
0 commit comments