diff --git a/content-retrievers/langchain4j-community-neo4j-retriever/pom.xml b/content-retrievers/langchain4j-community-neo4j-retriever/pom.xml index cae8ceb0..123cfd04 100644 --- a/content-retrievers/langchain4j-community-neo4j-retriever/pom.xml +++ b/content-retrievers/langchain4j-community-neo4j-retriever/pom.xml @@ -62,13 +62,13 @@ org.testcontainers - junit-jupiter + testcontainers-junit-jupiter test org.testcontainers - neo4j + testcontainers-neo4j test diff --git a/document-transformers/langchain4j-community-llm-graph-transformer/pom.xml b/document-transformers/langchain4j-community-llm-graph-transformer/pom.xml index d683809b..c98d038b 100644 --- a/document-transformers/langchain4j-community-llm-graph-transformer/pom.xml +++ b/document-transformers/langchain4j-community-llm-graph-transformer/pom.xml @@ -28,7 +28,7 @@ org.testcontainers - junit-jupiter + testcontainers-junit-jupiter test diff --git a/embedding-stores/langchain4j-community-alloydb-pg/pom.xml b/embedding-stores/langchain4j-community-alloydb-pg/pom.xml index 8d1b90e9..46c31496 100644 --- a/embedding-stores/langchain4j-community-alloydb-pg/pom.xml +++ b/embedding-stores/langchain4j-community-alloydb-pg/pom.xml @@ -112,13 +112,13 @@ org.testcontainers - junit-jupiter + testcontainers-junit-jupiter test org.testcontainers - postgresql + testcontainers-postgresql test diff --git a/embedding-stores/langchain4j-community-alloydb-pg/src/test/java/dev/langchain4j/community/store/embedding/alloydb/AlloyDBEmbeddingStoreIT.java b/embedding-stores/langchain4j-community-alloydb-pg/src/test/java/dev/langchain4j/community/store/embedding/alloydb/AlloyDBEmbeddingStoreIT.java index 474c2a5a..61e753eb 100644 --- a/embedding-stores/langchain4j-community-alloydb-pg/src/test/java/dev/langchain4j/community/store/embedding/alloydb/AlloyDBEmbeddingStoreIT.java +++ b/embedding-stores/langchain4j-community-alloydb-pg/src/test/java/dev/langchain4j/community/store/embedding/alloydb/AlloyDBEmbeddingStoreIT.java @@ -1,6 +1,6 @@ package dev.langchain4j.community.store.embedding.alloydb; -import static org.testcontainers.shaded.org.apache.commons.lang3.RandomUtils.nextInt; +import static org.apache.commons.lang3.RandomUtils.nextInt; import dev.langchain4j.community.store.embedding.alloydb.index.DistanceStrategy; import dev.langchain4j.data.segment.TextSegment; diff --git a/embedding-stores/langchain4j-community-alloydb-pg/src/test/java/dev/langchain4j/community/store/embedding/alloydb/AlloyDBEmbeddingStoreRemovalIT.java b/embedding-stores/langchain4j-community-alloydb-pg/src/test/java/dev/langchain4j/community/store/embedding/alloydb/AlloyDBEmbeddingStoreRemovalIT.java index 925a1f40..f6c1a423 100644 --- a/embedding-stores/langchain4j-community-alloydb-pg/src/test/java/dev/langchain4j/community/store/embedding/alloydb/AlloyDBEmbeddingStoreRemovalIT.java +++ b/embedding-stores/langchain4j-community-alloydb-pg/src/test/java/dev/langchain4j/community/store/embedding/alloydb/AlloyDBEmbeddingStoreRemovalIT.java @@ -1,6 +1,6 @@ package dev.langchain4j.community.store.embedding.alloydb; -import static org.testcontainers.shaded.org.apache.commons.lang3.RandomUtils.nextInt; +import static org.apache.commons.lang3.RandomUtils.nextInt; import dev.langchain4j.community.store.embedding.alloydb.index.DistanceStrategy; import dev.langchain4j.data.segment.TextSegment; diff --git a/embedding-stores/langchain4j-community-clickhouse/pom.xml b/embedding-stores/langchain4j-community-clickhouse/pom.xml index cf723d07..2ea9af51 100644 --- a/embedding-stores/langchain4j-community-clickhouse/pom.xml +++ b/embedding-stores/langchain4j-community-clickhouse/pom.xml @@ -83,7 +83,7 @@ org.testcontainers - clickhouse + testcontainers-clickhouse test diff --git a/embedding-stores/langchain4j-community-cloud-sql-pg/pom.xml b/embedding-stores/langchain4j-community-cloud-sql-pg/pom.xml index a47544f6..e223c0ea 100644 --- a/embedding-stores/langchain4j-community-cloud-sql-pg/pom.xml +++ b/embedding-stores/langchain4j-community-cloud-sql-pg/pom.xml @@ -317,13 +317,13 @@ org.testcontainers - junit-jupiter + testcontainers-junit-jupiter test org.testcontainers - postgresql + testcontainers-postgresql test diff --git a/embedding-stores/langchain4j-community-cloud-sql-pg/src/test/java/dev/langchain4j/community/store/embedding/cloudsql/PostgresEmbeddingStoreIT.java b/embedding-stores/langchain4j-community-cloud-sql-pg/src/test/java/dev/langchain4j/community/store/embedding/cloudsql/PostgresEmbeddingStoreIT.java index 75126e11..3949cf29 100644 --- a/embedding-stores/langchain4j-community-cloud-sql-pg/src/test/java/dev/langchain4j/community/store/embedding/cloudsql/PostgresEmbeddingStoreIT.java +++ b/embedding-stores/langchain4j-community-cloud-sql-pg/src/test/java/dev/langchain4j/community/store/embedding/cloudsql/PostgresEmbeddingStoreIT.java @@ -1,6 +1,6 @@ package dev.langchain4j.community.store.embedding.cloudsql; -import static org.testcontainers.shaded.org.apache.commons.lang3.RandomUtils.nextInt; +import static org.apache.commons.lang3.RandomUtils.nextInt; import dev.langchain4j.community.store.embedding.cloudsql.index.DistanceStrategy; import dev.langchain4j.data.segment.TextSegment; diff --git a/embedding-stores/langchain4j-community-cloud-sql-pg/src/test/java/dev/langchain4j/community/store/embedding/cloudsql/PostgresEmbeddingStoreRemovalIT.java b/embedding-stores/langchain4j-community-cloud-sql-pg/src/test/java/dev/langchain4j/community/store/embedding/cloudsql/PostgresEmbeddingStoreRemovalIT.java index 0d0eca63..a39614b2 100644 --- a/embedding-stores/langchain4j-community-cloud-sql-pg/src/test/java/dev/langchain4j/community/store/embedding/cloudsql/PostgresEmbeddingStoreRemovalIT.java +++ b/embedding-stores/langchain4j-community-cloud-sql-pg/src/test/java/dev/langchain4j/community/store/embedding/cloudsql/PostgresEmbeddingStoreRemovalIT.java @@ -1,6 +1,6 @@ package dev.langchain4j.community.store.embedding.cloudsql; -import static org.testcontainers.shaded.org.apache.commons.lang3.RandomUtils.nextInt; +import static org.apache.commons.lang3.RandomUtils.nextInt; import dev.langchain4j.community.store.embedding.cloudsql.index.DistanceStrategy; import dev.langchain4j.data.segment.TextSegment; diff --git a/embedding-stores/langchain4j-community-neo4j/pom.xml b/embedding-stores/langchain4j-community-neo4j/pom.xml index 40e7a9b3..050079df 100644 --- a/embedding-stores/langchain4j-community-neo4j/pom.xml +++ b/embedding-stores/langchain4j-community-neo4j/pom.xml @@ -58,16 +58,15 @@ - org.testcontainers - junit-jupiter + testcontainers-junit-jupiter test org.testcontainers - neo4j + testcontainers-neo4j test @@ -127,7 +126,7 @@ org.testcontainers - selenium + testcontainers-selenium test diff --git a/embedding-stores/langchain4j-community-sqlserver/pom.xml b/embedding-stores/langchain4j-community-sqlserver/pom.xml index 6fc5a07c..9dd24a84 100644 --- a/embedding-stores/langchain4j-community-sqlserver/pom.xml +++ b/embedding-stores/langchain4j-community-sqlserver/pom.xml @@ -55,15 +55,21 @@ org.testcontainers testcontainers test + + + junit + junit + + org.testcontainers - junit-jupiter + testcontainers-junit-jupiter test org.testcontainers - mssqlserver + testcontainers-mssqlserver test diff --git a/embedding-stores/langchain4j-community-sqlserver/src/main/java/dev/langchain4j/store/embedding/sqlserver/SQLFilters.java b/embedding-stores/langchain4j-community-sqlserver/src/main/java/dev/langchain4j/store/embedding/sqlserver/SQLFilters.java index 8fc58c2c..bf8b4bba 100644 --- a/embedding-stores/langchain4j-community-sqlserver/src/main/java/dev/langchain4j/store/embedding/sqlserver/SQLFilters.java +++ b/embedding-stores/langchain4j-community-sqlserver/src/main/java/dev/langchain4j/store/embedding/sqlserver/SQLFilters.java @@ -9,7 +9,8 @@ import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Types; -import java.util.*; +import java.util.Collection; +import java.util.Objects; import java.util.function.BiFunction; import java.util.stream.Collectors; diff --git a/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerCatalogSchemaEmbeddingStoreIT.java b/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerCatalogSchemaEmbeddingStoreIT.java index dc2d4ac0..28c256b8 100644 --- a/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerCatalogSchemaEmbeddingStoreIT.java +++ b/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerCatalogSchemaEmbeddingStoreIT.java @@ -3,9 +3,9 @@ import static dev.langchain4j.store.embedding.TestUtils.awaitUntilAsserted; import static dev.langchain4j.store.embedding.sqlserver.util.SQLServerTestsUtil.DEFAULT_CONTAINER; import static dev.langchain4j.store.embedding.sqlserver.util.SQLServerTestsUtil.getSqlServerDataSource; +import static org.apache.commons.lang3.RandomUtils.nextInt; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.data.Percentage.withPercentage; -import static org.testcontainers.shaded.org.apache.commons.lang3.RandomUtils.nextInt; import dev.langchain4j.data.embedding.Embedding; import dev.langchain4j.data.segment.TextSegment; @@ -21,14 +21,14 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.testcontainers.junit.jupiter.Testcontainers; @Testcontainers -public class SQLServerCatalogSchemaEmbeddingStoreIT extends EmbeddingStoreWithFilteringIT { +class SQLServerCatalogSchemaEmbeddingStoreIT extends EmbeddingStoreWithFilteringIT { static String tableName = "test_" + nextInt(1000, 2000); static EmbeddingModel embeddingModel = new AllMiniLmL6V2QuantizedEmbeddingModel(); @@ -44,7 +44,7 @@ public class SQLServerCatalogSchemaEmbeddingStoreIT extends EmbeddingStoreWithFi .build(); @Test - public void test_unicode_embeddings() { + void unicode_embeddings() { TextSegment[] segments = SQLServerTestsUtil.japaneseSampling(); List embeddings = new ArrayList<>(segments.length); @@ -54,7 +54,7 @@ public void test_unicode_embeddings() { } List ids = embeddingStore().addAll(embeddings, Arrays.asList(segments)); - awaitUntilAsserted(() -> assertThat(getAllEmbeddings()).hasSize(segments.length)); + awaitUntilAsserted(() -> assertThat(getAllEmbeddings()).hasSameSizeAs(segments)); EmbeddingSearchRequest searchRequest = EmbeddingSearchRequest.builder() .queryEmbedding(embeddings.get(0)) @@ -77,7 +77,7 @@ public void test_unicode_embeddings() { } @Test - public void test_unicode_metadata() { + void unicode_metadata() { TextSegment[] segments = SQLServerTestsUtil.japaneseSampling(); List embeddings = new ArrayList<>(segments.length); for (TextSegment segment : segments) { @@ -88,7 +88,7 @@ public void test_unicode_metadata() { Embedding emb = embeddingModel().embed("Test embedding").content(); embeddingStore().addAll(embeddings, Arrays.asList(segments)); - awaitUntilAsserted(() -> assertThat(getAllEmbeddings()).hasSize(segments.length)); + awaitUntilAsserted(() -> assertThat(getAllEmbeddings()).hasSameSizeAs(segments)); EmbeddingSearchRequest searchRequest = EmbeddingSearchRequest.builder() .queryEmbedding(emb) @@ -125,18 +125,18 @@ protected void clearStore() { } } - @Before - public void before() { + @BeforeEach + void before() { clearStore(); } - @After - public void after() { + @AfterEach + void after() { clearStore(); } @AfterAll - public static void afterClass() { + static void afterClass() { DEFAULT_CONTAINER.stop(); } } diff --git a/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerEmbeddingStoreConfigIT.java b/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerEmbeddingStoreConfigIT.java index d7f9b542..de0e2dfd 100644 --- a/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerEmbeddingStoreConfigIT.java +++ b/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerEmbeddingStoreConfigIT.java @@ -1,7 +1,8 @@ package dev.langchain4j.store.embedding.sqlserver; import static dev.langchain4j.store.embedding.sqlserver.util.SQLServerTestsUtil.getSqlServerDataSource; -import static org.junit.jupiter.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; import com.microsoft.sqlserver.jdbc.SQLServerDataSource; import dev.langchain4j.data.embedding.Embedding; @@ -26,7 +27,7 @@ void basic_config_test() { .dimension(4) .build()) .build(); - assertNotNull(embeddingStore); + assertThat(embeddingStore).isNotNull(); } @Test @@ -52,7 +53,7 @@ void should_create_table_with_json_indexes() { .build(); // Test that store was created successfully - assertNotNull(embeddingStore); + assertThat(embeddingStore).isNotNull(); } @Test @@ -76,14 +77,14 @@ void should_create_table_with_ordered_json_index() { .build(); // Test that store was created successfully - assertNotNull(embeddingStore); + assertThat(embeddingStore).isNotNull(); // Test basic functionality Embedding embedding = new Embedding(new float[] {0.1f, 0.2f, 0.3f, 0.4f}); TextSegment textSegment = TextSegment.from("test text"); String id = embeddingStore.add(embedding, textSegment); - assertNotNull(id); + assertThat(id).isNotNull(); } @Test @@ -93,6 +94,6 @@ void should_detect_sql_injection() { .dimension(4); // Test that store was created successfully - assertThrows(IllegalArgumentException.class, embeddingTable::build); + assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(embeddingTable::build); } } diff --git a/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerEmbeddingStoreIT.java b/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerEmbeddingStoreIT.java index e30ad645..ffcf8bb4 100644 --- a/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerEmbeddingStoreIT.java +++ b/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerEmbeddingStoreIT.java @@ -3,9 +3,9 @@ import static dev.langchain4j.store.embedding.TestUtils.awaitUntilAsserted; import static dev.langchain4j.store.embedding.sqlserver.util.SQLServerTestsUtil.DEFAULT_CONTAINER; import static dev.langchain4j.store.embedding.sqlserver.util.SQLServerTestsUtil.getSqlServerDataSource; +import static org.apache.commons.lang3.RandomUtils.nextInt; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.data.Percentage.withPercentage; -import static org.testcontainers.shaded.org.apache.commons.lang3.RandomUtils.nextInt; import dev.langchain4j.data.embedding.Embedding; import dev.langchain4j.data.segment.TextSegment; @@ -21,14 +21,14 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.testcontainers.junit.jupiter.Testcontainers; @Testcontainers -public class SQLServerEmbeddingStoreIT extends EmbeddingStoreWithFilteringIT { +class SQLServerEmbeddingStoreIT extends EmbeddingStoreWithFilteringIT { static String tableName = "test_" + nextInt(1000, 2000); static EmbeddingModel embeddingModel = new AllMiniLmL6V2QuantizedEmbeddingModel(); @@ -42,7 +42,7 @@ public class SQLServerEmbeddingStoreIT extends EmbeddingStoreWithFilteringIT { .build(); @Test - public void test_unicode_embeddings() { + void unicode_embeddings() { TextSegment[] segments = SQLServerTestsUtil.japaneseSampling(); List embeddings = new ArrayList<>(segments.length); @@ -52,7 +52,7 @@ public void test_unicode_embeddings() { } List ids = embeddingStore().addAll(embeddings, Arrays.asList(segments)); - awaitUntilAsserted(() -> assertThat(getAllEmbeddings()).hasSize(segments.length)); + awaitUntilAsserted(() -> assertThat(getAllEmbeddings()).hasSameSizeAs(segments)); EmbeddingSearchRequest searchRequest = EmbeddingSearchRequest.builder() .queryEmbedding(embeddings.get(0)) @@ -75,7 +75,7 @@ public void test_unicode_embeddings() { } @Test - public void test_unicode_metadata() { + void unicode_metadata() { TextSegment[] segments = SQLServerTestsUtil.japaneseSampling(); List embeddings = new ArrayList<>(segments.length); for (TextSegment segment : segments) { @@ -86,7 +86,7 @@ public void test_unicode_metadata() { Embedding emb = embeddingModel().embed("Test embedding").content(); embeddingStore().addAll(embeddings, Arrays.asList(segments)); - awaitUntilAsserted(() -> assertThat(getAllEmbeddings()).hasSize(segments.length)); + awaitUntilAsserted(() -> assertThat(getAllEmbeddings()).hasSameSizeAs(segments)); EmbeddingSearchRequest searchRequest = EmbeddingSearchRequest.builder() .queryEmbedding(emb) @@ -123,18 +123,18 @@ protected void clearStore() { } } - @Before - public void before() { + @BeforeEach + void before() { clearStore(); } - @After - public void after() { + @AfterEach + void after() { clearStore(); } @AfterAll - public static void afterClass() { + static void afterClass() { DEFAULT_CONTAINER.stop(); } } diff --git a/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerEmbeddingStoreRemovalIT.java b/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerEmbeddingStoreRemovalIT.java index 0745ab2a..13c0136f 100644 --- a/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerEmbeddingStoreRemovalIT.java +++ b/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/SQLServerEmbeddingStoreRemovalIT.java @@ -2,22 +2,22 @@ import static dev.langchain4j.store.embedding.sqlserver.util.SQLServerTestsUtil.DEFAULT_CONTAINER; import static dev.langchain4j.store.embedding.sqlserver.util.SQLServerTestsUtil.getSqlServerDataSource; -import static org.junit.Assert.assertTrue; -import static org.testcontainers.shaded.org.apache.commons.lang3.RandomUtils.nextInt; +import static org.apache.commons.lang3.RandomUtils.nextInt; +import static org.junit.jupiter.api.Assertions.assertNotSame; import dev.langchain4j.data.segment.TextSegment; import dev.langchain4j.model.embedding.EmbeddingModel; import dev.langchain4j.model.embedding.onnx.allminilml6v2q.AllMiniLmL6V2QuantizedEmbeddingModel; import dev.langchain4j.store.embedding.EmbeddingStore; import dev.langchain4j.store.embedding.EmbeddingStoreWithRemovalIT; -import org.junit.Before; -import org.junit.Test; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.testcontainers.junit.jupiter.Testcontainers; @Testcontainers -public class SQLServerEmbeddingStoreRemovalIT extends EmbeddingStoreWithRemovalIT { +class SQLServerEmbeddingStoreRemovalIT extends EmbeddingStoreWithRemovalIT { static String tableName = "test_remove_" + nextInt(1000, 2000); static EmbeddingModel embeddingModel = new AllMiniLmL6V2QuantizedEmbeddingModel(); @@ -31,8 +31,8 @@ public class SQLServerEmbeddingStoreRemovalIT extends EmbeddingStoreWithRemovalI .build(); @Test - public void test_config() { - assertTrue(embeddingStore != null); + void config() { + assertNotSame(embeddingStore, null); } @Override @@ -46,21 +46,21 @@ protected EmbeddingModel embeddingModel() { } @AfterEach - public void after() { + void after() { if (embeddingStore != null) { embeddingStore.removeAll(); } } - @Before - public void before() { + @BeforeEach + void before() { if (embeddingStore != null) { embeddingStore.removeAll(); } } @AfterAll - public static void afterClass() { + static void afterClass() { DEFAULT_CONTAINER.stop(); } } diff --git a/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/TestDistanceMetric.java b/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/TestDistanceMetric.java index 642c1155..eaaf55b1 100644 --- a/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/TestDistanceMetric.java +++ b/embedding-stores/langchain4j-community-sqlserver/src/test/java/dev/langchain4j/store/embedding/sqlserver/TestDistanceMetric.java @@ -1,6 +1,7 @@ package dev.langchain4j.store.embedding.sqlserver; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.within; import org.junit.jupiter.api.Test; @@ -9,24 +10,26 @@ class TestDistanceMetric { @Test void shouldConvertCosineDistanceToSimilarityScore() { // Test COSINE metric: relevance = 2 - distance - assertEquals(2.0, DistanceMetric.COSINE.distanceToScore(0.0), 0.001); // Perfect similarity: 2 - 0 = 2 - assertEquals(1.0, DistanceMetric.COSINE.distanceToScore(1.0), 0.001); // Moderate similarity: 2 - 1 = 1 - assertEquals(0.0, DistanceMetric.COSINE.distanceToScore(2.0), 0.001); // No similarity: 2 - 2 = 0 - assertEquals(-1.0, DistanceMetric.COSINE.distanceToScore(3.0), 0.001); // Opposing vectors: 2 - 3 = -1 + assertThat(DistanceMetric.COSINE.distanceToScore(0.0)) + .isCloseTo(2.0, within(0.001)); // Perfect similarity: 2 - 0 = 2 + assertThat(DistanceMetric.COSINE.distanceToScore(1.0)) + .isCloseTo(1.0, within(0.001)); // Moderate similarity: 2 - 1 = 1 + assertThat(DistanceMetric.COSINE.distanceToScore(2.0)) + .isCloseTo(0.0, within(0.001)); // No similarity: 2 - 2 = 0 + assertThat(DistanceMetric.COSINE.distanceToScore(3.0)) + .isCloseTo(-1.0, within(0.001)); // Opposing vectors: 2 - 3 = -1 } @Test void shouldConvertEuclideanDistanceToSimilarityScore() { // Test EUCLIDEAN metric: relevance = 2 * e^(-distance) - assertEquals( - 2.0, - DistanceMetric.EUCLIDEAN.distanceToScore(0.0), - 0.001); // Perfect similarity: 2 * e^(-0) = 2 * 1 = 2 - assertEquals( - 0.736, DistanceMetric.EUCLIDEAN.distanceToScore(1.0), 0.001); // Moderate similarity: 2 * e^(-1) ≈ 0.736 - assertEquals( - 0.100, DistanceMetric.EUCLIDEAN.distanceToScore(3.0), 0.001); // Lower similarity: 2 * e^(-3) ≈ 0.100 - assertEquals( - 0.013, DistanceMetric.EUCLIDEAN.distanceToScore(5.0), 0.001); // Very low similarity: 2 * e^(-5) ≈ 0.013 + assertThat(DistanceMetric.EUCLIDEAN.distanceToScore(0.0)) + .isCloseTo(2.0, within(0.001)); // Perfect similarity: 2 * e^(-0) = 2 * 1 = 2 + assertThat(DistanceMetric.EUCLIDEAN.distanceToScore(1.0)) + .isCloseTo(0.736, within(0.001)); // Moderate similarity: 2 * e^(-1) ≈ 0.736 + assertThat(DistanceMetric.EUCLIDEAN.distanceToScore(3.0)) + .isCloseTo(0.100, within(0.001)); // Lower similarity: 2 * e^(-3) ≈ 0.100 + assertThat(DistanceMetric.EUCLIDEAN.distanceToScore(5.0)) + .isCloseTo(0.013, within(0.001)); // Very low similarity: 2 * e^(-5) ≈ 0.013 } } diff --git a/embedding-stores/langchain4j-community-vearch/pom.xml b/embedding-stores/langchain4j-community-vearch/pom.xml index fd62153d..c3a52083 100644 --- a/embedding-stores/langchain4j-community-vearch/pom.xml +++ b/embedding-stores/langchain4j-community-vearch/pom.xml @@ -77,7 +77,7 @@ org.testcontainers - junit-jupiter + testcontainers-junit-jupiter test diff --git a/embedding-stores/langchain4j-community-yugabytedb/pom.xml b/embedding-stores/langchain4j-community-yugabytedb/pom.xml index 78da369a..c1aa37a8 100644 --- a/embedding-stores/langchain4j-community-yugabytedb/pom.xml +++ b/embedding-stores/langchain4j-community-yugabytedb/pom.xml @@ -126,13 +126,13 @@ org.testcontainers - junit-jupiter + testcontainers-junit-jupiter test org.testcontainers - postgresql + testcontainers-postgresql test diff --git a/langchain4j-community-core/pom.xml b/langchain4j-community-core/pom.xml index 0b7a72bf..2b25d2ef 100644 --- a/langchain4j-community-core/pom.xml +++ b/langchain4j-community-core/pom.xml @@ -21,6 +21,12 @@ + + dev.langchain4j + langchain4j-core + ${langchain4j.core.version} + + dev.langchain4j langchain4j @@ -32,6 +38,11 @@ jackson-databind + + com.fasterxml.jackson.core + jackson-annotations + + org.slf4j slf4j-api @@ -49,6 +60,18 @@ test + + org.junit.jupiter + junit-jupiter-api + test + + + + org.junit.jupiter + junit-jupiter-params + test + + diff --git a/models/langchain4j-community-xinference/pom.xml b/models/langchain4j-community-xinference/pom.xml index 1f338787..d1f36a19 100644 --- a/models/langchain4j-community-xinference/pom.xml +++ b/models/langchain4j-community-xinference/pom.xml @@ -74,7 +74,7 @@ org.testcontainers - junit-jupiter + testcontainers-junit-jupiter test diff --git a/pom.xml b/pom.xml index 4dc6a5d2..be82de37 100644 --- a/pom.xml +++ b/pom.xml @@ -83,8 +83,23 @@ 1.9.0-SNAPSHOT 1.9.0-SNAPSHOT 1.9.0-SNAPSHOT + + + 2.0.1 + + + + org.testcontainers + testcontainers-bom + ${testcontainers.version} + pom + import + + + + diff --git a/spring-boot-starters/langchain4j-community-clickhouse-spring-boot-starter/pom.xml b/spring-boot-starters/langchain4j-community-clickhouse-spring-boot-starter/pom.xml index 924801ba..2587df8b 100644 --- a/spring-boot-starters/langchain4j-community-clickhouse-spring-boot-starter/pom.xml +++ b/spring-boot-starters/langchain4j-community-clickhouse-spring-boot-starter/pom.xml @@ -76,7 +76,7 @@ org.testcontainers - clickhouse + testcontainers-clickhouse test diff --git a/spring-boot-starters/langchain4j-community-neo4j-spring-boot-starter/pom.xml b/spring-boot-starters/langchain4j-community-neo4j-spring-boot-starter/pom.xml index e17c1060..18d23c51 100644 --- a/spring-boot-starters/langchain4j-community-neo4j-spring-boot-starter/pom.xml +++ b/spring-boot-starters/langchain4j-community-neo4j-spring-boot-starter/pom.xml @@ -73,13 +73,13 @@ org.testcontainers - junit-jupiter + testcontainers-junit-jupiter test org.testcontainers - neo4j + testcontainers-neo4j test diff --git a/spring-boot-starters/langchain4j-community-xinference-spring-boot-starter/pom.xml b/spring-boot-starters/langchain4j-community-xinference-spring-boot-starter/pom.xml index 575aec7d..6dc9da7a 100644 --- a/spring-boot-starters/langchain4j-community-xinference-spring-boot-starter/pom.xml +++ b/spring-boot-starters/langchain4j-community-xinference-spring-boot-starter/pom.xml @@ -67,7 +67,7 @@ org.testcontainers - junit-jupiter + testcontainers-junit-jupiter test diff --git a/web-search-engines/langchain4j-community-web-search-engine-duckduckgo/src/test/java/dev/langchain4j/community/web/search/duckduckgo/DuckDuckGoWebSearchEngineIT.java b/web-search-engines/langchain4j-community-web-search-engine-duckduckgo/src/test/java/dev/langchain4j/community/web/search/duckduckgo/DuckDuckGoWebSearchEngineIT.java index 6f4c7773..9e0329ac 100644 --- a/web-search-engines/langchain4j-community-web-search-engine-duckduckgo/src/test/java/dev/langchain4j/community/web/search/duckduckgo/DuckDuckGoWebSearchEngineIT.java +++ b/web-search-engines/langchain4j-community-web-search-engine-duckduckgo/src/test/java/dev/langchain4j/community/web/search/duckduckgo/DuckDuckGoWebSearchEngineIT.java @@ -10,12 +10,12 @@ import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; -import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; class DuckDuckGoWebSearchEngineIT { + private static final int EXPECTED_MAX_RESULTS = 7; private static DuckDuckGoWebSearchEngine engine; @@ -113,6 +113,6 @@ void should_search_with_max_results() { .build(); WebSearchResults webSearchResults = engine.search(request); List results = webSearchResults.results(); - Assertions.assertThat(results).hasSizeLessThanOrEqualTo(maxResults); + assertThat(results).hasSizeLessThanOrEqualTo(maxResults); } } diff --git a/web-search-engines/langchain4j-community-web-search-engine-duckduckgo/src/test/java/dev/langchain4j/community/web/search/duckduckgo/DuckDuckGoWebSearchEngineTest.java b/web-search-engines/langchain4j-community-web-search-engine-duckduckgo/src/test/java/dev/langchain4j/community/web/search/duckduckgo/DuckDuckGoWebSearchEngineTest.java index fffb7b96..512fb529 100644 --- a/web-search-engines/langchain4j-community-web-search-engine-duckduckgo/src/test/java/dev/langchain4j/community/web/search/duckduckgo/DuckDuckGoWebSearchEngineTest.java +++ b/web-search-engines/langchain4j-community-web-search-engine-duckduckgo/src/test/java/dev/langchain4j/community/web/search/duckduckgo/DuckDuckGoWebSearchEngineTest.java @@ -1,10 +1,8 @@ package dev.langchain4j.community.web.search.duckduckgo; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertThrows; import java.net.URI; import org.junit.jupiter.api.Test; @@ -14,20 +12,20 @@ class DuckDuckGoWebSearchEngineTest { private static void testURI(String uriString) { assertDoesNotThrow(() -> DuckDuckGoWebSearchEngine.makeURI(uriString)); final URI uri = DuckDuckGoWebSearchEngine.makeURI(uriString); - assertNotNull(uri); + assertThat(uri).isNotNull(); if (uriString.matches(".*\\s+.*")) { - assertNotEquals(uriString, uri.toString()); + assertThat(uri.toString()).isNotEqualTo(uriString); } else { - assertEquals(uriString, uri.toString()); + assertThat(uri).hasToString(uriString); } } @Test - void test_malformed_urls() { - assertThrows( - IllegalArgumentException.class, - () -> URI.create( - "https://www.linkedin.com/pulse/introduction-langchain4j-supercharging-java-llms-ibrahim-jimoh-kyj4f#:~:text=LangChain4j is a groundbreaking Java,by Python and JavaScript libraries.")); + void should_malformed_urls() { + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> URI.create( + "https://www.linkedin.com/pulse/introduction-langchain4j-supercharging-java-llms-ibrahim-jimoh-kyj4f#:~:text=LangChain4j is a groundbreaking Java,by Python and JavaScript libraries.")); assertDoesNotThrow( () -> URI.create( "https://www.linkedin.com/pulse/introduction-langchain4j-supercharging-java-llms-ibrahim-jimoh-kyj4f#:~:text=LangChain4j")); @@ -42,10 +40,13 @@ void test_malformed_urls() { } @Test - void test_make_uri() { - assertThrows(IllegalArgumentException.class, () -> DuckDuckGoWebSearchEngine.makeURI(null)); - assertThrows(IllegalArgumentException.class, () -> DuckDuckGoWebSearchEngine.makeURI("")); - assertThrows(IllegalArgumentException.class, () -> DuckDuckGoWebSearchEngine.makeURI(" \\t")); + void should_make_uri() { + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> DuckDuckGoWebSearchEngine.makeURI(null)); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> DuckDuckGoWebSearchEngine.makeURI("")); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> DuckDuckGoWebSearchEngine.makeURI(" \\t")); testURI( "https://www.linkedin.com/pulse/introduction-langchain4j-supercharging-java-llms-ibrahim-jimoh-kyj4f#:~:text=LangChain4j"); testURI( diff --git a/web-search-engines/langchain4j-community-web-search-engine-duckduckgo/src/test/java/dev/langchain4j/community/web/search/duckduckgo/UtilsTest.java b/web-search-engines/langchain4j-community-web-search-engine-duckduckgo/src/test/java/dev/langchain4j/community/web/search/duckduckgo/UtilsTest.java index 13cf3be1..62fe2356 100644 --- a/web-search-engines/langchain4j-community-web-search-engine-duckduckgo/src/test/java/dev/langchain4j/community/web/search/duckduckgo/UtilsTest.java +++ b/web-search-engines/langchain4j-community-web-search-engine-duckduckgo/src/test/java/dev/langchain4j/community/web/search/duckduckgo/UtilsTest.java @@ -9,7 +9,7 @@ class UtilsTest { @Test - void test_buildFormData_basic() { + void shuold_build_form_data_basic() { Map params = new LinkedHashMap<>(); params.put("q", "AI"); params.put("safe", "strict"); @@ -19,7 +19,7 @@ void test_buildFormData_basic() { } @Test - void test_buildFormData_with_space_and_question_mark() { + void should_build_form_data_with_space_and_question_mark() { Map params = new LinkedHashMap<>(); params.put("q", "What is LangChain4j?"); params.put("safe", "strict"); @@ -29,7 +29,7 @@ void test_buildFormData_with_space_and_question_mark() { } @Test - void test_buildFormData_with_special_characters() { + void should_build_form_data_with_special_characters() { Map params = new LinkedHashMap<>(); params.put("q", "test@email.com & more"); params.put("kl", "us-en"); @@ -39,13 +39,13 @@ void test_buildFormData_with_special_characters() { } @Test - void test_buildFormData_null_params() { + void should_build_form_data_null_params() { String actualFormData = Utils.buildFormData(null); assertThat(actualFormData).isEmpty(); } @Test - void test_urlEncode_special_characters() { + void should_encode_url_with_special_characters() { String input = "test@email.com?param=value&other=data"; String encoded = Utils.urlEncode(input); assertThat(encoded).isEqualTo("test%40email.com%3Fparam%3Dvalue%26other%3Ddata"); diff --git a/web-search-engines/langchain4j-community-web-search-engine-searxng/pom.xml b/web-search-engines/langchain4j-community-web-search-engine-searxng/pom.xml index b7de0f17..a2208d5e 100644 --- a/web-search-engines/langchain4j-community-web-search-engine-searxng/pom.xml +++ b/web-search-engines/langchain4j-community-web-search-engine-searxng/pom.xml @@ -70,7 +70,7 @@ org.testcontainers - junit-jupiter + testcontainers-junit-jupiter test diff --git a/web-search-engines/langchain4j-community-web-search-engine-searxng/src/test/java/dev/langchain4j/community/web/search/searxng/SearXNGWebSearchEngineTest.java b/web-search-engines/langchain4j-community-web-search-engine-searxng/src/test/java/dev/langchain4j/community/web/search/searxng/SearXNGWebSearchEngineTest.java index 91f95380..3c8481bb 100644 --- a/web-search-engines/langchain4j-community-web-search-engine-searxng/src/test/java/dev/langchain4j/community/web/search/searxng/SearXNGWebSearchEngineTest.java +++ b/web-search-engines/langchain4j-community-web-search-engine-searxng/src/test/java/dev/langchain4j/community/web/search/searxng/SearXNGWebSearchEngineTest.java @@ -1,10 +1,8 @@ package dev.langchain4j.community.web.search.searxng; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNotNull; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertThrows; import java.net.URI; import org.junit.jupiter.api.Test; @@ -14,20 +12,20 @@ class SearXNGWebSearchEngineTest { private static void testURI(String uriString) { assertDoesNotThrow(() -> SearXNGWebSearchEngine.makeURI(uriString)); final URI uri = SearXNGWebSearchEngine.makeURI(uriString); - assertNotNull(uri); + assertThat(uri).isNotNull(); if (uriString.matches(".*\\s+.*")) { - assertNotEquals(uriString, uri.toString()); + assertThat(uri.toString()).isNotEqualTo(uriString); } else { - assertEquals(uriString, uri.toString()); + assertThat(uri).hasToString(uriString); } } @Test - void test_malformed_urls() { - assertThrows( - IllegalArgumentException.class, - () -> URI.create( - "https://www.linkedin.com/pulse/introduction-langchain4j-supercharging-java-llms-ibrahim-jimoh-kyj4f#:~:text=LangChain4j is a groundbreaking Java,by Python and JavaScript libraries.")); + void should_malformed_urls() { + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy( + () -> URI.create( + "https://www.linkedin.com/pulse/introduction-langchain4j-supercharging-java-llms-ibrahim-jimoh-kyj4f#:~:text=LangChain4j is a groundbreaking Java,by Python and JavaScript libraries.")); assertDoesNotThrow( () -> URI.create( "https://www.linkedin.com/pulse/introduction-langchain4j-supercharging-java-llms-ibrahim-jimoh-kyj4f#:~:text=LangChain4j")); @@ -42,10 +40,12 @@ void test_malformed_urls() { } @Test - void test_make_uri() { - assertThrows(IllegalArgumentException.class, () -> SearXNGWebSearchEngine.makeURI(null)); - assertThrows(IllegalArgumentException.class, () -> SearXNGWebSearchEngine.makeURI("")); - assertThrows(IllegalArgumentException.class, () -> SearXNGWebSearchEngine.makeURI(" \\t")); + void should_make_uri() { + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> SearXNGWebSearchEngine.makeURI(null)); + assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> SearXNGWebSearchEngine.makeURI("")); + assertThatExceptionOfType(IllegalArgumentException.class) + .isThrownBy(() -> SearXNGWebSearchEngine.makeURI(" \\t")); testURI( "https://www.linkedin.com/pulse/introduction-langchain4j-supercharging-java-llms-ibrahim-jimoh-kyj4f#:~:text=LangChain4j"); testURI( diff --git a/web-search-engines/langchain4j-community-web-search-engine-searxng/src/test/java/dev/langchain4j/community/web/search/searxng/UtilTest.java b/web-search-engines/langchain4j-community-web-search-engine-searxng/src/test/java/dev/langchain4j/community/web/search/searxng/UtilTest.java index 34e980be..166b93d0 100644 --- a/web-search-engines/langchain4j-community-web-search-engine-searxng/src/test/java/dev/langchain4j/community/web/search/searxng/UtilTest.java +++ b/web-search-engines/langchain4j-community-web-search-engine-searxng/src/test/java/dev/langchain4j/community/web/search/searxng/UtilTest.java @@ -7,8 +7,9 @@ import org.junit.jupiter.api.Test; class UtilTest { + @Test - void test_make_url() { + void should_make_url_when_provide_params() { String path = "search"; Map params = new LinkedHashMap<>(); params.put("q", "AI"); @@ -19,7 +20,7 @@ void test_make_url() { } @Test - void test_make_url_with_space() { + void should_make_url_with_space() { String path = "search"; Map params = new LinkedHashMap<>(); params.put("q", "qqq stock quote"); @@ -30,7 +31,7 @@ void test_make_url_with_space() { } @Test - void test_make_url_with_question_mark() { + void should_make_url_with_question_mark() { String path = "search"; Map params = new LinkedHashMap<>(); params.put("q", "LangChain4j?"); @@ -41,7 +42,7 @@ void test_make_url_with_question_mark() { } @Test - void test_makeUrl_with_space_and_question_mark() { + void should_make_url_with_space_and_question_mark() { String path = "search"; Map params = new LinkedHashMap<>(); params.put("q", "What is LangChain4j?");