-
Notifications
You must be signed in to change notification settings - Fork 215
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[#1228] review: fixed javadoc of EnumValueValidator + header definiti…
…on; added unit test for EnumValueValidator; adjusted message and description of thrown exception if enum value is not known; Signed-off-by: Thomas Jaeckle <thomas.jaeckle@bosch.io>
- Loading branch information
Showing
4 changed files
with
150 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
106 changes: 106 additions & 0 deletions
106
base/model/src/test/java/org/eclipse/ditto/base/model/headers/EnumValueValidatorTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
/* | ||
* Copyright (c) 2021 Contributors to the Eclipse Foundation | ||
* | ||
* See the NOTICE file(s) distributed with this work for additional | ||
* information regarding copyright ownership. | ||
* | ||
* This program and the accompanying materials are made available under the | ||
* terms of the Eclipse Public License 2.0 which is available at | ||
* http://www.eclipse.org/legal/epl-2.0 | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
*/ | ||
package org.eclipse.ditto.base.model.headers; | ||
|
||
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; | ||
import static org.assertj.core.api.Assertions.assertThatNoException; | ||
import static org.assertj.core.api.Assertions.assertThatNullPointerException; | ||
import static org.assertj.core.api.Assertions.assertThatThrownBy; | ||
import static org.mutabilitydetector.unittesting.MutabilityAssert.assertInstancesOf; | ||
import static org.mutabilitydetector.unittesting.MutabilityMatchers.areImmutable; | ||
|
||
import org.eclipse.ditto.base.model.exceptions.DittoHeaderInvalidException; | ||
import org.junit.Test; | ||
|
||
/** | ||
* Unit tests for {@link EnumValueValidator}. | ||
*/ | ||
public final class EnumValueValidatorTest { | ||
|
||
private static final EnumValueValidator underTest = EnumValueValidator.getInstance(FancyTestEnum.values()); | ||
|
||
private static final DittoHeaderDefinition KNOWN_HEADER_DEFINITION = | ||
DittoHeaderDefinition.ON_LIVE_CHANNEL_TIMEOUT; | ||
|
||
@Test | ||
public void assertImmutability() { | ||
assertInstancesOf(EnumValueValidator.class, areImmutable()); | ||
} | ||
|
||
@Test | ||
public void tryToAcceptNullDefinition() { | ||
assertThatNullPointerException() | ||
.isThrownBy(() -> underTest.accept(null, FancyTestEnum.BAZ_BAR.s)) | ||
.withMessage("The definition must not be null!") | ||
.withNoCause(); | ||
} | ||
|
||
@Test | ||
public void tryToInitializeWithNullEnumValues() { | ||
assertThatNullPointerException() | ||
.isThrownBy(() -> EnumValueValidator.getInstance(null)) | ||
.withMessage("The enumValues must not be null!") | ||
.withNoCause(); | ||
} | ||
|
||
@Test | ||
public void tryToInitializeWithEmptyEnumValues() { | ||
assertThatIllegalArgumentException() | ||
.isThrownBy(() -> EnumValueValidator.getInstance(new Enum<?>[] {})) | ||
.withMessage("The enumValues must not be empty!") | ||
.withNoCause(); | ||
} | ||
|
||
@Test | ||
public void ensureValidEnumValuesDoNotThrowException() { | ||
assertThatNoException() | ||
.isThrownBy(() -> | ||
underTest.validateValue(KNOWN_HEADER_DEFINITION, "foo") | ||
); | ||
assertThatNoException() | ||
.isThrownBy(() -> | ||
underTest.validateValue(KNOWN_HEADER_DEFINITION, FancyTestEnum.BAZ_BAR.s) | ||
); | ||
} | ||
|
||
@Test | ||
public void invalidEnumValuesThrowException() { | ||
assertThatThrownBy(() -> | ||
underTest.validateValue(KNOWN_HEADER_DEFINITION, "what") | ||
) | ||
.isInstanceOf(DittoHeaderInvalidException.class) | ||
.hasMessage("The value 'what' of the header 'on-live-channel-timeout' is not a valid enum value of " + | ||
"type 'FancyTestEnum'.") | ||
.matches(ex -> ((DittoHeaderInvalidException) ex).getDescription() | ||
.filter(desc -> desc.equals("The value must be one of: <foo|bar|baz-bar>.")) | ||
.isPresent(), "Contains the expected description"); | ||
} | ||
|
||
|
||
enum FancyTestEnum { | ||
FOO("foo"), | ||
BAR("bar"), | ||
BAZ_BAR("baz-bar"); | ||
|
||
private final String s; | ||
|
||
FancyTestEnum(final String s) { | ||
this.s = s; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return s; | ||
} | ||
} | ||
} |