/* * Copyright (C) 2012-2016 DuyHai DOAN * * 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 * * http://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 info.archinnov.achilles.it; import static java.util.stream.Collectors.toList; import static org.assertj.core.api.Assertions.assertThat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.TimeZone; import org.junit.Test; import com.datastax.driver.core.*; import info.archinnov.achilles.generated.ManagerFactoryBuilder_For_IT_DSE_4_8; import info.archinnov.achilles.generated.ManagerFactory_For_IT_DSE_4_8; import info.archinnov.achilles.generated.manager.EntityWithDSESearch_Manager; import info.archinnov.achilles.internals.entities.EntityWithDSESearch; import info.archinnov.achilles.script.ScriptExecutor; public class TestEntityWithDSESearch { private static Cluster cluster = Cluster .builder() .addContactPoint("127.0.0.1") .build(); private static ManagerFactory_For_IT_DSE_4_8 managerFactory = ManagerFactoryBuilder_For_IT_DSE_4_8 .builder(cluster) .doForceSchemaCreation(false) .withDefaultKeyspaceName("achilles_dse_it") .build(); private static EntityWithDSESearch_Manager manager = managerFactory.forEntityWithDSESearch(); private static ScriptExecutor scriptExecutor = new ScriptExecutor(manager.getNativeSession()); private static String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS'Z'"; static { scriptExecutor.executeScript("EntityWithDSESearch/insertRows.cql"); } @Test public void should_search_text_using_prefix() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .string().StartWith("speed") .getList(); //Then assertThat(actual).hasSize(2); assertThat(actual.stream().map(EntityWithDSESearch::getString).collect(toList())) .contains("speedster", "speedrun"); } @Test public void should_search_text_using_suffix() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .string().EndWith("run") .getList(); //Then assertThat(actual).hasSize(2); assertThat(actual.stream().map(EntityWithDSESearch::getString).collect(toList())) .contains("long run", "speedrun"); } @Test public void should_search_text_using_substring() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .string().Contains("eds") .getList(); //Then assertThat(actual).hasSize(1); assertThat(actual.stream().map(EntityWithDSESearch::getString).collect(toList())) .contains("speedster"); } @Test public void should_search_numeric_eq() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .numeric().Eq(100.03f) .getList(); //Then assertThat(actual).hasSize(1); assertThat(actual.get(0).getNumeric()).isEqualTo(100.03f); } @Test public void should_search_numeric_gt() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .numeric().Gt(100.03f) .getList(); //Then assertThat(actual).hasSize(1); assertThat(actual.get(0).getNumeric()).isEqualTo(138.47f); } @Test public void should_search_numeric_gte() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .numeric().Gte(138.47f) .getList(); //Then assertThat(actual).hasSize(1); assertThat(actual.get(0).getNumeric()).isEqualTo(138.47f); } @Test public void should_search_numeric_lt() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .numeric().Lt(100.03f) .getList(); //Then assertThat(actual).hasSize(1); assertThat(actual.get(0).getNumeric()).isEqualTo(87.39f); } @Test public void should_search_numeric_lte() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .numeric().Lte(87.39f) .getList(); //Then assertThat(actual).hasSize(1); assertThat(actual.get(0).getNumeric()).isEqualTo(87.39f); } @Test public void should_search_numeric_gt_and_lt() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .numeric().Gt_And_Lt(87.39f, 138.47f) .getList(); //Then assertThat(actual).hasSize(1); assertThat(actual.get(0).getNumeric()).isEqualTo(100.03f); } @Test public void should_search_numeric_gt_and_lte() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .numeric().Gt_And_Lte(87.39f, 138.47f) .getList(); //Then assertThat(actual).hasSize(2); assertThat(actual.stream().map(EntityWithDSESearch::getNumeric).collect(toList())) .contains(100.03f, 138.47f); } @Test public void should_search_numeric_gte_and_lt() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .numeric().Gte_And_Lt(87.39f, 138.47f) .getList(); //Then assertThat(actual).hasSize(2); assertThat(actual.stream().map(EntityWithDSESearch::getNumeric).collect(toList())) .contains(87.39f, 100.03f); } @Test public void should_search_numeric_gte_and_lte() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .numeric().Gte_And_Lte(87.39f, 138.47f) .getList(); //Then assertThat(actual).hasSize(3); assertThat(actual.stream().map(EntityWithDSESearch::getNumeric).collect(toList())) .contains(87.39f, 100.03f, 138.47f); } @Test public void should_search_date_eq() throws Exception { //Given final Date searchedDate = toDate("2016-09-26 08:00:00.000Z"); //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .date().Eq(searchedDate) .getList(); //Then assertThat(actual).hasSize(1); assertThat(toString(actual.get(0).getDate())).isEqualTo("2016-09-26 08:00:00.000Z"); } @Test public void should_search_date_gt() throws Exception { //Given final Date searchedDate = toDate("2016-09-26 08:00:00.000Z"); //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .date().Gt(searchedDate) .getList(); //Then assertThat(actual).hasSize(1); assertThat(toString(actual.get(0).getDate())).isEqualTo("2016-09-26 09:00:00.000Z"); } @Test public void should_search_date_gte() throws Exception { //Given final Date searchedDate = toDate("2016-09-26 08:00:00.000Z"); //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .date().Gte(searchedDate) .getList(); //Then assertThat(actual).hasSize(2); assertThat(actual.stream() .map(EntityWithDSESearch::getDate) .map(this::toString) .collect(toList())) .contains("2016-09-26 08:00:00.000Z", "2016-09-26 09:00:00.000Z"); } @Test public void should_search_date_lt() throws Exception { //Given final Date searchedDate = toDate("2016-09-26 08:00:00.000Z"); //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .date().Lt(searchedDate) .getList(); //Then assertThat(actual).hasSize(1); assertThat(toString(actual.get(0).getDate())).isEqualTo("2016-09-25 13:00:00.000Z"); } @Test public void should_search_date_lte() throws Exception { //Given final Date searchedDate = toDate("2016-09-26 08:00:00.000Z"); //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .date().Lte(searchedDate) .getList(); //Then assertThat(actual).hasSize(2); assertThat(actual.stream() .map(EntityWithDSESearch::getDate) .map(this::toString) .collect(toList())) .contains("2016-09-26 08:00:00.000Z", "2016-09-25 13:00:00.000Z"); } @Test public void should_search_date_gt_and_lt() throws Exception { //Given final Date searchedDate1 = toDate("2016-09-25 13:00:00.000Z"); final Date searchedDate2 = toDate("2016-09-26 09:00:00.000Z"); //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .date().Gt_And_Lt(searchedDate1, searchedDate2) .getList(); //Then assertThat(actual).hasSize(1); assertThat(actual.stream() .map(EntityWithDSESearch::getDate) .map(this::toString) .collect(toList())) .contains("2016-09-26 08:00:00.000Z"); } @Test public void should_search_date_gt_and_lte() throws Exception { //Given final Date searchedDate1 = toDate("2016-09-25 13:00:00.000Z"); final Date searchedDate2 = toDate("2016-09-26 09:00:00.000Z"); //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .date().Gt_And_Lte(searchedDate1, searchedDate2) .getList(); //Then assertThat(actual).hasSize(2); assertThat(actual.stream() .map(EntityWithDSESearch::getDate) .map(this::toString) .collect(toList())) .contains("2016-09-26 08:00:00.000Z", "2016-09-26 09:00:00.000Z"); } @Test public void should_search_date_gte_and_lt() throws Exception { //Given final Date searchedDate1 = toDate("2016-09-25 13:00:00.000Z"); final Date searchedDate2 = toDate("2016-09-26 09:00:00.000Z"); //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .date().Gte_And_Lt(searchedDate1, searchedDate2) .getList(); //Then assertThat(actual).hasSize(2); assertThat(actual.stream() .map(EntityWithDSESearch::getDate) .map(this::toString) .collect(toList())) .contains("2016-09-26 08:00:00.000Z", "2016-09-25 13:00:00.000Z"); } @Test public void should_search_date_gte_and_lte() throws Exception { //Given final Date searchedDate1 = toDate("2016-09-25 13:00:00.000Z"); final Date searchedDate2 = toDate("2016-09-26 09:00:00.000Z"); //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .date().Gte_And_Lte(searchedDate1, searchedDate2) .getList(); //Then assertThat(actual).hasSize(3); assertThat(actual.stream() .map(EntityWithDSESearch::getDate) .map(this::toString) .collect(toList())) .contains("2016-09-26 09:00:00.000Z", "2016-09-26 08:00:00.000Z", "2016-09-25 13:00:00.000Z"); } @Test public void should_search_using_multiple_predicates() throws Exception { //Given final Date searchedDate1 = toDate("2016-09-25 13:00:00.000Z"); final Date searchedDate2 = toDate("2016-09-26 09:00:00.000Z"); //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .date().Gte_And_Lte(searchedDate1, searchedDate2) .string().Contains("run") .numeric().Gt_And_Lte(80f, 110f) .getList(); //Then assertThat(actual).hasSize(1); assertThat(actual.get(0).getNumeric()).isEqualTo(87.39f); } @Test public void should_search_using_raw_predicates() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .string().RawPredicate("*eed?u*") .numeric().RawPredicate("{100 TO 150}") .getList(); //Then assertThat(actual).hasSize(1); assertThat(actual.get(0).getString()).isEqualTo("speedrun"); } @Test public void should_search_using_raw_solr_query() throws Exception { //Given //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .rawSolrQuery("string:*eed?u* OR numeric:[100 TO *]") .getList(); //Then assertThat(actual).hasSize(2); assertThat(actual.stream() .map(EntityWithDSESearch::getString) .collect(toList())) .contains("speedrun","speedster"); } @Test public void should_search_using_solr_and_partition() throws Exception { //Given final Date searchedDate1 = toDate("2016-09-25 13:00:00.000Z"); final Date searchedDate2 = toDate("2016-09-26 09:00:00.000Z"); //When final List<EntityWithDSESearch> actual = manager .indexed() .select() .allColumns_FromBaseTable() .where() .date().Gte_And_Lte(searchedDate1, searchedDate2) .string().Contains("run") .id().Eq(3L) .getList(); //Then assertThat(actual).hasSize(1); assertThat(actual.get(0).getNumeric()).isEqualTo(87.39f); } private Date toDate(String dateAsString) throws ParseException { return new SimpleDateFormat(DATE_FORMAT).parse(dateAsString); } private String toString(Date date) { final SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); return dateFormat.format(date); } }