Skip to content

Commit 35a4f51

Browse files
eddumelendezmhalbritter
authored andcommitted
Generate test application when spring ai elasticsearch is selected
See gh-1578
1 parent f28bb3c commit 35a4f51

File tree

4 files changed

+37
-14
lines changed

4 files changed

+37
-14
lines changed

start-site/src/main/java/io/spring/start/site/extension/dependency/elasticsearch/ElasticsearchProjectGenerationConfiguration.java

+26-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2023 the original author or authors.
2+
* Copyright 2012-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
1616

1717
package io.spring.start.site.extension.dependency.elasticsearch;
1818

19+
import io.spring.initializr.generator.buildsystem.Build;
1920
import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency;
2021
import io.spring.start.site.container.ComposeFileCustomizer;
2122
import io.spring.start.site.container.DockerServiceResolver;
@@ -30,30 +31,43 @@
3031
*
3132
* @author Moritz Halbritter
3233
* @author Stephane Nicoll
34+
* @author Eddú Meléndez
3335
*/
3436
@Configuration(proxyBeanMethods = false)
35-
@ConditionalOnRequestedDependency("data-elasticsearch")
3637
class ElasticsearchProjectGenerationConfiguration {
3738

3839
private static final String TESTCONTAINERS_CLASS_NAME = "org.testcontainers.elasticsearch.ElasticsearchContainer";
3940

4041
@Bean
4142
@ConditionalOnRequestedDependency("testcontainers")
42-
ServiceConnectionsCustomizer elasticsearchServiceConnectionsCustomizer(DockerServiceResolver serviceResolver) {
43-
return (serviceConnections) -> serviceResolver.doWith("elasticsearch",
44-
(service) -> serviceConnections.addServiceConnection(
43+
ServiceConnectionsCustomizer elasticsearchServiceConnectionsCustomizer(Build build,
44+
DockerServiceResolver serviceResolver) {
45+
return (serviceConnections) -> {
46+
if (isElasticsearchEnabled(build)) {
47+
serviceResolver.doWith("elasticsearch", (service) -> serviceConnections.addServiceConnection(
4548
ServiceConnection.ofContainer("elasticsearch", service, TESTCONTAINERS_CLASS_NAME, false)));
49+
}
50+
};
4651
}
4752

4853
@Bean
4954
@ConditionalOnRequestedDependency("docker-compose")
50-
ComposeFileCustomizer elasticsearchComposeFileCustomizer(DockerServiceResolver serviceResolver) {
51-
return (composeFile) -> serviceResolver.doWith("elasticsearch",
52-
(service) -> composeFile.services()
53-
.add("elasticsearch",
54-
service.andThen((builder) -> builder.environment("ELASTIC_PASSWORD", "secret")
55-
.environment("xpack.security.enabled", "false")
56-
.environment("discovery.type", "single-node"))));
55+
ComposeFileCustomizer elasticsearchComposeFileCustomizer(Build build, DockerServiceResolver serviceResolver) {
56+
return (composeFile) -> {
57+
if (isElasticsearchEnabled(build)) {
58+
serviceResolver.doWith("elasticsearch",
59+
(service) -> composeFile.services()
60+
.add("elasticsearch",
61+
service.andThen((builder) -> builder.environment("ELASTIC_PASSWORD", "secret")
62+
.environment("xpack.security.enabled", "false")
63+
.environment("discovery.type", "single-node"))));
64+
}
65+
};
66+
}
67+
68+
private boolean isElasticsearchEnabled(Build build) {
69+
return build.dependencies().has("data-elasticsearch")
70+
|| build.dependencies().has("spring-ai-vectordb-elasticsearch");
5771
}
5872

5973
}

start-site/src/main/java/io/spring/start/site/extension/dependency/testcontainers/TestcontainersModuleRegistry.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ static Iterable<ImplicitDependency> create(Version platformVersion) {
6262
.customizeHelpDocument(addReferenceLink("Cassandra Module", "databases/cassandra/")));
6363
builders.add(onDependencies("data-couchbase", "data-couchbase-reactive").customizeBuild(addModule("couchbase"))
6464
.customizeHelpDocument(addReferenceLink("Couchbase Module", "databases/couchbase/")));
65-
builders.add(onDependencies("data-elasticsearch").customizeBuild(addModule("elasticsearch"))
65+
builders.add(onDependencies("data-elasticsearch", "spring-ai-vectordb-elasticsearch")
66+
.customizeBuild(addModule("elasticsearch"))
6667
.customizeHelpDocument(addReferenceLink("Elasticsearch Container", "elasticsearch/")));
6768
builders.add(onDependencies("data-mongodb", "data-mongodb-reactive").customizeBuild(addModule("mongodb"))
6869
.customizeHelpDocument(addReferenceLink("MongoDB Module", "databases/mongodb/")));

start-site/src/test/java/io/spring/start/site/extension/dependency/elasticsearch/ElasticsearchProjectGenerationConfigurationTests.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2023 the original author or authors.
2+
* Copyright 2012-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -29,6 +29,7 @@
2929
* Tests for {@link ElasticsearchProjectGenerationConfiguration}.
3030
*
3131
* @author Moritz Halbritter
32+
* @author Eddú Meléndez
3233
*/
3334
class ElasticsearchProjectGenerationConfigurationTests extends AbstractExtensionTests {
3435

@@ -45,4 +46,10 @@ void createsElasticsearchService() {
4546
assertThat(composeFile(request)).hasSameContentAs(new ClassPathResource("compose/elasticsearch.yaml"));
4647
}
4748

49+
@Test
50+
void createsElasticsearchServiceWhenSpringAiModuleIsSelected() {
51+
ProjectRequest request = createProjectRequest("docker-compose", "spring-ai-vectordb-elasticsearch");
52+
assertThat(composeFile(request)).hasSameContentAs(new ClassPathResource("compose/elasticsearch.yaml"));
53+
}
54+
4855
}

start-site/src/test/java/io/spring/start/site/extension/dependency/testcontainers/TestcontainersProjectGenerationConfigurationTests.java

+1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ static Stream<Arguments> supportedEntriesBuild320() {
8686
Arguments.arguments("mysql", "mysql"), Arguments.arguments("postgresql", "postgresql"),
8787
Arguments.arguments("oracle", "oracle-free"), Arguments.arguments("pulsar", "pulsar"),
8888
Arguments.arguments("pulsar-reactive", "pulsar"), Arguments.arguments("solace", "solace"),
89+
Arguments.arguments("spring-ai-vectordb-elasticsearch", "elasticsearch"),
8990
Arguments.arguments("spring-ai-vectordb-neo4j", "neo4j"),
9091
Arguments.arguments("spring-ai-vectordb-oracle", "oracle-free"),
9192
Arguments.arguments("spring-ai-vectordb-pgvector", "postgresql"),

0 commit comments

Comments
 (0)