Skip to content

Commit 328bfdd

Browse files
committed
refactorred models, updated the integration tests and added tests.yaml
1 parent b3903e2 commit 328bfdd

File tree

9 files changed

+215
-99
lines changed

9 files changed

+215
-99
lines changed

.github/workflows/tests.yaml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: Tests
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
schedule:
9+
- cron: "0 */6 * * *"
10+
11+
jobs:
12+
run_tests:
13+
name: Run Tests
14+
runs-on: ubuntu-latest
15+
strategy:
16+
matrix:
17+
java-version: ["8", "11", "17"]
18+
steps:
19+
- name: Update repositories
20+
run: |
21+
sudo apt update || echo "apt-update failed" # && apt -y upgrade
22+
23+
- name: Checkout ${{ github.event.repository.name }}
24+
uses: actions/checkout@v4
25+
26+
- name: Set up JDK ${{ matrix.java-version }}
27+
uses: actions/setup-java@v4
28+
with:
29+
java-version: ${{ matrix.java-version }}
30+
distribution: "adopt"
31+
32+
- name: Replace secrets in application.properties
33+
run: |
34+
sed -i "s#DB_CONN_STR#${{ vars.DB_CONN_STR }}#g" src/main/resources/application.properties
35+
sed -i "s#DB_USERNAME#${{ vars.DB_USERNAME }}#g" src/main/resources/application.properties
36+
sed -i "s#DB_PASSWORD#${{ secrets.DB_PASSWORD }}#g" src/main/resources/application.properties
37+
38+
# Print the updated file for verification
39+
cat ./src/main/resources/application.properties
40+
41+
- name: Run Maven Tests
42+
id: run
43+
run: |
44+
mvn test "-Dtest=org.couchbase.quickstart.springdata.controllers.*Test"
45+
46+
- name: Report Status
47+
if: always()
48+
uses: ravsamhq/notify-slack-action@v1
49+
with:
50+
status: ${{ job.status }}
51+
notify_when: "failure"
52+
env:
53+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@
2828
</properties>
2929

3030
<dependencies>
31+
<dependency>
32+
<groupId>org.springframework</groupId>
33+
<artifactId>spring-tx</artifactId>
34+
<version>5.3.10</version>
35+
</dependency>
3136
<dependency>
3237
<groupId>org.springframework.boot</groupId>
3338
<artifactId>spring-boot</artifactId>

src/main/java/org/couchbase/quickstart/springboot/models/Airline.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,8 @@
88
import lombok.AllArgsConstructor;
99
import lombok.Builder;
1010
import lombok.Data;
11-
import lombok.Getter;
1211
import lombok.NoArgsConstructor;
13-
import lombok.Setter;
1412

15-
@Getter
16-
@Setter
1713
@AllArgsConstructor
1814
@NoArgsConstructor
1915
@Data

src/main/java/org/couchbase/quickstart/springboot/models/Airport.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,8 @@
77
import lombok.AllArgsConstructor;
88
import lombok.Builder;
99
import lombok.Data;
10-
import lombok.Getter;
1110
import lombok.NoArgsConstructor;
12-
import lombok.Setter;
1311

