From b1b135b1248ecdbbca61bef97b5fd3fa6bc9ce70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Novotn=C3=BD?= Date: Tue, 11 Mar 2025 13:12:06 +0100 Subject: [PATCH] fix: added tests and fixed invalid comparison Refs: #827 --- .../java/io/evitadb/utils/VersionUtils.java | 11 +++-- .../io/evitadb/utils/VersionUtilsTest.java | 48 +++++++++++++++++++ 2 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 evita_functional_tests/src/test/java/io/evitadb/utils/VersionUtilsTest.java diff --git a/evita_common/src/main/java/io/evitadb/utils/VersionUtils.java b/evita_common/src/main/java/io/evitadb/utils/VersionUtils.java index 4163f0d8b3..932166a1a3 100644 --- a/evita_common/src/main/java/io/evitadb/utils/VersionUtils.java +++ b/evita_common/src/main/java/io/evitadb/utils/VersionUtils.java @@ -6,7 +6,7 @@ * | __/\ V /| | || (_| | |_| | |_) | * \___| \_/ |_|\__\__,_|____/|____/ * - * Copyright (c) 2023-2024 + * Copyright (c) 2023-2025 * * Licensed under the Business Source License, Version 1.1 (the "License"); * you may not use this file except in compliance with the License. @@ -83,7 +83,12 @@ public record SemVer( int minor, @Nullable String patch, boolean snapshot - ) { + ) implements Comparable { + + @Override + public int compareTo(@Nonnull SemVer o) { + return compare(this, o); + } /** * Constructs a SemVer object from a string version. @@ -132,7 +137,7 @@ public String toString() { * -1 if v1 has a lesser major or minor version than v2 */ public static int compare(@Nonnull SemVer v1, @Nonnull SemVer v2) { - if (v1.major() > v2.major() || v1.minor() > v2.minor()) { + if (v1.major() > v2.major() || (v1.major() == v2.major() && v1.minor() > v2.minor())) { return 1; } else if (v1.major() < v2.major() || v1.minor() < v2.minor()) { return -1; diff --git a/evita_functional_tests/src/test/java/io/evitadb/utils/VersionUtilsTest.java b/evita_functional_tests/src/test/java/io/evitadb/utils/VersionUtilsTest.java new file mode 100644 index 0000000000..9833aefad5 --- /dev/null +++ b/evita_functional_tests/src/test/java/io/evitadb/utils/VersionUtilsTest.java @@ -0,0 +1,48 @@ +/* + * + * _ _ ____ ____ + * _____ _(_) |_ __ _| _ \| __ ) + * / _ \ \ / / | __/ _` | | | | _ \ + * | __/\ V /| | || (_| | |_| | |_) | + * \___| \_/ |_|\__\__,_|____/|____/ + * + * Copyright (c) 2025 + * + * Licensed under the Business Source License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/FgForrest/evitaDB/blob/master/LICENSE + * + * 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 io.evitadb.utils; + + +import io.evitadb.utils.VersionUtils.SemVer; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * This test verifies contract of the {@link VersionUtils} class. + * + * @author Jan Novotný (novotny@fg.cz), FG Forrest a.s. (c) 2025 + */ +public class VersionUtilsTest { + + @Test + void shouldReturnExpectedSemVerComparisonResults() { + assertEquals(0, SemVer.fromString("1.0.0").compareTo(SemVer.fromString("1.0.0"))); + assertEquals(0, SemVer.fromString("1.0.1").compareTo(SemVer.fromString("1.0.0"))); + assertEquals(1, SemVer.fromString("1.1.0").compareTo(SemVer.fromString("1.0.0"))); + assertEquals(-1, SemVer.fromString("1.1.0").compareTo(SemVer.fromString("1.2.0"))); + assertEquals(1, SemVer.fromString("2025.1.0").compareTo(SemVer.fromString("2024.12.0"))); + assertEquals(-1, SemVer.fromString("2024.12.0").compareTo(SemVer.fromString("2025.1.0"))); + } +}