Skip to content

Commit 9efd0da

Browse files
committed
Added tests for airline controller
1 parent 02cb152 commit 9efd0da

File tree

5 files changed

+424
-22
lines changed

5 files changed

+424
-22
lines changed

src/main/java/org/couchbase/quickstart/springboot/controllers/AirlineController.java

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,12 @@
11
package org.couchbase.quickstart.springboot.controllers;
22

3-
import java.util.Arrays;
3+
import java.net.URI;
44
import java.util.List;
5-
import java.util.UUID;
6-
7-
import com.couchbase.client.core.error.DocumentNotFoundException;
8-
import com.couchbase.client.core.msg.kv.DurabilityLevel;
9-
import com.couchbase.client.java.Bucket;
10-
import com.couchbase.client.java.Cluster;
11-
import com.couchbase.client.java.Collection;
12-
import com.couchbase.client.java.json.JsonObject;
13-
import com.couchbase.client.java.query.QueryOptions;
14-
import com.couchbase.client.java.query.QueryScanConsistency;
15-
import com.couchbase.client.java.transactions.TransactionQueryOptions;
16-
import com.couchbase.client.java.transactions.config.TransactionOptions;
175

186
import org.couchbase.quickstart.springboot.configs.DBProperties;
197
import org.couchbase.quickstart.springboot.models.Airline;
8+
import org.springframework.beans.factory.annotation.Autowired;
209
import org.springframework.http.HttpStatus;
21-
import org.springframework.http.MediaType;
2210
import org.springframework.http.ResponseEntity;
2311
import org.springframework.web.bind.annotation.CrossOrigin;
2412
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -28,14 +16,18 @@
2816
import org.springframework.web.bind.annotation.PutMapping;
2917
import org.springframework.web.bind.annotation.RequestBody;
3018
import org.springframework.web.bind.annotation.RequestMapping;
31-
import org.springframework.web.bind.annotation.RequestParam;
3219
import org.springframework.web.bind.annotation.RestController;
3320

34-
import io.swagger.annotations.ApiOperation;
35-
import io.swagger.annotations.ApiResponse;
36-
import io.swagger.annotations.ApiResponses;
21+
import com.couchbase.client.core.error.DocumentNotFoundException;
22+
import com.couchbase.client.java.Bucket;
23+
import com.couchbase.client.java.Cluster;
24+
import com.couchbase.client.java.Collection;
25+
import com.couchbase.client.java.json.JsonObject;
26+
import com.couchbase.client.java.query.QueryOptions;
27+
import com.couchbase.client.java.query.QueryScanConsistency;
3728

