From 5363e8880d736bda724dfc0b952e54406799df6e Mon Sep 17 00:00:00 2001 From: Prachi Pandey Date: Tue, 21 Jul 2026 15:00:43 +0530 Subject: [PATCH] test: add missing unit test coverage for maxConsecutiveCharacters (OKTA-1228272) The maxConsecutiveCharacters field was added to PasswordPolicyPasswordSettingsComplexity in #1699, but never got a dedicated regression test. Add one covering both directions: a caller value is no longer silently dropped on deserialization, and it's correctly included on serialization. Co-Authored-By: Claude Code --- ...dPolicyPasswordSettingsComplexityTest.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 api/src/test/java/com/okta/sdk/resource/model/PasswordPolicyPasswordSettingsComplexityTest.java diff --git a/api/src/test/java/com/okta/sdk/resource/model/PasswordPolicyPasswordSettingsComplexityTest.java b/api/src/test/java/com/okta/sdk/resource/model/PasswordPolicyPasswordSettingsComplexityTest.java new file mode 100644 index 00000000000..48839dccf31 --- /dev/null +++ b/api/src/test/java/com/okta/sdk/resource/model/PasswordPolicyPasswordSettingsComplexityTest.java @@ -0,0 +1,54 @@ +/* + * Copyright 2026-Present Okta, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.okta.sdk.resource.model; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.testng.annotations.Test; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +/** + * OKTA-1228272: maxConsecutiveCharacters was missing from the SDK's PasswordPolicyPasswordSettingsComplexity + * model even though the Okta API accepts it. Because McpObjectMapper-style deserialization typically runs + * with FAIL_ON_UNKNOWN_PROPERTIES=false, a caller-supplied value for this field was silently dropped + * instead of surfaced, giving a false impression the field was accepted. + */ +public class PasswordPolicyPasswordSettingsComplexityTest { + + private final ObjectMapper objectMapper = new ObjectMapper(); + + @Test + public void deserialize_maxConsecutiveCharacters_isPopulated() throws Exception { + String json = "{\"minLength\":8,\"minLowerCase\":1,\"maxConsecutiveCharacters\":1}"; + + PasswordPolicyPasswordSettingsComplexity complexity = + objectMapper.readValue(json, PasswordPolicyPasswordSettingsComplexity.class); + + assertEquals(complexity.getMinLength(), Integer.valueOf(8)); + assertEquals(complexity.getMaxConsecutiveCharacters(), Integer.valueOf(1)); + } + + @Test + public void serialize_maxConsecutiveCharacters_isIncluded() throws Exception { + PasswordPolicyPasswordSettingsComplexity complexity = new PasswordPolicyPasswordSettingsComplexity() + .maxConsecutiveCharacters(1); + + String json = objectMapper.writeValueAsString(complexity); + + assertTrue(json.contains("\"maxConsecutiveCharacters\":1"), "expected maxConsecutiveCharacters in output, got: " + json); + } +}