diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 1a3a8c41..6e60ef81 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -35,10 +35,15 @@
spring-boot-starter-test
test
+
+ org.springframework.boot
+ spring-boot-starter-webmvc-test
+ test
+
- org.springframework.security
- spring-security-test
+ org.springframework.boot
+ spring-boot-starter-security-test
test
diff --git a/integration-tests/src/test/java/my/bookshop/it/FeatureTogglesIT.java b/integration-tests/src/test/java/my/bookshop/it/FeatureTogglesIT.java
index e266e334..936c9802 100644
--- a/integration-tests/src/test/java/my/bookshop/it/FeatureTogglesIT.java
+++ b/integration-tests/src/test/java/my/bookshop/it/FeatureTogglesIT.java
@@ -7,8 +7,8 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.servlet.MockMvc;
diff --git a/mtx/sidecar/package.json b/mtx/sidecar/package.json
index 7b51ce3f..57a56a9e 100644
--- a/mtx/sidecar/package.json
+++ b/mtx/sidecar/package.json
@@ -2,7 +2,7 @@
"dependencies": {
"@cap-js/hana": "^2.8.0",
"@sap/cds": "^9.9.1",
- "@sap/cds-mtxs": "^3",
+ "@sap/cds-mtxs": "^3.9.4",
"@sap/xssec": "^4.13.0",
"express": "^4.22.2"
},
diff --git a/package-lock.json b/package-lock.json
index 99270163..e32166ab 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,14 +13,14 @@
"devDependencies": {
"@sap/cds-compiler": "^6.9.3",
"@sap/cds-dk": "9.9.2",
- "@sap/cds-mtxs": "^3"
+ "@sap/cds-mtxs": "^3.9.4"
}
},
"mtx/sidecar": {
"dependencies": {
"@cap-js/hana": "^2.8.0",
"@sap/cds": "^9.9.1",
- "@sap/cds-mtxs": "^3",
+ "@sap/cds-mtxs": "^3.9.4",
"@sap/xssec": "^4.13.0",
"express": "^4.22.2"
},
@@ -2080,10 +2080,10 @@
}
},
"node_modules/@sap/hdi": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/@sap/hdi/-/hdi-4.8.0.tgz",
- "integrity": "sha512-tkJmY2ffm6mt4/LFwRBihlQkMxNAXa3ngvRe2N/6+qLIsUNdrH/M03S5mkygXq56K+KoVVZYuradajCusMWwsw==",
- "license": "See LICENSE file",
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/@sap/hdi/-/hdi-4.8.1.tgz",
+ "integrity": "sha512-LfRtIbtfvMl82a8CwpqPJRRB9hRSVUQyvxualYBEzyNu/phuw6bFGQA5LHVngHsms+y797Icm4tl4X+TEkTtlg==",
+ "license": "SEE LICENSE IN LICENSE",
"dependencies": {
"async": "^3.2.3"
},
@@ -2104,16 +2104,16 @@
}
},
"node_modules/@sap/hdi-deploy": {
- "version": "5.6.1",
- "resolved": "https://registry.npmjs.org/@sap/hdi-deploy/-/hdi-deploy-5.6.1.tgz",
- "integrity": "sha512-+qQ7qwG8lko303L5yRj2dud/nDAVuVblV/mmzJT44oPbF0Nry18eD2LUS23hFeuxjRa7rYK5YKQ8ffGgWxVrYQ==",
- "license": "See LICENSE file",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@sap/hdi-deploy/-/hdi-deploy-5.7.0.tgz",
+ "integrity": "sha512-ENBCtCBnJEKBlvC5mQT/G7OAteOENo7ygSeRJgVdz7AHikcHUxegtavXkJtFCJ/PSjpjytFKfGRmG8peUVAmNQ==",
+ "license": "SEE LICENSE IN LICENSE",
"dependencies": {
- "@sap/hdi": "^4.8.0",
+ "@sap/hdi": "^4.8.1",
"@sap/xsenv": "^6.0.0",
"async": "^3.2.6",
"dotenv": "^16.4.5",
- "handlebars": "^4.7.8",
+ "handlebars": "^4.7.9",
"micromatch": "^4.0.8"
},
"engines": {
@@ -2261,9 +2261,9 @@
"license": "MIT"
},
"node_modules/better-sqlite3": {
- "version": "12.10.0",
- "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.10.0.tgz",
- "integrity": "sha512-CyzaZRQKyHkB2ZInfTTl2nvT33EbDpjkLEbE8/Zck3Ll6O0qqvuGdrJ45HgtH+HykRg88ITY3AdreBGN70aBSQ==",
+ "version": "12.11.1",
+ "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.11.1.tgz",
+ "integrity": "sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -2588,9 +2588,9 @@
}
},
"node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
+ "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
@@ -2681,21 +2681,34 @@
}
},
"node_modules/express/node_modules/body-parser": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz",
- "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz",
+ "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==",
"license": "MIT",
"dependencies": {
"bytes": "^3.1.2",
- "content-type": "^1.0.5",
+ "content-type": "^2.0.0",
"debug": "^4.4.3",
- "http-errors": "^2.0.0",
- "iconv-lite": "^0.7.0",
+ "http-errors": "^2.0.1",
+ "iconv-lite": "^0.7.2",
"on-finished": "^2.4.1",
- "qs": "^6.14.1",
- "raw-body": "^3.0.1",
- "type-is": "^2.0.1"
+ "qs": "^6.15.2",
+ "raw-body": "^3.0.2",
+ "type-is": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18"
},
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/express/node_modules/body-parser/node_modules/content-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz",
+ "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==",
+ "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -3120,9 +3133,9 @@
}
},
"node_modules/hasown": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz",
- "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
+ "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
@@ -3132,9 +3145,9 @@
}
},
"node_modules/hdb": {
- "version": "2.27.1",
- "resolved": "https://registry.npmjs.org/hdb/-/hdb-2.27.1.tgz",
- "integrity": "sha512-xYL/W+fq2TyGHyzm8muolQnw8tdh4+2NQ8mQP2FpLSuhfJ8l0jQNSUZoAXic7NfMEan1Jvf8V1L4blwkgTc6+A==",
+ "version": "2.29.4",
+ "resolved": "https://registry.npmjs.org/hdb/-/hdb-2.29.4.tgz",
+ "integrity": "sha512-9L7/xjx4NU2YWatqLSHXhuEIuvNlV/4eRFg7u/L63U1Dc5LocP4yWeH8UGKTLBCJkt548OQ+A7PqqimZwEuqdw==",
"license": "Apache-2.0",
"dependencies": {
"iconv-lite": "0.7.0"
@@ -3545,12 +3558,13 @@
}
},
"node_modules/qs": {
- "version": "6.15.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz",
- "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==",
+ "version": "6.15.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz",
+ "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==",
"license": "BSD-3-Clause",
"dependencies": {
- "side-channel": "^1.1.0"
+ "es-define-property": "^1.0.1",
+ "side-channel": "^1.1.1"
},
"engines": {
"node": ">=0.6"
@@ -3690,9 +3704,9 @@
"license": "MIT"
},
"node_modules/semver": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz",
- "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==",
+ "version": "7.8.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -3754,14 +3768,14 @@
"license": "ISC"
},
"node_modules/side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
+ "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
+ "object-inspect": "^1.13.4",
+ "side-channel-list": "^1.0.1",
"side-channel-map": "^1.0.1",
"side-channel-weakmap": "^1.0.2"
},
diff --git a/package.json b/package.json
index 966fb95c..405becb6 100644
--- a/package.json
+++ b/package.json
@@ -3,9 +3,9 @@
"version": "1.0.0",
"description": "Generated by cds-services-archetype",
"devDependencies": {
+ "@sap/cds-compiler": "^6.9.3",
"@sap/cds-dk": "9.9.2",
- "@sap/cds-mtxs": "^3",
- "@sap/cds-compiler": "^6.9.3"
+ "@sap/cds-mtxs": "^3.9.4"
},
"workspaces": [
"mtx/sidecar"
diff --git a/pom.xml b/pom.xml
index 58671c61..32851791 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.boot
spring-boot-starter-parent
- 3.5.15
+ 4.1.0
@@ -28,9 +28,9 @@
25
- 4.9.0
+ 5.0.0
5.31.0
- 3.7.3
+ 4.0.7
4.2.0
1.5.0
@@ -156,7 +156,7 @@
- 3.6.3
+ 3.9.14
${jdk.version}
diff --git a/srv/pom.xml b/srv/pom.xml
index eca15c24..b05e2411 100644
--- a/srv/pom.xml
+++ b/srv/pom.xml
@@ -110,6 +110,11 @@
spring-boot-starter-security
+
+ org.springframework.boot
+ spring-boot-starter-security-oauth2-resource-server
+
+
org.springframework.boot
spring-boot-starter-actuator
@@ -122,14 +127,26 @@
- org.springframework.security
- spring-security-test
+ org.springframework.boot
+ spring-boot-starter-security-test
+ test
+
+
+
+ org.springframework.boot
+ spring-boot-starter-webclient
+ test
+
+
+
+ org.springframework.boot
+ spring-boot-webtestclient
test
org.springframework.boot
- spring-boot-starter-webflux
+ spring-boot-starter-webmvc-test
test
diff --git a/srv/src/main/java/my/bookshop/health/CustomHealthIndicator.java b/srv/src/main/java/my/bookshop/health/CustomHealthIndicator.java
index 4ecd1295..c8abcec6 100644
--- a/srv/src/main/java/my/bookshop/health/CustomHealthIndicator.java
+++ b/srv/src/main/java/my/bookshop/health/CustomHealthIndicator.java
@@ -1,8 +1,8 @@
package my.bookshop.health;
-import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator;
-import org.springframework.boot.actuate.health.Health;
-import org.springframework.boot.actuate.health.HealthIndicator;
+import org.springframework.boot.health.autoconfigure.contributor.ConditionalOnEnabledHealthIndicator;
+import org.springframework.boot.health.contributor.Health;
+import org.springframework.boot.health.contributor.HealthIndicator;
import org.springframework.stereotype.Component;
/** Custom health indicator implementation. */
diff --git a/srv/src/test/java/my/bookshop/AdminServiceAddress_default_ITest.java b/srv/src/test/java/my/bookshop/AdminServiceAddress_default_ITest.java
index 63eef15f..90f4a4b9 100644
--- a/srv/src/test/java/my/bookshop/AdminServiceAddress_default_ITest.java
+++ b/srv/src/test/java/my/bookshop/AdminServiceAddress_default_ITest.java
@@ -3,6 +3,7 @@
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.boot.webtestclient.autoconfigure.AutoConfigureWebTestClient;
import org.springframework.test.context.ActiveProfiles;
/**
@@ -12,6 +13,7 @@
*/
@ActiveProfiles("default")
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
+@AutoConfigureWebTestClient
class AdminServiceAddress_default_ITest extends AdminServiceAddressITestBase {
@Test
diff --git a/srv/src/test/java/my/bookshop/AdminServiceAddress_mocked_ITest.java b/srv/src/test/java/my/bookshop/AdminServiceAddress_mocked_ITest.java
index bd43bb1b..c2f63def 100644
--- a/srv/src/test/java/my/bookshop/AdminServiceAddress_mocked_ITest.java
+++ b/srv/src/test/java/my/bookshop/AdminServiceAddress_mocked_ITest.java
@@ -3,6 +3,7 @@
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.boot.webtestclient.autoconfigure.AutoConfigureWebTestClient;
import org.springframework.test.context.ActiveProfiles;
/**
@@ -16,6 +17,7 @@
webEnvironment = WebEnvironment.RANDOM_PORT,
properties =
"cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name=myself-AdminServiceAddressITest")
+@AutoConfigureWebTestClient
class AdminServiceAddress_mocked_ITest extends AdminServiceAddressITestBase {
@Test
diff --git a/srv/src/test/java/my/bookshop/CatalogServiceITest.java b/srv/src/test/java/my/bookshop/CatalogServiceITest.java
index ee71ea3e..0902d7ee 100644
--- a/srv/src/test/java/my/bookshop/CatalogServiceITest.java
+++ b/srv/src/test/java/my/bookshop/CatalogServiceITest.java
@@ -1,12 +1,7 @@
package my.bookshop;
import static cds.gen.catalogservice.CatalogService_.REVIEWS;
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.not;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+import static org.assertj.core.api.Assertions.assertThat;
import cds.gen.catalogservice.Reviews;
import com.sap.cds.ql.Delete;
@@ -14,14 +9,14 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureRestTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.security.test.context.support.WithMockUser;
-import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.client.RestTestClient;
@SpringBootTest
-@AutoConfigureMockMvc
+@AutoConfigureRestTestClient
class CatalogServiceITest {
private static final String booksURI = "/api/browse/Books";
@@ -32,7 +27,7 @@ class CatalogServiceITest {
private static final String USER_USER_STRING = "user";
private static final String ADMIN_USER_STRING = "admin";
- @Autowired private MockMvc mockMvc;
+ @Autowired private RestTestClient client;
@Autowired private PersistenceService db;
@@ -42,47 +37,76 @@ void cleanup() {
}
@Test
- void discountApplied() throws Exception {
- mockMvc
- .perform(get(booksURI + "?$filter=stock gt 200&top=1"))
- .andExpect(status().isOk())
- .andExpect(jsonPath("$.value[0].title").value(containsString("11% discount")));
+ void discountApplied() {
+ client
+ .get()
+ .uri(booksURI + "?$filter=stock gt 200&top=1")
+ .exchange()
+ .expectStatus()
+ .isOk()
+ .expectBody()
+ .jsonPath("$.value[0].title")
+ .value(String.class, title -> assertThat(title).contains("11% discount"));
}
@Test
- void discountNotApplied() throws Exception {
- mockMvc
- .perform(get(booksURI + "?$filter=stock lt 100&top=1"))
- .andExpect(status().isOk())
- .andExpect(jsonPath("$.value[0].title").value(not(containsString("11% discount"))));
+ void discountNotApplied() {
+ client
+ .get()
+ .uri(booksURI + "?$filter=stock lt 100&top=1")
+ .exchange()
+ .expectStatus()
+ .isOk()
+ .expectBody()
+ .jsonPath("$.value[0].title")
+ .value(String.class, title -> assertThat(title).doesNotContain("11% discount"));
}
@Test
- void createReviewNotAuthenticated() throws Exception {
+ void createReviewNotAuthenticated() {
String payload = createTestReview().toJson();
- mockMvc
- .perform(post(addReviewURI).contentType(MediaType.APPLICATION_JSON).content(payload))
- .andExpect(status().isUnauthorized());
+ client
+ .post()
+ .uri(addReviewURI)
+ .contentType(MediaType.APPLICATION_JSON)
+ .body(payload)
+ .exchange()
+ .expectStatus()
+ .isUnauthorized();
}
@Test
@WithMockUser(USER_USER_STRING)
- void createReviewByUser() throws Exception {
+ void createReviewByUser() {
String payload = createTestReview().toJson();
- mockMvc
- .perform(post(addReviewURI).contentType(MediaType.APPLICATION_JSON).content(payload))
- .andExpect(status().isOk())
- .andExpect(jsonPath("$.createdBy").value(USER_USER_STRING));
+ client
+ .post()
+ .uri(addReviewURI)
+ .contentType(MediaType.APPLICATION_JSON)
+ .body(payload)
+ .exchange()
+ .expectStatus()
+ .isOk()
+ .expectBody()
+ .jsonPath("$.createdBy")
+ .isEqualTo(USER_USER_STRING);
}
@Test
@WithMockUser(ADMIN_USER_STRING)
- void createReviewByAdmin() throws Exception {
+ void createReviewByAdmin() {
String payload = createTestReview().toJson();
- mockMvc
- .perform(post(addReviewURI).contentType(MediaType.APPLICATION_JSON).content(payload))
- .andExpect(status().isOk())
- .andExpect(jsonPath("$.createdBy").value(ADMIN_USER_STRING));
+ client
+ .post()
+ .uri(addReviewURI)
+ .contentType(MediaType.APPLICATION_JSON)
+ .body(payload)
+ .exchange()
+ .expectStatus()
+ .isOk()
+ .expectBody()
+ .jsonPath("$.createdBy")
+ .isEqualTo(ADMIN_USER_STRING);
}
private Reviews createTestReview() {
diff --git a/srv/src/test/java/my/bookshop/GenreHierarchyTest.java b/srv/src/test/java/my/bookshop/GenreHierarchyTest.java
index d01f82ea..cb855973 100644
--- a/srv/src/test/java/my/bookshop/GenreHierarchyTest.java
+++ b/srv/src/test/java/my/bookshop/GenreHierarchyTest.java
@@ -7,8 +7,8 @@
import java.net.URI;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.web.util.UriComponentsBuilder;
diff --git a/srv/src/test/java/my/bookshop/NotesServiceITest.java b/srv/src/test/java/my/bookshop/NotesServiceITest.java
index cc6c68b2..b4179bf9 100644
--- a/srv/src/test/java/my/bookshop/NotesServiceITest.java
+++ b/srv/src/test/java/my/bookshop/NotesServiceITest.java
@@ -4,6 +4,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.boot.webtestclient.autoconfigure.AutoConfigureWebTestClient;
import org.springframework.http.HttpHeaders;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.reactive.server.WebTestClient;
@@ -12,6 +13,7 @@
webEnvironment = WebEnvironment.RANDOM_PORT,
properties =
"cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name=myself-NotesServiceITest")
+@AutoConfigureWebTestClient
@ActiveProfiles({"default", "mocked"})
class NotesServiceITest {