From 9c1ed981a65f47a4b8e440e519c65b58d8f8bc11 Mon Sep 17 00:00:00 2001 From: "Greg L. Turnquist" Date: Wed, 19 May 2021 12:03:18 -0500 Subject: [PATCH] Upgrade to Spring Boot 2.4.5 and latest Spring Session. --- pom.xml | 64 ++----------------- .../pom.xml | 7 +- .../examples/SessionAttributeForm.java | 42 +++++++++++- .../mongodb/examples/SessionController.java | 2 +- .../mongodb/examples/AttributeTests.java | 32 ++++------ .../mongodb/examples/pages/HomePage.java | 19 ++++-- .../pom.xml | 10 ++- .../session/mongodb/examples/BootTests.java | 41 ++++++------ .../mongodb/examples/pages/BasePage.java | 1 + .../mongodb/examples/pages/HomePage.java | 11 ++-- .../mongodb/examples/pages/LoginPage.java | 19 +++--- 11 files changed, 125 insertions(+), 123 deletions(-) diff --git a/pom.xml b/pom.xml index dbf859d..c09cd4a 100644 --- a/pom.xml +++ b/pom.xml @@ -15,8 +15,8 @@ gturnquist Greg Turnquist - gturnquist@pivotal.io - Pivotal Software, Inc. + gturnquist@vmware.com + VMware Project Lead @@ -31,7 +31,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.0.RC1 + 2.4.5 @@ -39,25 +39,11 @@ UTF-8 UTF-8 1.8 - 2.0.2.RELEASE - 2.0.2.RELEASE - Kay-SR4 + 2.5.0 + 2.5.0 + 2021.0.0 - - - spring5-next - - 2.9.0 - 5.0.5.BUILD-SNAPSHOT - 2.0.3.BUILD-SNAPSHOT - 2.0.3.BUILD-SNAPSHOT - Lovelace-BUILD-SNAPSHOT - 5.0.3.BUILD-SNAPSHOT - - - - @@ -67,43 +53,5 @@ - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - - diff --git a/spring-session-data-mongodb-reactive-boot/pom.xml b/spring-session-data-mongodb-reactive-boot/pom.xml index f956c8b..0e6b2bd 100644 --- a/spring-session-data-mongodb-reactive-boot/pom.xml +++ b/spring-session-data-mongodb-reactive-boot/pom.xml @@ -12,7 +12,6 @@ org.springframework.session.data.mongodb spring-session-data-mongodb-reactive-boot - jar Spring Session MongoDB - Examples - Reactive Spring Boot @@ -34,11 +33,7 @@ de.flapdoodle.embed de.flapdoodle.embed.mongo - - org.projectlombok - lombok - - + org.springframework.boot spring-boot-starter-test diff --git a/spring-session-data-mongodb-reactive-boot/src/main/java/org/springframework/session/mongodb/examples/SessionAttributeForm.java b/spring-session-data-mongodb-reactive-boot/src/main/java/org/springframework/session/mongodb/examples/SessionAttributeForm.java index b86c37c..ccd16c1 100644 --- a/spring-session-data-mongodb-reactive-boot/src/main/java/org/springframework/session/mongodb/examples/SessionAttributeForm.java +++ b/spring-session-data-mongodb-reactive-boot/src/main/java/org/springframework/session/mongodb/examples/SessionAttributeForm.java @@ -16,16 +16,54 @@ package org.springframework.session.mongodb.examples; -import lombok.Data; +import java.util.Objects; /** * @author Rob Winch * @author Greg Turnquist * @since 5.0 */ -@Data public class SessionAttributeForm { private String attributeName; private String attributeValue; + + public String getAttributeName() { + return attributeName; + } + + public void setAttributeName(String attributeName) { + this.attributeName = attributeName; + } + + public String getAttributeValue() { + return attributeValue; + } + + public void setAttributeValue(String attributeValue) { + this.attributeValue = attributeValue; + } + + @Override + public boolean equals(Object o) { + + if (this == o) + return true; + if (!(o instanceof SessionAttributeForm)) + return false; + SessionAttributeForm that = (SessionAttributeForm) o; + return Objects.equals(attributeName, that.attributeName) && Objects.equals(attributeValue, that.attributeValue); + } + + @Override + public int hashCode() { + return Objects.hash(attributeName, attributeValue); + } + + @Override + public String toString() { + + return "SessionAttributeForm{" + "attributeName='" + attributeName + '\'' + ", attributeValue='" + attributeValue + + '\'' + '}'; + } } diff --git a/spring-session-data-mongodb-reactive-boot/src/main/java/org/springframework/session/mongodb/examples/SessionController.java b/spring-session-data-mongodb-reactive-boot/src/main/java/org/springframework/session/mongodb/examples/SessionController.java index 4a714f9..124797a 100644 --- a/spring-session-data-mongodb-reactive-boot/src/main/java/org/springframework/session/mongodb/examples/SessionController.java +++ b/spring-session-data-mongodb-reactive-boot/src/main/java/org/springframework/session/mongodb/examples/SessionController.java @@ -40,7 +40,7 @@ public class SessionController { @GetMapping("/") public String index(Model model, WebSession webSession) { - + model.addAttribute("webSession", webSession); return "index"; } diff --git a/spring-session-data-mongodb-reactive-boot/src/test/java/org/springframework/session/mongodb/examples/AttributeTests.java b/spring-session-data-mongodb-reactive-boot/src/test/java/org/springframework/session/mongodb/examples/AttributeTests.java index 4d99a2b..8471996 100644 --- a/spring-session-data-mongodb-reactive-boot/src/test/java/org/springframework/session/mongodb/examples/AttributeTests.java +++ b/spring-session-data-mongodb-reactive-boot/src/test/java/org/springframework/session/mongodb/examples/AttributeTests.java @@ -16,73 +16,69 @@ package org.springframework.session.mongodb.examples; - import static org.assertj.core.api.Assertions.*; import java.util.List; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.openqa.selenium.WebDriver; import org.openqa.selenium.htmlunit.HtmlUnitDriver; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.web.server.LocalServerPort; import org.springframework.session.mongodb.examples.pages.HomePage; import org.springframework.session.mongodb.examples.pages.HomePage.Attribute; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; /** * @author EddĂș MelĂ©ndez * @author Rob Winch */ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class AttributeTests { - @LocalServerPort - int port; + @LocalServerPort int port; private WebDriver driver; - @Before + @BeforeEach public void setup() { this.driver = new HtmlUnitDriver(); } - @After + @AfterEach public void tearDown() { this.driver.quit(); } @Test public void home() { + HomePage home = HomePage.go(this.driver, this.port); home.assertAt(); } @Test public void noAttributes() { + HomePage home = HomePage.go(this.driver, this.port); assertThat(home.attributes()).isEmpty(); } @Test public void createAttribute() { + HomePage home = HomePage.go(this.driver, this.port); - // @formatter:off - home = home.form() - .attributeName("a") - .attributeValue("b") - .submit(HomePage.class); - // @formatter:on + home = home.form().attributeName("a").attributeValue("b").submit(HomePage.class); List attributes = home.attributes(); assertThat(attributes).hasSize(1); + Attribute row = attributes.get(0); assertThat(row.getAttributeName()).isEqualTo("a"); assertThat(row.getAttributeValue()).isEqualTo("b"); } - } diff --git a/spring-session-data-mongodb-reactive-boot/src/test/java/org/springframework/session/mongodb/examples/pages/HomePage.java b/spring-session-data-mongodb-reactive-boot/src/test/java/org/springframework/session/mongodb/examples/pages/HomePage.java index 4a5a6de..5aef09f 100644 --- a/spring-session-data-mongodb-reactive-boot/src/test/java/org/springframework/session/mongodb/examples/pages/HomePage.java +++ b/spring-session-data-mongodb-reactive-boot/src/test/java/org/springframework/session/mongodb/examples/pages/HomePage.java @@ -20,6 +20,7 @@ import static org.assertj.core.api.Assertions.*; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import org.openqa.selenium.SearchContext; import org.openqa.selenium.WebDriver; @@ -45,16 +46,19 @@ public class HomePage { List attributes; public HomePage(WebDriver driver) { + this.driver = driver; this.attributes = new ArrayList<>(); } private static void get(WebDriver driver, int port, String get) { + String baseUrl = "http://localhost:" + port; driver.get(baseUrl + get); } public static HomePage go(WebDriver driver, int port) { + get(driver, port, "/"); return PageFactory.initElements(driver, HomePage.class); } @@ -64,11 +68,13 @@ public class HomePage { } public List attributes() { - List rows = new ArrayList<>(); - for (WebElement tr : this.trs) { - rows.add(new Attribute(tr)); - } + + List rows = this.trs.stream() // + .map(Attribute::new) // + .collect(Collectors.toList()); + this.attributes.addAll(rows); + return this.attributes; } @@ -77,6 +83,7 @@ public class HomePage { } public class Form { + @FindBy(name = "attributeName") WebElement attributeName; @@ -91,22 +98,26 @@ public class HomePage { } public Form attributeName(String text) { + this.attributeName.sendKeys(text); return this; } public Form attributeValue(String text) { + this.attributeValue.sendKeys(text); return this; } public T submit(Class page) { + this.submit.click(); return PageFactory.initElements(HomePage.this.driver, page); } } public static class Attribute { + @FindBy(xpath = ".//td[1]") WebElement attributeName; diff --git a/spring-session-data-mongodb-traditional-boot/pom.xml b/spring-session-data-mongodb-traditional-boot/pom.xml index 6c9d7bf..dee5cb1 100644 --- a/spring-session-data-mongodb-traditional-boot/pom.xml +++ b/spring-session-data-mongodb-traditional-boot/pom.xml @@ -12,7 +12,6 @@ org.springframework.session.data.mongodb spring-session-data-mongodb-traditional-boot - jar Spring Session MongoDB - Examples - Traditional Spring Boot @@ -40,6 +39,10 @@ nz.net.ultraq.thymeleaf thymeleaf-layout-dialect + + org.thymeleaf.extras + thymeleaf-extras-springsecurity5 + de.flapdoodle.embed de.flapdoodle.embed.mongo @@ -60,6 +63,11 @@ selenium-support test + + org.springframework.security + spring-security-test + test + diff --git a/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/BootTests.java b/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/BootTests.java index d69dfef..7d1985d 100644 --- a/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/BootTests.java +++ b/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/BootTests.java @@ -16,56 +16,53 @@ package org.springframework.session.mongodb.examples; +import static org.assertj.core.api.Assertions.*; + import java.util.Set; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.openqa.selenium.By; import org.openqa.selenium.Cookie; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; -import org.springframework.session.mongodb.examples.pages.HomePage; -import org.springframework.session.mongodb.examples.pages.LoginPage; - 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.test.context.SpringBootTest.WebEnvironment; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.session.mongodb.examples.pages.HomePage; +import org.springframework.session.mongodb.examples.pages.LoginPage; +import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder; -import static org.assertj.core.api.Assertions.assertThat; - /** * @author Pool Dolorier */ -@RunWith(SpringRunner.class) +@ExtendWith(SpringExtension.class) @AutoConfigureMockMvc @SpringBootTest(webEnvironment = WebEnvironment.MOCK) public class BootTests { - @Autowired - private MockMvc mockMvc; + @Autowired private MockMvc mockMvc; private WebDriver driver; - @Before + @BeforeEach public void setUp() { - this.driver = MockMvcHtmlUnitDriverBuilder - .mockMvcSetup(this.mockMvc) - .build(); + this.driver = MockMvcHtmlUnitDriverBuilder.mockMvcSetup(this.mockMvc).build(); } - @After + @AfterEach public void tearDown() { this.driver.quit(); } @Test public void unauthenticatedUserSentToLogInPage() { + HomePage homePage = HomePage.go(this.driver); LoginPage loginPage = homePage.unauthenticated(); loginPage.assertAt(); @@ -73,10 +70,13 @@ public class BootTests { @Test public void logInViewsHomePage() { + LoginPage loginPage = LoginPage.go(this.driver); loginPage.assertAt(); + HomePage homePage = loginPage.login("user", "password"); homePage.assertAt(); + WebElement username = homePage.getDriver().findElement(By.id("un")); assertThat(username.getText()).isEqualTo("user"); Set cookies = homePage.getDriver().manage().getCookies(); @@ -86,19 +86,24 @@ public class BootTests { @Test public void logoutSuccess() { + LoginPage loginPage = LoginPage.go(this.driver); HomePage homePage = loginPage.login("user", "password"); LoginPage successLogoutPage = homePage.logout(); + successLogoutPage.assertAt(); } @Test public void loggedOutUserSentToLoginPage() { + LoginPage loginPage = LoginPage.go(this.driver); HomePage homePage = loginPage.login("user", "password"); homePage.logout(); + HomePage backHomePage = HomePage.go(this.driver); LoginPage backLoginPage = backHomePage.unauthenticated(); + backLoginPage.assertAt(); } } diff --git a/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/pages/BasePage.java b/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/pages/BasePage.java index 4ca3f6c..8578b51 100644 --- a/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/pages/BasePage.java +++ b/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/pages/BasePage.java @@ -34,6 +34,7 @@ public abstract class BasePage { } public static void get(WebDriver driver, String get) { + String baseUrl = "http://localhost"; driver.get(baseUrl + get); } diff --git a/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/pages/HomePage.java b/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/pages/HomePage.java index 0bfd773..e8b4424 100644 --- a/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/pages/HomePage.java +++ b/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/pages/HomePage.java @@ -16,35 +16,36 @@ package org.springframework.session.mongodb.examples.pages; +import static org.assertj.core.api.Assertions.*; + import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; -import static org.assertj.core.api.Assertions.assertThat; - /** * @author Pool Dolorier */ public class HomePage extends BasePage { - @FindBy(css = "input[type='submit']") - private WebElement submit; + @FindBy(css = "input[type='submit']") private WebElement submit; public HomePage(WebDriver driver) { super(driver); } public static HomePage go(WebDriver driver) { + get(driver, "/"); return PageFactory.initElements(driver, HomePage.class); } public LoginPage unauthenticated() { - return LoginPage.go(getDriver()); + return LoginPage.go(getDriver()); } public LoginPage logout() { + this.submit.click(); return LoginPage.go(getDriver()); } diff --git a/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/pages/LoginPage.java b/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/pages/LoginPage.java index ede84ac..73cace6 100644 --- a/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/pages/LoginPage.java +++ b/spring-session-data-mongodb-traditional-boot/src/test/java/org/springframework/session/mongodb/examples/pages/LoginPage.java @@ -16,44 +16,43 @@ package org.springframework.session.mongodb.examples.pages; +import static org.assertj.core.api.Assertions.*; + import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; -import static org.assertj.core.api.Assertions.assertThat; - /** * @author Pool Dolorier */ public class LoginPage extends BasePage { - @FindBy(name = "username") - private WebElement username; + @FindBy(name = "username") private WebElement username; - @FindBy(name = "password") - private WebElement password; + @FindBy(name = "password") private WebElement password; - @FindBy(css = "input[name='submit']") - private WebElement submit; + @FindBy(css = "button[type='submit']") private WebElement submit; public LoginPage(WebDriver driver) { super(driver); } public static LoginPage go(WebDriver driver) { + get(driver, "/login"); return PageFactory.initElements(driver, LoginPage.class); } public void assertAt() { - assertThat(getDriver().getTitle()).isEqualTo("Login Page"); + assertThat(getDriver().getTitle()).isEqualTo("Please sign in"); } public HomePage login(String user, String password) { + this.username.sendKeys(user); this.password.sendKeys(password); this.submit.click(); - return HomePage.go(getDriver()); + return HomePage.go(getDriver()); } }