diff --git a/src/test/java/org/springframework/data/couchbase/domain/FluxTest.java b/src/test/java/org/springframework/data/couchbase/domain/FluxTestIntegrationTests.java similarity index 88% rename from src/test/java/org/springframework/data/couchbase/domain/FluxTest.java rename to src/test/java/org/springframework/data/couchbase/domain/FluxTestIntegrationTests.java index f6ca822a..4d2cd5be 100644 --- a/src/test/java/org/springframework/data/couchbase/domain/FluxTest.java +++ b/src/test/java/org/springframework/data/couchbase/domain/FluxTestIntegrationTests.java @@ -1,3 +1,19 @@ +/* + * Copyright 2012-2022 the original author or authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * 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 org.springframework.data.couchbase.domain; import com.couchbase.client.java.query.QueryOptions; @@ -40,12 +56,17 @@ import com.couchbase.client.java.Collection; import com.couchbase.client.java.ReactiveCollection; import com.couchbase.client.java.json.JsonObject; import com.couchbase.client.java.kv.GetResult; +import com.couchbase.client.java.query.QueryOptions; +import com.couchbase.client.java.query.QueryProfile; +import com.couchbase.client.java.query.QueryResult; +import com.couchbase.client.java.query.QueryScanConsistency; -import static org.junit.jupiter.api.Assertions.assertEquals; - -@SpringJUnitConfig(FluxTest.Config.class) +/** + * @author Michael Reiche + */ +@SpringJUnitConfig(FluxTestIntegrationTests.Config.class) @IgnoreWhen(clusterTypes = ClusterType.MOCKED) -public class FluxTest extends JavaIntegrationTests { +public class FluxTestIntegrationTests extends JavaIntegrationTests { @BeforeAll public static void beforeEverything() { @@ -53,7 +74,7 @@ public class FluxTest extends JavaIntegrationTests { * The couchbaseTemplate inherited from JavaIntegrationTests uses org.springframework.data.couchbase.domain.Config * It has typeName = 't' (instead of _class). Don't use it. */ - ApplicationContext ac = new AnnotationConfigApplicationContext(FluxTest.Config.class); + ApplicationContext ac = new AnnotationConfigApplicationContext(FluxTestIntegrationTests.Config.class); couchbaseTemplate = (CouchbaseTemplate) ac.getBean(BeanNames.COUCHBASE_TEMPLATE); reactiveCouchbaseTemplate = (ReactiveCouchbaseTemplate) ac.getBean(BeanNames.REACTIVE_COUCHBASE_TEMPLATE); collection = couchbaseTemplate.getCouchbaseClientFactory().getBucket().defaultCollection(); @@ -127,7 +148,9 @@ public class FluxTest extends JavaIntegrationTests { throw e; } List airports = airportRepository.findAll().collectList().block(); - assertEquals(0, airports.size(), "should have been all deleted"); + if (airports.size() != 0){ + throw new RuntimeException("should have been all deleted"); + } } @Test diff --git a/src/test/java/org/springframework/data/couchbase/repository/query/StringN1qlQueryCreatorTests.java b/src/test/java/org/springframework/data/couchbase/repository/query/StringN1qlQueryCreatorIntegrationTests.java similarity index 64% rename from src/test/java/org/springframework/data/couchbase/repository/query/StringN1qlQueryCreatorTests.java rename to src/test/java/org/springframework/data/couchbase/repository/query/StringN1qlQueryCreatorIntegrationTests.java index bf611098..e2d75ef2 100644 --- a/src/test/java/org/springframework/data/couchbase/repository/query/StringN1qlQueryCreatorTests.java +++ b/src/test/java/org/springframework/data/couchbase/repository/query/StringN1qlQueryCreatorIntegrationTests.java @@ -39,6 +39,8 @@ import org.springframework.data.couchbase.core.mapping.CouchbasePersistentProper import org.springframework.data.couchbase.core.query.Query; import org.springframework.data.couchbase.domain.Airline; import org.springframework.data.couchbase.domain.AirlineRepository; +import org.springframework.data.couchbase.domain.User; +import org.springframework.data.couchbase.domain.UserRepository; import org.springframework.data.couchbase.repository.config.EnableCouchbaseRepositories; import org.springframework.data.couchbase.util.Capabilities; import org.springframework.data.couchbase.util.ClusterAwareIntegrationTests; @@ -61,9 +63,9 @@ import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; * @author Michael Nitschinger * @author Michael Reiche */ -@SpringJUnitConfig(StringN1qlQueryCreatorTests.Config.class) +@SpringJUnitConfig(StringN1qlQueryCreatorIntegrationTests.Config.class) @IgnoreWhen(clusterTypes = ClusterType.MOCKED) -class StringN1qlQueryCreatorTests extends ClusterAwareIntegrationTests { +class StringN1qlQueryCreatorIntegrationTests extends ClusterAwareIntegrationTests { MappingContext, CouchbasePersistentProperty> context; CouchbaseConverter converter; @@ -114,6 +116,68 @@ class StringN1qlQueryCreatorTests extends ClusterAwareIntegrationTests { } } + + @Test + void createsQueryCorrectly() throws Exception { + String input = "getByFirstnameAndLastname"; + Method method = UserRepository.class.getMethod(input, String.class, String.class); + + CouchbaseQueryMethod queryMethod = new CouchbaseQueryMethod(method, + new DefaultRepositoryMetadata(UserRepository.class), new SpelAwareProxyProjectionFactory(), + converter.getMappingContext()); + + StringN1qlQueryCreator creator = new StringN1qlQueryCreator(getAccessor(getParameters(method), "Oliver", "Twist"), + queryMethod, converter, config().bucketname(), new SpelExpressionParser(), QueryMethodEvaluationContextProvider.DEFAULT, namedQueries); + + Query query = creator.createQuery(); + assertEquals( + "SELECT `_class`, META(`" + bucketName() + + "`).`cas` AS __cas, `createdBy`, `createdDate`, `lastModifiedBy`, `lastModifiedDate`, META(`" + + bucketName() + "`).`id` AS __id, `firstname`, `lastname`, `subtype` FROM `" + bucketName() + + "` where `_class` = \"abstractuser\" and firstname = $1 and lastname = $2", + query.toN1qlSelectString(couchbaseTemplate.reactive(), config().bucketname(), User.class, false)); + } + + @Test + void createsQueryCorrectly2() throws Exception { + String input = "getByFirstnameOrLastname"; + Method method = UserRepository.class.getMethod(input, String.class, String.class); + + CouchbaseQueryMethod queryMethod = new CouchbaseQueryMethod(method, + new DefaultRepositoryMetadata(UserRepository.class), new SpelAwareProxyProjectionFactory(), + converter.getMappingContext()); + + StringN1qlQueryCreator creator = new StringN1qlQueryCreator(getAccessor(getParameters(method), "Oliver", "Twist"), + queryMethod, converter, config().bucketname(), new SpelExpressionParser(), QueryMethodEvaluationContextProvider.DEFAULT, namedQueries); + + Query query = creator.createQuery(); + assertEquals( + "SELECT `_class`, META(`" + bucketName() + + "`).`cas` AS __cas, `createdBy`, `createdDate`, `lastModifiedBy`, `lastModifiedDate`, META(`" + + bucketName() + "`).`id` AS __id, `firstname`, `lastname`, `subtype` FROM `" + bucketName() + + "` where `_class` = \"abstractuser\" and (firstname = $first or lastname = $last)", + query.toN1qlSelectString(couchbaseTemplate.reactive(), config().bucketname(), User.class, false)); + } + + @Test + void spelTests() throws Exception { + String input = "spelTests"; + Method method = UserRepository.class.getMethod(input); + CouchbaseQueryMethod queryMethod = new CouchbaseQueryMethod(method, + new DefaultRepositoryMetadata(UserRepository.class), new SpelAwareProxyProjectionFactory(), + converter.getMappingContext()); + + StringN1qlQueryCreator creator = new StringN1qlQueryCreator(getAccessor(getParameters(method)), queryMethod, + converter, config().bucketname(), new SpelExpressionParser(), QueryMethodEvaluationContextProvider.DEFAULT, namedQueries); + + Query query = creator.createQuery(); + + String s = query.toN1qlSelectString(couchbaseTemplate.reactive(), "myCollection", User.class, + false ); + System.out.println("query: " + s); + + } + private ParameterAccessor getAccessor(Parameters params, Object... values) { return new ParametersParameterAccessor(params, values); } diff --git a/src/test/java/org/springframework/data/couchbase/repository/query/StringN1qlQueryCreatorMockedTests.java b/src/test/java/org/springframework/data/couchbase/repository/query/StringN1qlQueryCreatorMockedTests.java index a0de49fe..cec93ba3 100644 --- a/src/test/java/org/springframework/data/couchbase/repository/query/StringN1qlQueryCreatorMockedTests.java +++ b/src/test/java/org/springframework/data/couchbase/repository/query/StringN1qlQueryCreatorMockedTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 the original author or authors. + * Copyright 2017-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,57 +55,16 @@ import org.springframework.expression.spel.standard.SpelExpressionParser; * @author Michael Nitschinger * @author Michael Reiche */ -class StringN1qlQueryCreatorMockedTests extends ClusterAwareIntegrationTests { +class StringN1qlQueryCreatorMockedTests { MappingContext, CouchbasePersistentProperty> context; CouchbaseConverter converter; - CouchbaseTemplate couchbaseTemplate; static NamedQueries namedQueries = new PropertiesBasedNamedQueries(new Properties()); @BeforeEach public void beforeEach() { context = new CouchbaseMappingContext(); converter = new MappingCouchbaseConverter(context); - ApplicationContext ac = new AnnotationConfigApplicationContext(Config.class); - couchbaseTemplate = (CouchbaseTemplate) ac.getBean(COUCHBASE_TEMPLATE); - } - - @Test - void createsQueryCorrectly() throws Exception { - String input = "getByFirstnameAndLastname"; - Method method = UserRepository.class.getMethod(input, String.class, String.class); - - CouchbaseQueryMethod queryMethod = new CouchbaseQueryMethod(method, - new DefaultRepositoryMetadata(UserRepository.class), new SpelAwareProxyProjectionFactory(), - converter.getMappingContext()); - - StringN1qlQueryCreator creator = new StringN1qlQueryCreator(getAccessor(getParameters(method), "Oliver", "Twist"), - queryMethod, converter, "travel-sample", new SpelExpressionParser(), - QueryMethodEvaluationContextProvider.DEFAULT, namedQueries); - - Query query = creator.createQuery(); - assertEquals( - "SELECT META(`travel-sample`).id AS __id, META(`travel-sample`).cas AS __cas, `travel-sample`.* FROM `travel-sample` where `_class` = \"org.springframework.data.couchbase.domain.User\" and firstname = $1 and lastname = $2", - query.toN1qlSelectString(couchbaseTemplate.reactive(), User.class, false)); - } - - @Test - void createsQueryCorrectly2() throws Exception { - String input = "getByFirstnameOrLastname"; - Method method = UserRepository.class.getMethod(input, String.class, String.class); - - CouchbaseQueryMethod queryMethod = new CouchbaseQueryMethod(method, - new DefaultRepositoryMetadata(UserRepository.class), new SpelAwareProxyProjectionFactory(), - converter.getMappingContext()); - - StringN1qlQueryCreator creator = new StringN1qlQueryCreator(getAccessor(getParameters(method), "Oliver", "Twist"), - queryMethod, converter, "travel-sample", new SpelExpressionParser(), - QueryMethodEvaluationContextProvider.DEFAULT, namedQueries); - - Query query = creator.createQuery(); - assertEquals( - "SELECT META(`travel-sample`).id AS __id, META(`travel-sample`).cas AS __cas, `travel-sample`.* FROM `travel-sample` where `_class` = \"org.springframework.data.couchbase.domain.User\" and (firstname = $first or lastname = $last)", - query.toN1qlSelectString(couchbaseTemplate.reactive(), User.class, false)); } @Test @@ -153,29 +112,4 @@ class StringN1qlQueryCreatorMockedTests extends ClusterAwareIntegrationTests { return new DefaultParameters(method); } - @Configuration - @EnableCouchbaseRepositories("org.springframework.data.couchbase") - static class Config extends AbstractCouchbaseConfiguration { - - @Override - public String getConnectionString() { - return connectionString(); - } - - @Override - public String getUserName() { - return config().adminUsername(); - } - - @Override - public String getPassword() { - return config().adminPassword(); - } - - @Override - public String getBucketName() { - return bucketName(); - } - - } }