From 66c9aba4960679339c942cf56bbd79c13e20a0dd Mon Sep 17 00:00:00 2001 From: Koos Gadellaa Date: Wed, 17 Feb 2021 09:46:04 +0100 Subject: [PATCH 1/2] Support for cookies with only an expires attribute (and not a max-age) --- .../mock/web/MockHttpServletResponse.java | 6 +++++- .../mock/web/MockHttpServletResponseTests.java | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java index f043c090030c..98fc94874971 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java @@ -374,10 +374,10 @@ private String getCookieHeader(Cookie cookie) { buf.append("; Domain=").append(cookie.getDomain()); } int maxAge = cookie.getMaxAge(); + ZonedDateTime expires = (cookie instanceof MockCookie ? ((MockCookie) cookie).getExpires() : null); if (maxAge >= 0) { buf.append("; Max-Age=").append(maxAge); buf.append("; Expires="); - ZonedDateTime expires = (cookie instanceof MockCookie ? ((MockCookie) cookie).getExpires() : null); if (expires != null) { buf.append(expires.format(DateTimeFormatter.RFC_1123_DATE_TIME)); } @@ -386,8 +386,12 @@ private String getCookieHeader(Cookie cookie) { headers.setExpires(maxAge > 0 ? System.currentTimeMillis() + 1000L * maxAge : 0); buf.append(headers.getFirst(HttpHeaders.EXPIRES)); } + } else if (expires != null) { + buf.append("; Expires="); + buf.append(expires.format(DateTimeFormatter.RFC_1123_DATE_TIME)); } + if (cookie.getSecure()) { buf.append("; Secure"); } diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java index 0cf57f378690..98141ec0befa 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java @@ -417,6 +417,17 @@ void addCookieHeaderWithZeroExpiresAttribute() { assertThat(header).startsWith("SESSION=123; Path=/; Max-Age=100; Expires="); } + /** + * @since 5.1.12 + */ + @Test + void addCookieHeaderWithOnlyExpiresAttribute() { + String cookieValue = "SESSION=123; Path=/; Expires=Tue, 8 Oct 2019 19:50:00 GMT"; + response.addHeader(SET_COOKIE, cookieValue); + assertNumCookies(1); + assertThat(response.getHeader(SET_COOKIE)).isEqualTo(cookieValue); + } + @Test void addCookie() { MockCookie mockCookie = new MockCookie("SESSION", "123"); From e1aa10e49288350d4958fc90d81d2dbe49e53923 Mon Sep 17 00:00:00 2001 From: Koos Gadellaa Date: Wed, 17 Feb 2021 13:03:12 +0100 Subject: [PATCH 2/2] Fix formatting to align with styleguide --- .../org/springframework/mock/web/MockHttpServletResponse.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java index 98fc94874971..d01f593eea0e 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java @@ -386,7 +386,8 @@ private String getCookieHeader(Cookie cookie) { headers.setExpires(maxAge > 0 ? System.currentTimeMillis() + 1000L * maxAge : 0); buf.append(headers.getFirst(HttpHeaders.EXPIRES)); } - } else if (expires != null) { + } + else if (expires != null) { buf.append("; Expires="); buf.append(expires.format(DateTimeFormatter.RFC_1123_DATE_TIME)); }