3829
@RestController
30+
@CrossOrigin
3931
@RequestMapping("/api/v1/airline")
4032
public class AirlineController {
4133

@@ -54,15 +46,21 @@ public AirlineController(Cluster cluster, Bucket bucket, DBProperties dbProperti
5446

5547
@GetMapping("/{id}")
5648
public ResponseEntity<Airline> getAirline(@PathVariable String id) {
57-
Airline createdAirline = airlineCol.get(id).contentAs(Airline.class);
58-
return new ResponseEntity<>(createdAirline, HttpStatus.CREATED);
49+
try {
50+
Airline airline = airlineCol.get(id).contentAs(Airline.class);
51+
return new ResponseEntity<>(airline, HttpStatus.OK);
52+
} catch (DocumentNotFoundException e) {
53+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
54+
}
5955
}
6056

6157
@PostMapping("/{id}")
6258
public ResponseEntity<Airline> createAirline(@PathVariable String id, @RequestBody Airline airline) {
6359
airlineCol.insert(id, airline);
6460
Airline createdAirline = airlineCol.get(id).contentAs(Airline.class);
65-
return new ResponseEntity<>(createdAirline, HttpStatus.CREATED);
61+
62+
return ResponseEntity.created(URI.create("/api/v1/airline/" + id)).body(createdAirline);
63+
6664
}
6765

6866
@PutMapping("/{id}")

src/main/resources/application.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
spring.couchbase.bootstrap-hosts=host.docker.internal
1+
spring.couchbase.bootstrap-hosts=localhost
22
spring.couchbase.bucket.name=travel-sample
33
spring.couchbase.bucket.user=kaustav
44
spring.couchbase.bucket.scope=inventory
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package org.couchbase.quickstart.springboot.controllers;
2+
3+
import java.util.Arrays;
4+
import java.util.List;
5+
6+
import org.couchbase.quickstart.springboot.configs.DBProperties;
7+
import org.couchbase.quickstart.springboot.models.Airline;
8+
import org.junit.jupiter.api.BeforeEach;
9+
import org.junit.jupiter.api.Test;
10+
import org.mockito.Mockito;
11+
import org.springframework.beans.factory.annotation.Autowired;
12+
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
13+
import org.springframework.boot.test.mock.mockito.MockBean;
14+
import org.springframework.http.MediaType;
15+
import org.springframework.test.web.servlet.MockMvc;
16+
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
17+
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
18+
19+
import com.couchbase.client.java.Bucket;
20+
import com.couchbase.client.java.Cluster;
21+
import com.couchbase.client.java.Collection;
22+
import com.couchbase.client.java.kv.GetResult;
23+
import com.fasterxml.jackson.databind.ObjectMapper;
24+
25+
@WebMvcTest(AirlineController.class)
26+
class AirlineControllerMockitoTest {
27+
28+
@Autowired
29+
private MockMvc mockMvc;
30+
31+
@MockBean
32+
private Cluster cluster;
33+
34+
@MockBean
35+
private Collection airlineCol;
36+
37+
@MockBean
38+
private DBProperties dbProperties;
39+
40+
@MockBean
41+
private Bucket bucket;
42+
43+
@BeforeEach
44+
void setUp() {
45+
airlineCol = Mockito.mock(Collection.class);
46+
cluster = Mockito.mock(Cluster.class);
47+
dbProperties = Mockito.mock(DBProperties.class);
48+
bucket = Mockito.mock(Bucket.class);
49+
}
50+
51+
@Test
52+
void getAirline() throws Exception {
53+
Airline airline = new Airline();
54+
GetResult getResult = Mockito.mock(GetResult.class);
55+
Mockito.when(getResult.contentAs(Airline.class)).thenReturn(airline);
56+
Mockito.when(airlineCol.get(Mockito.anyString())).thenReturn(getResult);
57+
58+
mockMvc.perform(MockMvcRequestBuilders.get("/api/v1/airline/{id}", "test"))
59+
.andExpect(MockMvcResultMatchers.status().isOk())
60+
.andExpect(MockMvcResultMatchers.jsonPath("$.id").value(airline.getId()));
61+
}
62+
63+
@Test
64+
void createAirline() throws Exception {
65+
Airline airline = new Airline();
66+
Mockito.when(airlineCol.insert(Mockito.anyString(), Mockito.any())).thenReturn(null);
67+
68+
mockMvc.perform(MockMvcRequestBuilders.post("/api/v1/airline/{id}", "test")
69+
.contentType(MediaType.APPLICATION_JSON)
70+
.content(new ObjectMapper().writeValueAsString(airline)))
71+
.andExpect(MockMvcResultMatchers.status().isCreated());
72+
}
73+
74+
@Test
75+
void updateAirline() throws Exception {
76+
Airline airline = new Airline();
77+
Mockito.when(airlineCol.replace(Mockito.anyString(), Mockito.any())).thenReturn(null);
78+
79+
mockMvc.perform(MockMvcRequestBuilders.put("/api/v1/airline/{id}", "test")
80+
.contentType(MediaType.APPLICATION_JSON)
81+
.content(new ObjectMapper().writeValueAsString(airline)))
82+
.andExpect(MockMvcResultMatchers.status().isOk());
83+
}
84+
85+
@Test
86+
void deleteAirline() throws Exception {
87+
Mockito.doNothing().when(airlineCol).remove(Mockito.anyString());
88+
89+
mockMvc.perform(MockMvcRequestBuilders.delete("/api/v1/airline/{id}", "test"))
90+
.andExpect(MockMvcResultMatchers.status().isNoContent());
91+
}
92+
93+
@Test
94+
void listAirlines() throws Exception {
95+
Airline airline1 = new Airline("10", "airline", "40-Mile Air", "Q5", "MLA", "MILE-AIR", "United States");
96+
Airline airline2 = new Airline("10123", "airline", "Texas Wings", "TQ", "TXW", "TXW", "United States");
97+
List<Airline> airlines = Arrays.asList(airline1, airline2);
98+
99+
Mockito.when(airlineCol.list(Mockito.any(),Airline.class)).thenReturn(airlines);
100+
101+
mockMvc.perform(MockMvcRequestBuilders.get("/api/v1/airline/list"))
102+
.andExpect(MockMvcResultMatchers.status().isOk())
103+
.andExpect(MockMvcResultMatchers.jsonPath("$[0].id").value(airline1.getId()))
104+
.andExpect(MockMvcResultMatchers.jsonPath("$[1].id").value(airline2.getId()));
105+
106+
107+
}
108+
}
Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
package org.couchbase.quickstart.springboot.controllers;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.util.List;
6+
7+
import org.couchbase.quickstart.springboot.models.Airline;
8+
import org.junit.jupiter.api.Test;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.beans.factory.annotation.Value;
11+
import org.springframework.boot.test.context.SpringBootTest;
12+
import org.springframework.boot.test.web.client.TestRestTemplate;
13+
import org.springframework.http.HttpStatus;
14+
import org.springframework.http.ResponseEntity;
15+
16+
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
17+
class AirlineControllerTest {
18+
19+
@Value("${local.server.port}")
20+
private int port;
21+
22+
@Autowired
23+
private TestRestTemplate restTemplate;
24+
25+
// {"id":10,"type":"airline","name":"40-Mile Air","iata":"Q5","icao":"MLA","callsign":"MILE-AIR","country":"United States"}
26+
@Test
27+
void testGetAirline() {
28+
ResponseEntity<Airline> response = restTemplate.getForEntity("http://localhost:" + port + "/api/v1/airline/airline_10", Airline.class);
29+
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
30+
Airline airline = response.getBody();
31+
assertThat(airline).isNotNull();
32+
assertThat(airline.getId()).isEqualTo("10");
33+
assertThat(airline.getType()).isEqualTo("airline");
34+
assertThat(airline.getName()).isEqualTo("40-Mile Air");
35+
assertThat(airline.getIata()).isEqualTo("Q5");
36+
assertThat(airline.getIcao()).isEqualTo("MLA");
37+
assertThat(airline.getCallsign()).isEqualTo("MILE-AIR");
38+
assertThat(airline.getCountry()).isEqualTo("United States");
39+
}
40+
41+
@Test
42+
void testCreateAirline() {
43+
Airline airline = new Airline("airline_11", "airline", "Test Airline", "TA", "TST", "TEST", "United States");
44+
ResponseEntity<Airline> response = restTemplate.postForEntity("http://localhost:" + port + "/api/v1/airline/" + airline.getId(), airline, Airline.class);
45+
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.CREATED);
46+
Airline createdAirline = response.getBody();
47+
assertThat(createdAirline).isNotNull();
48+
assertThat(createdAirline.getId()).isEqualTo("airline_11");
49+
assertThat(createdAirline.getType()).isEqualTo("airline");
50+
assertThat(createdAirline.getName()).isEqualTo("Test Airline");
51+
assertThat(createdAirline.getIata()).isEqualTo("TA");
52+
assertThat(createdAirline.getIcao()).isEqualTo("TST");
53+
assertThat(createdAirline.getCallsign()).isEqualTo("TEST");
54+
assertThat(createdAirline.getCountry()).isEqualTo("United States");
55+
}
56+
57+
@Test
58+
void testUpdateAirline() {
59+
Airline airline = new Airline("airline_11", "airline", "Updated Test Airline", "TA", "TST", "TEST", "United States");
60+
restTemplate.put("http://localhost:" + port + "/api/v1/airline/" + airline.getId(), airline);
61+
ResponseEntity<Airline> response = restTemplate.getForEntity("http://localhost:" + port + "/api/v1/airline/" + airline.getId(), Airline.class);
62+
63+
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
64+
Airline updatedAirline = response.getBody();
65+
assertThat(updatedAirline).isNotNull();
66+
assertThat(updatedAirline.getId()).isEqualTo("airline_11");
67+
assertThat(updatedAirline.getType()).isEqualTo("airline");
68+
assertThat(updatedAirline.getName()).isEqualTo("Updated Test Airline");
69+
assertThat(updatedAirline.getIata()).isEqualTo("TA");
70+
assertThat(updatedAirline.getIcao()).isEqualTo("TST");
71+
assertThat(updatedAirline.getCallsign()).isEqualTo("TEST");
72+
assertThat(updatedAirline.getCountry()).isEqualTo("United States");
73+
74+
}
75+
76+
@Test
77+
void testDeleteAirline() {
78+
ResponseEntity<Airline> response = restTemplate.getForEntity("http://localhost:" + port + "/api/v1/airline/airline_11", Airline.class);
79+
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
80+
Airline airline = response.getBody();
81+
assertThat(airline).isNotNull();
82+
restTemplate.delete("http://localhost:" + port + "/api/v1/airline/" + airline.getId());
83+
ResponseEntity<Airline> response2 = restTemplate.getForEntity("http://localhost:" + port + "/api/v1/airline/airline_11", Airline.class);
84+
assertThat(response2.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
85+
}
86+
87+
@Test
88+
void testListAirlines() {
89+
ResponseEntity<List> response = restTemplate.getForEntity("http://localhost:" + port + "/api/v1/airline/list", List.class);
90+
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
91+
92+
}
93+
94+
@Test
95+
void testListAirlinesByCountry() {
96+
ResponseEntity<List> response = restTemplate.getForEntity("http://localhost:" + port + "/api/v1/airline/country/test", List.class);
97+
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
98+
// Add more assertions as needed
99+
}
100+
101+
// @Test
102+
// void testListAirlinesByDestinationAirport() {
103+
// ResponseEntity<List> response = restTemplate.getForEntity("http://localhost:" + port + "/api/v1/airline/destination/test", List.class);
104+
// assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
105+
// // Add more assertions as needed
106+
// }
107+
}
108+
109+
110+
//package org.couchbase.quickstart.springboot.controllers;
111+
//
112+
//import org.couchbase.quickstart.springboot.configs.CouchbaseConfig;
113+
//import org.couchbase.quickstart.springboot.configs.DBProperties;
114+
//import org.couchbase.quickstart.springboot.configs.Swagger;
115+
//import org.junit.Before;
116+
//import org.junit.Test;
117+
//import org.junit.runner.RunWith;
118+
//import org.springframework.beans.factory.annotation.Autowired;
119+
//import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
120+
//import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
121+
//import org.springframework.boot.test.context.SpringBootTest;
122+
//import org.springframework.test.context.ContextConfiguration;
123+
//import org.springframework.test.context.junit4.SpringRunner;
124+
//import org.springframework.test.context.web.WebAppConfiguration;
125+
//import org.springframework.test.web.servlet.MockMvc;
126+
//import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
127+
//import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
128+
//import org.springframework.test.web.servlet.setup.MockMvcBuilders;
129+
//import org.springframework.web.context.WebApplicationContext;
130+
//
131+
//import com.couchbase.client.java.Bucket;
132+
//import com.couchbase.client.java.Cluster;
133+
//import com.couchbase.client.java.Collection;
134+
//
135+
//
136+
////@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
137+
////@AutoConfigureMockMvc
138+
//@ContextConfiguration(classes = {CouchbaseConfig.class, Swagger.class, DBProperties.class})
139+
////@RunWith(SpringRunner.class)
140+
//
141+
//@RunWith(SpringRunner.class)
142+
//@WebMvcTest(AirlineController.class)
143+
//@WebAppConfiguration
144+
//public class AirlineControllerTest {
145+
//
146+
// @Autowired
147+
// private WebApplicationContext webApplicationContext;
148+
//
149+
// private MockMvc mockMvc;
150+
//
151+
// // ... your other dependencies or setup if needed
152+
//
153+
// @Before
154+
// public void setup() {
155+
// mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
156+
// }
157+
//
158+
// @Test
159+
// public void testGetAirline() {
160+
// // Perform the GET request using mockMvc and assert the response
161+
// mockMvc.perform(MockMvcRequestBuilders.get("/api/v1/airline/test"))
162+
// .andExpect(MockMvcResultMatchers.status().isOk())
163+
// .andExpect(MockMvcResultMatchers.jsonPath("$.id").value("test"));
164+
// }
165+
//
166+
// // ... other test methods
167+
//}

0 commit comments

Comments
 (0)