14-
@Getter
15-
@Setter
1612
@AllArgsConstructor
1713
@NoArgsConstructor
1814
@Data
@@ -48,8 +44,6 @@ public class Airport {
4844
@Valid
4945
private Geo geo;
5046

51-
@Getter
52-
@Setter
5347
@AllArgsConstructor
5448
@NoArgsConstructor
5549
@Data

src/main/java/org/couchbase/quickstart/springboot/models/Route.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@ public class Route {
5151
@NotNull(message = "Distance is mandatory")
5252
private double distance;
5353

54-
@Getter
55-
@Setter
5654
@AllArgsConstructor
5755
@NoArgsConstructor
5856
@Data
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
spring.couchbase.bootstrap-hosts=#######
1+
spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER
22
spring.couchbase.bucket.name=travel-sample
3-
spring.couchbase.bucket.user=kaustav
4-
spring.couchbase.bucket.password=#######
5-
spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER
3+
spring.couchbase.bootstrap-hosts=DB_CONN_STR
4+
spring.couchbase.bucket.user=DB_USERNAME
5+
spring.couchbase.bucket.password=DB_PASSWORD

src/test/java/org/couchbase/quickstart/springboot/controllers/AirlineIntegrationTest.java

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Map;
77

88
import org.couchbase.quickstart.springboot.models.Airline;
9+
import org.couchbase.quickstart.springboot.services.AirlineService;
910
import org.junit.jupiter.api.AfterEach;
1011
import org.junit.jupiter.api.BeforeEach;
1112
import org.junit.jupiter.api.Test;
@@ -14,10 +15,17 @@
1415
import org.springframework.boot.test.context.SpringBootTest;
1516
import org.springframework.boot.test.web.client.TestRestTemplate;
1617
import org.springframework.core.ParameterizedTypeReference;
18+
import org.springframework.dao.DataRetrievalFailureException;
1719
import org.springframework.http.HttpMethod;
1820
import org.springframework.http.HttpStatus;
1921
import org.springframework.http.ResponseEntity;
22+
import org.springframework.web.client.ResourceAccessException;
2023

24+
import com.couchbase.client.core.error.DocumentNotFoundException;
25+
26+
import lombok.extern.slf4j.Slf4j;
27+
28+
@Slf4j
2129
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
2230
class AirlineIntegrationTest {
2331

@@ -27,24 +35,41 @@ class AirlineIntegrationTest {
2735
@Autowired
2836
private TestRestTemplate restTemplate;
2937

38+
@Autowired
39+
private AirlineService airlineService;
40+
41+
private void deleteAirline(String airlineId, String cleanupTiming) {
42+
try {
43+
if (airlineService.getAirlineById(airlineId) != null) {
44+
restTemplate.delete("/api/v1/airline/" + airlineId);
45+
}
46+
} catch (DocumentNotFoundException | DataRetrievalFailureException | ResourceAccessException e) {
47+
log.warn("Document " + airlineId + " not present " + cleanupTiming);
48+
} catch (Exception e) {
49+
log.error("Error deleting test data", e.getMessage());
50+
}
51+
}
52+
53+
private void deleteTestAirlineData(String cleanupTiming) {
54+
deleteAirline("airline_create", cleanupTiming);
55+
deleteAirline("airline_update", cleanupTiming);
56+
deleteAirline("airline_delete", cleanupTiming);
57+
}
58+
3059
@BeforeEach
3160
void setUp() {
32-
restTemplate.delete("http://localhost:" + port + "/api/v1/airline/airline_create");
33-
restTemplate.delete("http://localhost:" + port + "/api/v1/airline/airline_update");
34-
restTemplate.delete("http://localhost:" + port + "/api/v1/airline/airline_delete");
61+
deleteTestAirlineData("prior to test");
3562
}
3663

3764
@AfterEach
3865
void tearDown() {
39-
restTemplate.delete("http://localhost:" + port + "/api/v1/airline/airline_create");
40-
restTemplate.delete("http://localhost:" + port + "/api/v1/airline/airline_update");
41-
restTemplate.delete("http://localhost:" + port + "/api/v1/airline/airline_delete");
66+
deleteTestAirlineData("after test");
4267
}
4368

4469
@Test
4570
void testGetAirline() {
4671
ResponseEntity<Airline> response = restTemplate
47-
.getForEntity("http://localhost:" + port + "/api/v1/airline/airline_10", Airline.class);
72+
.getForEntity("/api/v1/airline/airline_10", Airline.class);
4873
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
4974
Airline airline = response.getBody();
5075
assert airline != null;
@@ -64,7 +89,7 @@ void testCreateAirline() {
6489
.country("United States")
6590
.build();
6691
ResponseEntity<Airline> response = restTemplate.postForEntity(
67-
"http://localhost:" + port + "/api/v1/airline/" + airline.getId(), airline,
92+
"/api/v1/airline/" + airline.getId(), airline,
6893
Airline.class);
6994
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.CREATED);
7095
Airline createdAirline = response.getBody();
@@ -84,11 +109,11 @@ void testUpdateAirline() {
84109
.callsign("TEST")
85110
.country("United States")
86111
.build();
87-
restTemplate.postForEntity("http://localhost:" + port + "/api/v1/airline/" + airline.getId(), airline,
112+
restTemplate.postForEntity("/api/v1/airline/" + airline.getId(), airline,
88113
Airline.class);
89-
restTemplate.put("http://localhost:" + port + "/api/v1/airline/" + airline.getId(), airline);
114+
restTemplate.put("/api/v1/airline/" + airline.getId(), airline);
90115
ResponseEntity<Airline> response = restTemplate
91-
.getForEntity("http://localhost:" + port + "/api/v1/airline/" + airline.getId(),
116+
.getForEntity("/api/v1/airline/" + airline.getId(),
92117
Airline.class);
93118

94119
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
@@ -110,11 +135,11 @@ void testDeleteAirline() {
110135
.callsign("TEST")
111136
.country("United States")
112137
.build();
113-
restTemplate.postForEntity("http://localhost:" + port + "/api/v1/airline/" + airline.getId(), airline,
138+
restTemplate.postForEntity("/api/v1/airline/" + airline.getId(), airline,
114139
Airline.class);
115-
restTemplate.delete("http://localhost:" + port + "/api/v1/airline/" + airlineIdToDelete);
140+
restTemplate.delete("/api/v1/airline/" + airlineIdToDelete);
116141
ResponseEntity<Airline> response = restTemplate
117-
.getForEntity("http://localhost:" + port + "/api/v1/airline/" + airlineIdToDelete,
142+
.getForEntity("/api/v1/airline/" + airlineIdToDelete,
118143
Airline.class);
119144
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
120145
}
@@ -124,7 +149,7 @@ void testListAirlines() {
124149
int limit = 10;
125150
int offset = 0;
126151
ResponseEntity<List<Airline>> response = restTemplate.exchange(
127-
"http://localhost:" + port + "/api/v1/airline/list?limit=" + limit + "&offset="
152+
"/api/v1/airline/list?limit=" + limit + "&offset="
128153
+ offset,
129154
HttpMethod.GET, null, new ParameterizedTypeReference<List<Airline>>() {
130155
});
@@ -151,7 +176,7 @@ void testListAirlinesByCountry() {
151176
int limit = 10;
152177
int offset = 0;
153178
ResponseEntity<List<Airline>> response = restTemplate.exchange(
154-
"http://localhost:" + port + "/api/v1/airline/country/" + country + "?limit=" + limit
179+
"/api/v1/airline/country/" + country + "?limit=" + limit
155180
+ "&offset=" + offset,
156181
HttpMethod.GET, null, new ParameterizedTypeReference<List<Airline>>() {
157182
});
@@ -173,7 +198,7 @@ void testListAirlinesByCountry() {
173198

174199
country = "France";
175200
ResponseEntity<List<Airline>> response2 = restTemplate.exchange(
176-
"http://localhost:" + port + "/api/v1/airline/country/" + country + "?limit=" + limit
201+
"/api/v1/airline/country/" + country + "?limit=" + limit
177202
+ "&offset=" + offset,
178203
HttpMethod.GET, null, new ParameterizedTypeReference<List<Airline>>() {
179204
});
@@ -225,7 +250,7 @@ void testListAirlinesByDestinationAirport() {
225250
List<Airline> expectedAirlines = entry.getValue();
226251

227252
ResponseEntity<List<Airline>> response = restTemplate.exchange(
228-
"http://localhost:" + port + "/api/v1/airline/destination/" + destinationAirport
253+
"/api/v1/airline/destination/" + destinationAirport
229254
+ "?limit=" + limit + "&offset=" + offset,
230255
HttpMethod.GET, null, new ParameterizedTypeReference<List<Airline>>() {
231256
});

0 commit comments

Comments
 (0)