From ca94d02abc4808634632675c442b7c4328d4041f Mon Sep 17 00:00:00 2001 From: Joe Grandja Date: Tue, 13 Oct 2020 05:17:39 -0400 Subject: [PATCH] Settings.setting() supports generic return type Issue gh-117 --- .../server/authorization/config/Settings.java | 12 ++++++++---- .../authorization/config/ClientSettingsTests.java | 14 ++++++++++++++ .../authorization/config/TokenSettingsTests.java | 13 +++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/config/Settings.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/config/Settings.java index 07ba5c3..0178c2b 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/config/Settings.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/config/Settings.java @@ -68,13 +68,15 @@ public class Settings implements Serializable { * * @param name the name of the setting * @param value the value of the setting + * @param the type of the {@link Settings} * @return the {@link Settings} */ - public Settings setting(String name, Object value) { + @SuppressWarnings("unchecked") + public T setting(String name, Object value) { Assert.hasText(name, "name cannot be empty"); Assert.notNull(value, "value cannot be null"); this.settings.put(name, value); - return this; + return (T) this; } /** @@ -91,10 +93,12 @@ public class Settings implements Serializable { * allowing the ability to add, replace, or remove. * * @param settingsConsumer a {@link Consumer} of the configuration settings {@code Map} + * @param the type of the {@link Settings} * @return the {@link Settings} */ - public Settings settings(Consumer> settingsConsumer) { + @SuppressWarnings("unchecked") + public T settings(Consumer> settingsConsumer) { settingsConsumer.accept(this.settings); - return this; + return (T) this; } } diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/ClientSettingsTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/ClientSettingsTests.java index f4f1474..48e8b1e 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/ClientSettingsTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/ClientSettingsTests.java @@ -53,4 +53,18 @@ public class ClientSettingsTests { ClientSettings clientSettings = new ClientSettings().requireUserConsent(true); assertThat(clientSettings.requireUserConsent()).isTrue(); } + + @Test + public void settingWhenCalledThenReturnClientSettings() { + ClientSettings clientSettings = new ClientSettings() + .setting("name1", "value1") + .requireProofKey(true) + .settings(settings -> settings.put("name2", "value2")) + .requireUserConsent(true); + assertThat(clientSettings.settings()).hasSize(4); + assertThat(clientSettings.requireProofKey()).isTrue(); + assertThat(clientSettings.requireUserConsent()).isTrue(); + assertThat(clientSettings.setting("name1")).isEqualTo("value1"); + assertThat(clientSettings.setting("name2")).isEqualTo("value2"); + } } diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/TokenSettingsTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/TokenSettingsTests.java index 2a4e405..cce5a3b 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/TokenSettingsTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/TokenSettingsTests.java @@ -49,4 +49,17 @@ public class TokenSettingsTests { TokenSettings tokenSettings = new TokenSettings().accessTokenTimeToLive(accessTokenTimeToLive); assertThat(tokenSettings.accessTokenTimeToLive()).isEqualTo(accessTokenTimeToLive); } + + @Test + public void settingWhenCalledThenReturnTokenSettings() { + Duration accessTokenTimeToLive = Duration.ofMinutes(10); + TokenSettings tokenSettings = new TokenSettings() + .setting("name1", "value1") + .accessTokenTimeToLive(accessTokenTimeToLive) + .settings(settings -> settings.put("name2", "value2")); + assertThat(tokenSettings.settings()).hasSize(3); + assertThat(tokenSettings.accessTokenTimeToLive()).isEqualTo(accessTokenTimeToLive); + assertThat(tokenSettings.setting("name1")).isEqualTo("value1"); + assertThat(tokenSettings.setting("name2")).isEqualTo("value2"); + } }