/*
* Copyright 2016 Studentmediene i Trondheim AS
*
* 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 no.dusken.momus.service.search;
import no.dusken.momus.test.AbstractTestRunner;
import org.junit.Test;
import java.util.*;
import static org.junit.Assert.assertEquals;
public class ArticleQueryBuilderTest extends AbstractTestRunner {
List<Long> emptyList = Collections.emptyList();
@Test
public void testEmptyQuery() {
ArticleSearchParams params = new ArticleSearchParams("", null, emptyList,null, null, null, 0, 0, false);
ArticleQueryBuilder builder = new ArticleQueryBuilder(params);
String expectedQuery = builder.getBaseQuery() + " where a.archived = :arch " + builder.getBaseOrder();
assertEquals(expectedQuery.toLowerCase(), builder.getFullQuery().toLowerCase());
assertEquals(1, builder.getQueryParams().size());
}
@Test
public void testNullQuery() {
ArticleSearchParams params = new ArticleSearchParams(null, null, null,null, null, null, 0, 0, false);
ArticleQueryBuilder builder = new ArticleQueryBuilder(params);
String expectedQuery = builder.getBaseQuery() + " where a.archived = :arch " + builder.getBaseOrder();
assertEquals(expectedQuery.toLowerCase(), builder.getFullQuery().toLowerCase());
assertEquals(1, builder.getQueryParams().size());
}
@Test
public void testTextQuery() {
ArticleSearchParams params = new ArticleSearchParams("fInn meg", null, emptyList, null,null, null, 0, 0, false);
ArticleQueryBuilder builder = new ArticleQueryBuilder(params);
String expectedQuery = builder.getBaseQuery() + " where a.rawcontent like :free0 and a.rawcontent like :free1 and a.archived = :arch " + builder.getBaseOrder();
Map<String, Object> expectedMap = new HashMap<>();
expectedMap.put("free0", "%finn%");
expectedMap.put("free1", "%meg%");
expectedMap.put("arch", false);
assertEquals(expectedQuery.toLowerCase(), builder.getFullQuery().toLowerCase());
assertEquals(expectedMap, builder.getQueryParams());
}
@Test
public void testStatusQuery() {
ArticleSearchParams params = new ArticleSearchParams("", 1L, emptyList, null,null, null, 0, 0, false);
ArticleQueryBuilder builder = new ArticleQueryBuilder(params);
String expectedQuery = builder.getBaseQuery() + " where a.status.id = :statusid and a.archived = :arch " + builder.getBaseOrder();
Map<String, Object> expectedMap = new HashMap<>();
expectedMap.put("statusid", 1L);
expectedMap.put("arch", false);
assertEquals(expectedQuery.toLowerCase(), builder.getFullQuery().toLowerCase());
assertEquals(expectedMap, builder.getQueryParams());
}
@Test
public void testPersonQuery() {
ArticleSearchParams params = new ArticleSearchParams("", null, Arrays.asList(594L, 1337L),null, null, null, 0, 0, false);
ArticleQueryBuilder builder = new ArticleQueryBuilder(params);
String expectedQuery = builder.getBaseQuery() + " where ( " +
":personid0 member of a.journalists or " +
":personid0 member of a.photographers ) and ( " +
":personid1 member of a.journalists or " +
":personid1 member of a.photographers ) " +
"and a.archived = :arch " + builder.getBaseOrder();
Map<String, Object> expectedMap = new HashMap<>();
expectedMap.put("personid0", 594L);
expectedMap.put("personid1", 1337L);
expectedMap.put("arch", false);
assertEquals(expectedQuery.toLowerCase(), builder.getFullQuery().toLowerCase());
assertEquals(expectedMap, builder.getQueryParams());
}
@Test
public void testSectionQuery() {
ArticleSearchParams params = new ArticleSearchParams("", null, emptyList, null,31337L, null, 0, 0, false);
ArticleQueryBuilder builder = new ArticleQueryBuilder(params);
String expectedQuery = builder.getBaseQuery() + " where a.section.id = :secid and a.archived = :arch " + builder.getBaseOrder();
Map<String, Object> expectedMap = new HashMap<>();
expectedMap.put("secid", 31337L);
expectedMap.put("arch", false);
assertEquals(expectedQuery.toLowerCase(), builder.getFullQuery().toLowerCase());
assertEquals(expectedMap, builder.getQueryParams());
}
@Test
public void testPublicationQuery() {
ArticleSearchParams params = new ArticleSearchParams("", null, emptyList,null, null, 2L, 0, 0, false);
ArticleQueryBuilder builder = new ArticleQueryBuilder(params);
String expectedQuery = builder.getBaseQuery() + " where a.publication.id = :pubid and a.archived = :arch " + builder.getBaseOrder();
Map<String, Object> expectedMap = new HashMap<>();
expectedMap.put("pubid", 2L);
expectedMap.put("arch", false);
assertEquals(expectedQuery.toLowerCase(), builder.getFullQuery().toLowerCase());
assertEquals(expectedMap, builder.getQueryParams());
}
@Test
public void testReviewQuery() {
ArticleSearchParams params = new ArticleSearchParams("", null, emptyList, 1L,null, null, 0, 0, false);
ArticleQueryBuilder builder = new ArticleQueryBuilder(params);
String expectedQuery = builder.getBaseQuery() + " where a.review.id = :reviewid and a.archived = :arch " + builder.getBaseOrder();
Map<String, Object> expectedMap = new HashMap<>();
expectedMap.put("reviewid", 1L);
expectedMap.put("arch", false);
assertEquals(expectedQuery.toLowerCase(), builder.getFullQuery().toLowerCase());
assertEquals(expectedMap, builder.getQueryParams());
}
@Test
public void testCombinedQuery() {
ArticleSearchParams params = new ArticleSearchParams("kombinert test", 1L, Arrays.asList(594L, 1337L),null, 31337L, 2L, 0, 0, true);
ArticleQueryBuilder builder = new ArticleQueryBuilder(params);
String expectedQuery = builder.getBaseQuery() + " where " +
"a.rawcontent like :free0 and " +
"a.rawcontent like :free1 and " +
"a.status.id = :statusid and ( " +
":personid0 member of a.journalists or " +
":personid0 member of a.photographers ) and ( " +
":personid1 member of a.journalists or " +
":personid1 member of a.photographers ) and " +
"a.section.id = :secid and " +
"a.publication.id = :pubid and " +
"a.archived = :arch " + builder.getBaseOrder();
Map<String, Object> expectedMap = new HashMap<>();
expectedMap.put("free0", "%kombinert%");
expectedMap.put("free1", "%test%");
expectedMap.put("statusid", 1L);
expectedMap.put("personid0", 594L);
expectedMap.put("personid1", 1337L);
expectedMap.put("secid", 31337L);
expectedMap.put("pubid", 2L);
expectedMap.put("arch", true);
assertEquals(expectedQuery.toLowerCase(), builder.getFullQuery().toLowerCase());
assertEquals(expectedMap, builder.getQueryParams());
}
}