diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4a68e42..fb7a376 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,18 +14,6 @@ jobs: strategy: matrix: java: ['8', '11', '17'] - services: - typesense: - image: typesense/typesense:28.0.rc36 - ports: - - 8108:8108/tcp - volumes: - - /tmp/typesense-server-data:/data - env: - TYPESENSE_DATA_DIR: '/data' - TYPESENSE_API_KEY: 'xyz' - TYPESENSE_ENABLE_CORS: true - TYPESENSE_URL: 'http://localhost:8108' name: Java ${{ matrix.Java }} steps: - name: Checkout sources diff --git a/build.gradle b/build.gradle index 9a00b2d..773579f 100644 --- a/build.gradle +++ b/build.gradle @@ -110,6 +110,8 @@ dependencies { testImplementation "org.mockito:mockito-core:${mokitoVerion}" testImplementation "org.mockito:mockito-junit-jupiter:${mokitoVerion}" testImplementation "org.hamcrest:hamcrest-all:${hamcrestVersion}" + testImplementation "org.testcontainers:junit-jupiter:${testcontainersVersion}" + testImplementation "org.testcontainers:typesense:${testcontainersVersion}" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}" integrationTestImplementation "org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}" diff --git a/gradle.properties b/gradle.properties index 5d3b2d4..9b7965d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,3 +11,4 @@ mokitoVerion=4.11.0 okhttp3Version=4.10.0 slf4jVersion=2.0.5 swaggerCoreV3Version=2.0.0 +testcontainersVersion=1.20.4 diff --git a/src/test/java/org/typesense/api/AliasesTest.java b/src/test/java/org/typesense/api/AliasesTest.java index b116cb7..23a87a2 100644 --- a/src/test/java/org/typesense/api/AliasesTest.java +++ b/src/test/java/org/typesense/api/AliasesTest.java @@ -5,19 +5,25 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.typesense.TypesenseContainer; import org.typesense.model.CollectionAlias; import org.typesense.model.CollectionAliasSchema; import org.typesense.model.CollectionAliasesResponse; +@Testcontainers class AliasesTest { + + @Container + static TypesenseContainer typesense = new TypesenseContainer(Helper.IMAGE); private Client client; private Helper helper; @BeforeEach void setUp() throws Exception { - helper = new Helper(); - helper.teardown(); + helper = new Helper(typesense); client = helper.getClient(); helper.createTestAlias(); } @@ -41,7 +47,7 @@ void testUpsertWithURLEncodedName() throws Exception { collectionAliasSchema.collectionName("books_june11"); CollectionAlias res = client.aliases().upsert("books1 ~!@#$%^&*()_++-=/'", collectionAliasSchema); - assertEquals(res.getName(), "books1 ~!@#$%^&*()_++-=/'"); + assertEquals("books1 ~!@#$%^&*()_++-=/'", res.getName()); System.out.println(res); } diff --git a/src/test/java/org/typesense/api/AnalyticsEventsTest.java b/src/test/java/org/typesense/api/AnalyticsEventsTest.java index 2f88002..b2c0d47 100644 --- a/src/test/java/org/typesense/api/AnalyticsEventsTest.java +++ b/src/test/java/org/typesense/api/AnalyticsEventsTest.java @@ -7,19 +7,25 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.typesense.TypesenseContainer; import org.typesense.model.AnalyticsEventCreateResponse; import org.typesense.model.AnalyticsEventCreateSchema; +@Testcontainers public class AnalyticsEventsTest { + @Container + static TypesenseContainer typesense = new TypesenseContainer(Helper.IMAGE); + private Client client; private Helper helper; @BeforeEach void setUp() throws Exception { - helper = new Helper(); + helper = new Helper(typesense); client = helper.getClient(); - helper.teardown(); helper.createTestCollection(); helper.createTestQueryCollection(); helper.createTestAnalyticsRule(); diff --git a/src/test/java/org/typesense/api/AnalyticsRulesTest.java b/src/test/java/org/typesense/api/AnalyticsRulesTest.java index 34f5dd2..00c706d 100644 --- a/src/test/java/org/typesense/api/AnalyticsRulesTest.java +++ b/src/test/java/org/typesense/api/AnalyticsRulesTest.java @@ -7,6 +7,9 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.typesense.TypesenseContainer; import org.typesense.model.AnalyticsRuleDeleteResponse; import org.typesense.model.AnalyticsRuleParameters; import org.typesense.model.AnalyticsRuleParametersDestination; @@ -15,16 +18,19 @@ import org.typesense.model.AnalyticsRuleUpsertSchema; import org.typesense.model.AnalyticsRulesRetrieveSchema; +@Testcontainers public class AnalyticsRulesTest { + @Container + static TypesenseContainer typesense = new TypesenseContainer(Helper.IMAGE); + private Client client; private Helper helper; @BeforeEach void setUp() throws Exception { - helper = new Helper(); + helper = new Helper(typesense); client = helper.getClient(); - helper.teardown(); helper.createTestCollection(); helper.createTestQueryCollection(); } diff --git a/src/test/java/org/typesense/api/CollectionsTest.java b/src/test/java/org/typesense/api/CollectionsTest.java index 24e7fed..9be3538 100644 --- a/src/test/java/org/typesense/api/CollectionsTest.java +++ b/src/test/java/org/typesense/api/CollectionsTest.java @@ -3,20 +3,25 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.typesense.TypesenseContainer; import org.typesense.model.*; import java.util.ArrayList; - +@Testcontainers class CollectionsTest { + @Container + static TypesenseContainer typesense = new TypesenseContainer(Helper.IMAGE); + Client client; private Helper helper; @BeforeEach void setUp() throws Exception { - helper = new Helper(); - helper.teardown(); + helper = new Helper(typesense); this.client = helper.getClient(); } diff --git a/src/test/java/org/typesense/api/DocumentsTest.java b/src/test/java/org/typesense/api/DocumentsTest.java index 4a51319..229054d 100644 --- a/src/test/java/org/typesense/api/DocumentsTest.java +++ b/src/test/java/org/typesense/api/DocumentsTest.java @@ -10,8 +10,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; + +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.typesense.TypesenseContainer; import org.typesense.api.exceptions.ObjectNotFound; import org.typesense.model.CollectionSchema; import org.typesense.model.DeleteDocumentsParameters; @@ -24,19 +29,27 @@ import org.typesense.model.SearchResult; import org.typesense.model.UpdateDocumentsParameters; +@Testcontainers class DocumentsTest { + @Container + static TypesenseContainer typesense = new TypesenseContainer(Helper.IMAGE); + Client client; private Helper helper; @BeforeEach void setUp() throws Exception { - helper = new Helper(); + helper = new Helper(typesense); this.client = helper.getClient(); - helper.teardown(); helper.createTestCollection(); } + @AfterEach + void tearDown() throws Exception { + helper.teardown(); + } + @Test void testRetrieveDocument() throws Exception { helper.createTestDocument(); diff --git a/src/test/java/org/typesense/api/HealthAndOperationsTest.java b/src/test/java/org/typesense/api/HealthAndOperationsTest.java index d7b14ec..2d119e5 100644 --- a/src/test/java/org/typesense/api/HealthAndOperationsTest.java +++ b/src/test/java/org/typesense/api/HealthAndOperationsTest.java @@ -3,18 +3,24 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.typesense.TypesenseContainer; import java.util.HashMap; +@Testcontainers class HealthAndOperationsTest { + @Container + static TypesenseContainer typesense = new TypesenseContainer(Helper.IMAGE); + private Client client; private Helper helper; @BeforeEach void setUp() throws Exception { - helper = new Helper(); - helper.teardown(); + helper = new Helper(typesense); client = helper.getClient(); } diff --git a/src/test/java/org/typesense/api/Helper.java b/src/test/java/org/typesense/api/Helper.java index 8943d39..b6fe6b6 100644 --- a/src/test/java/org/typesense/api/Helper.java +++ b/src/test/java/org/typesense/api/Helper.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.List; +import org.testcontainers.typesense.TypesenseContainer; import org.typesense.model.AnalyticsRuleParameters; import org.typesense.model.AnalyticsRuleParametersDestination; import org.typesense.model.AnalyticsRuleParametersSource; @@ -32,13 +33,16 @@ import org.typesense.resources.Node; public class Helper { + + final static String IMAGE = "typesense/typesense:27.0"; + private final Client client; - Helper() { + Helper(TypesenseContainer container) { List nodes = new ArrayList<>(); - nodes.add(new Node("http", "localhost", "8108")); + nodes.add(new Node("http", container.getHost(), container.getHttpPort())); - Configuration configuration = new Configuration(nodes, Duration.ofSeconds(3), "xyz"); + Configuration configuration = new Configuration(nodes, Duration.ofSeconds(3), container.getApiKey()); this.client = new Client(configuration); } diff --git a/src/test/java/org/typesense/api/KeysTest.java b/src/test/java/org/typesense/api/KeysTest.java index 8d60b60..6ca66c5 100644 --- a/src/test/java/org/typesense/api/KeysTest.java +++ b/src/test/java/org/typesense/api/KeysTest.java @@ -3,6 +3,9 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.typesense.TypesenseContainer; import org.typesense.model.ApiKey; import org.typesense.model.ApiKeySchema; @@ -10,8 +13,12 @@ import java.util.HashMap; import java.util.List; +@Testcontainers class KeysTest { + @Container + static TypesenseContainer typesense = new TypesenseContainer(Helper.IMAGE); + private Client client; private Helper helper; private String testKey; @@ -19,8 +26,7 @@ class KeysTest { @BeforeEach void setUp() throws Exception { - helper = new Helper(); - helper.teardown(); + helper = new Helper(typesense); client = helper.getClient(); ApiKey key = helper.createTestKey(); testKey = key.getValue(); diff --git a/src/test/java/org/typesense/api/MultiSearchTest.java b/src/test/java/org/typesense/api/MultiSearchTest.java index 9259cbe..20124ed 100644 --- a/src/test/java/org/typesense/api/MultiSearchTest.java +++ b/src/test/java/org/typesense/api/MultiSearchTest.java @@ -3,6 +3,9 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.typesense.TypesenseContainer; import org.typesense.model.CollectionSchema; import org.typesense.model.Field; import org.typesense.model.MultiSearchCollectionParameters; @@ -16,18 +19,20 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +@Testcontainers class MultiSearchTest { + @Container + static TypesenseContainer typesense = new TypesenseContainer(Helper.IMAGE); + private Client client; private Helper helper; @BeforeEach void setUp() throws Exception { - helper = new Helper(); + helper = new Helper(typesense); client = helper.getClient(); - helper.teardown(); - // create a collection with 2 fields: title and vec to store embeddings List fields = new ArrayList<>(); fields.add(new Field().name("title").type(FieldTypes.STRING)); diff --git a/src/test/java/org/typesense/api/OverridesTest.java b/src/test/java/org/typesense/api/OverridesTest.java index b034679..47761ba 100644 --- a/src/test/java/org/typesense/api/OverridesTest.java +++ b/src/test/java/org/typesense/api/OverridesTest.java @@ -3,6 +3,9 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.typesense.TypesenseContainer; import org.typesense.model.SearchOverrideExclude; import org.typesense.model.SearchOverrideInclude; import org.typesense.model.SearchOverrideRule; @@ -11,15 +14,18 @@ import java.util.ArrayList; import java.util.List; +@Testcontainers class OverridesTest { + @Container + static TypesenseContainer typesense = new TypesenseContainer(Helper.IMAGE); + private Client client; private Helper helper; @BeforeEach void setUp() throws Exception { - helper = new Helper(); - helper.teardown(); + helper = new Helper(typesense); client = helper.getClient(); helper.createTestCollection(); helper.createTestOverrirde(); diff --git a/src/test/java/org/typesense/api/StopwordsTest.java b/src/test/java/org/typesense/api/StopwordsTest.java index 91aeb27..d1b4e7a 100644 --- a/src/test/java/org/typesense/api/StopwordsTest.java +++ b/src/test/java/org/typesense/api/StopwordsTest.java @@ -8,21 +8,27 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.typesense.TypesenseContainer; import org.typesense.model.StopwordsSetRetrieveSchema; import org.typesense.model.StopwordsSetSchema; import org.typesense.model.StopwordsSetUpsertSchema; import org.typesense.model.StopwordsSetsRetrieveAllSchema; +@Testcontainers public class StopwordsTest { + @Container + static TypesenseContainer typesense = new TypesenseContainer(Helper.IMAGE); + private Client client; private Helper helper; @BeforeEach void setUp() throws Exception { - helper = new Helper(); + helper = new Helper(typesense); client = helper.getClient(); - helper.teardown(); helper.createTestCollection(); } diff --git a/src/test/java/org/typesense/api/SynonymsTest.java b/src/test/java/org/typesense/api/SynonymsTest.java index 57da150..d9c6add 100644 --- a/src/test/java/org/typesense/api/SynonymsTest.java +++ b/src/test/java/org/typesense/api/SynonymsTest.java @@ -3,18 +3,24 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.typesense.TypesenseContainer; import org.typesense.model.SearchSynonymSchema; +@Testcontainers class SynonymsTest { + @Container + static TypesenseContainer typesense = new TypesenseContainer(Helper.IMAGE); + private Client client; private Helper helper; @BeforeEach void setUp() throws Exception { - helper = new Helper(); + helper = new Helper(typesense); client = helper.getClient(); - helper.teardown(); helper.createTestCollection(); helper.createTestSynonym(); }