diff --git a/src/main/java/de/deadlocker8/budgetmaster/authentication/LoginController.java b/src/main/java/de/deadlocker8/budgetmaster/authentication/LoginController.java index a6b133113bfe8125e76d67b45138ddd73d7f07eb..b1e314f2e72b2b2ec5d7872fe04ce37a8a7aa2e7 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/authentication/LoginController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/authentication/LoginController.java @@ -1,8 +1,8 @@ package de.deadlocker8.budgetmaster.authentication; import de.deadlocker8.budgetmaster.controller.BaseController; +import de.deadlocker8.budgetmaster.utils.DateHelper; import de.deadlocker8.budgetmaster.utils.Mappings; -import org.joda.time.DateTime; import org.springframework.security.web.savedrequest.DefaultSavedRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -37,7 +37,7 @@ public class LoginController extends BaseController request.getSession().setAttribute("preLoginURL", savedRequest.getRequestURL()); } - model.addAttribute("currentDate", DateTime.now()); + model.addAttribute("currentDate", DateHelper.getCurrentDate()); return "login"; } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/DateHelper.java b/src/main/java/de/deadlocker8/budgetmaster/utils/DateHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..0392eb885aaa7578de838d5569ddc3d4a2db99c9 --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/utils/DateHelper.java @@ -0,0 +1,14 @@ +package de.deadlocker8.budgetmaster.utils; + +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; + +import java.util.TimeZone; + +public class DateHelper +{ + public static DateTime getCurrentDate() + { + return DateTime.now(DateTimeZone.forTimeZone(TimeZone.getDefault())); + } +} diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/LoginControllerTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/LoginControllerTest.java index 6c592c174765df62ffd66e64c7f099967bc7c69a..a0fe1141a55f73b0146e58a3033d57f70e16dd1d 100644 --- a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/LoginControllerTest.java +++ b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/LoginControllerTest.java @@ -4,6 +4,8 @@ import de.deadlocker8.budgetmaster.authentication.UserService; import de.deadlocker8.budgetmaster.integration.helpers.IntegrationTestHelper; import de.deadlocker8.budgetmaster.integration.helpers.SeleniumTestBase; import de.thecodelabs.utils.util.Localization; +import org.joda.time.DateTime; +import org.joda.time.DateTimeUtils; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.Cookie; @@ -15,6 +17,7 @@ import org.openqa.selenium.support.ui.WebDriverWait; import java.text.SimpleDateFormat; import java.time.Duration; import java.util.Date; +import java.util.TimeZone; import static org.assertj.core.api.Assertions.assertThat; @@ -78,6 +81,29 @@ class LoginControllerTest extends SeleniumTestBase assertThat(driver.manage().getCookies()).contains(expectedCookie); } + @Test + void successLogin_cookieShortlyAfterMidnightInSystemTimezone() + { + // override system time to setup midnight scenario + // DateTime.now() will return the time in UTC --> shortly before midnight + DateTimeUtils.setCurrentMillisFixed(new DateTime(2021, 10, 24, 23, 10, 0).getMillis()); + + // system time zone is Berlin --> at least +1 hour --> after midnight + TimeZone.setDefault(TimeZone.getTimeZone("Europe/Berlin")); + + IntegrationTestHelper helper = new IntegrationTestHelper(driver, port); + helper.start(); + helper.login(UserService.DEFAULT_PASSWORD); + helper.hideBackupReminder(); + helper.hideWhatsNewDialog(); + + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5)); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("logo-home"))); + + Cookie expectedCookie = new Cookie("currentDate", "25.10.21", "localhost", "/", null, false, false, "None"); + assertThat(driver.manage().getCookies()).contains(expectedCookie); + } + @Test void logout() {