package pl.edu.icm.saos.search.search.service;
import static org.junit.Assert.assertEquals;
import org.joda.time.LocalDate;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import pl.edu.icm.saos.persistence.model.CommonCourt.CommonCourtType;
import pl.edu.icm.saos.persistence.model.CourtType;
import pl.edu.icm.saos.persistence.model.Judgment.JudgmentType;
import pl.edu.icm.saos.persistence.model.SupremeCourtJudgment.PersonnelType;
import pl.edu.icm.saos.search.config.model.JudgmentIndexField;
import pl.edu.icm.saos.search.search.model.JudgmentCriteria;
import com.tngtech.java.junit.dataprovider.DataProvider;
import com.tngtech.java.junit.dataprovider.DataProviderRunner;
import com.tngtech.java.junit.dataprovider.UseDataProvider;
/**
* @author madryk
*/
@RunWith(DataProviderRunner.class)
public class JudgmentCriteriaTransformerTest {
private final static LocalDate FIRST_DATE = new LocalDate(2014, 4, 1);
private final static LocalDate SECOND_DATE = new LocalDate(2014, 6, 1);
private JudgmentCriteriaTransformer queryFactory = new JudgmentCriteriaTransformer();
private SolrCriterionTransformer<JudgmentIndexField> criterionTransformer = new SolrCriterionTransformer<JudgmentIndexField>();
@Before
public void setUp() {
queryFactory.setCriterionTransformer(criterionTransformer);
}
@DataProvider
public static Object[][] criterionData() {
return new Object[][] {
{ "+all:word", new JudgmentCriteria("word") },
{ "+(all:word1 all:word2)", new JudgmentCriteria("word1 or word2") },
{ "*:*", new JudgmentCriteria(" ") },
{ "+judgeName:Nowak", JudgmentCriteriaBuilder.create().withJudgeName("Nowak").build() },
{ "+judgeName:Adam +judgeName:Nowak", JudgmentCriteriaBuilder.create().withJudgeName("Adam Nowak").build() },
{ "+judgeName:\"Adam Nowak\"", JudgmentCriteriaBuilder.create().withJudgeName("\"Adam Nowak\"").build() },
{ "+(judgeName:Nowak judgeName:Kowalski)", JudgmentCriteriaBuilder.create().withJudgeName("Nowak or Kowalski").build() },
{ "+keyword:word", JudgmentCriteriaBuilder.create().withKeyword("word").build() },
{ "+keyword:word1 +keyword:word2", JudgmentCriteriaBuilder.create().withKeyword("word1").withKeyword("word2").build() },
{ "+legalBases:someLegalBase", JudgmentCriteriaBuilder.create().withLegalBase("someLegalBase").build() },
{ "+legalBases:\"some legal base\"", JudgmentCriteriaBuilder.create().withLegalBase("\"some legal base\"").build() },
{ "+referencedRegulations:someReferencedRegulation", JudgmentCriteriaBuilder.create().withReferencedRegulation("someReferencedRegulation").build() },
{ "+referencedRegulations:\"some referenced regulation\"", JudgmentCriteriaBuilder.create().withReferencedRegulation("\"some referenced regulation\"").build() },
{ "+lawJournalEntryId:41", JudgmentCriteriaBuilder.create().withLawJournalEntryId(41).build() },
{ "+lawJournalEntryCode:1964\\/43\\/296", JudgmentCriteriaBuilder.create().withLawJournalEntryCode("1964/43/296").build() },
{ "+referencedCourtCasesIds:21", JudgmentCriteriaBuilder.create().withReferencedCourtCaseId(21L).build() },
{ "+judgmentDate:[2014-04-01T00:00:00Z TO *]", JudgmentCriteriaBuilder.create().withDateFrom(FIRST_DATE).build() },
{ "+judgmentDate:[* TO 2014-04-01T23:59:59Z]", JudgmentCriteriaBuilder.create().withDateTo(FIRST_DATE).build() },
{ "+judgmentDate:[2014-04-01T00:00:00Z TO 2014-06-01T23:59:59Z]", JudgmentCriteriaBuilder.create().withDateRange(FIRST_DATE, SECOND_DATE).build() },
{ "+caseNumber:ZXC1", JudgmentCriteriaBuilder.create().withCaseNumber("ZXC1").build() },
{ "+judgmentType:DECISION", JudgmentCriteriaBuilder.create().withJudgmentType(JudgmentType.DECISION).build() },
{ "+(judgmentType:DECISION judgmentType:SENTENCE)", JudgmentCriteriaBuilder.create()
.withJudgmentType(JudgmentType.DECISION).withJudgmentType(JudgmentType.SENTENCE).build() },
{ "+courtType:ADMINISTRATIVE", JudgmentCriteriaBuilder.create().withCourtType(CourtType.ADMINISTRATIVE).build() },
{ "+ccCourtType:DISTRICT", JudgmentCriteriaBuilder.create().withCcCourtType(CommonCourtType.DISTRICT).build() },
{ "+ccCourtId:11", JudgmentCriteriaBuilder.create().withCcCourtId(11).build() },
{ "+ccCourtCode:0050", JudgmentCriteriaBuilder.create().withCcCourtCode("0050").build() },
{ "+ccCourtName:someCourtName", JudgmentCriteriaBuilder.create().withCcCourtName("someCourtName").build() },
{ "+scCourtChamberId:12", JudgmentCriteriaBuilder.create().withScChamberId(12).build() },
{ "+scCourtChamberName:someChamberName", JudgmentCriteriaBuilder.create().withScChamberName("someChamberName").build() },
{ "+scCourtChamberDivisionId:13", JudgmentCriteriaBuilder.create().withScChamberDivisionId(13).build() },
{ "+scCourtChamberDivisionName:someChamberDivisionName", JudgmentCriteriaBuilder.create().withScChamberDivisionName("someChamberDivisionName").build() },
{ "+scPersonnelType:THREE_PERSON", JudgmentCriteriaBuilder.create().withScPersonnelType(PersonnelType.THREE_PERSON).build() },
{ "+scJudgmentFormId:56", JudgmentCriteriaBuilder.create().withScJudgmentFormId(56L).build() },
{ "+scJudgmentFormName:judgmentFormName", JudgmentCriteriaBuilder.create().withScJudgmentFormName("judgmentFormName").build() },
{ "+ccCourtDivisionId:14", JudgmentCriteriaBuilder.create().withCcDivisionId(14).build() },
{ "+ccCourtDivisionCode:0100", JudgmentCriteriaBuilder.create().withCcDivisionCode("0100").build() },
{ "+ccCourtDivisionName:someDivisionName", JudgmentCriteriaBuilder.create().withCcDivisionName("someDivisionName").build() },
{ "+ctDissentingOpinion:someOpinion", JudgmentCriteriaBuilder.create().withCtDissentingOpinion("someOpinion").build() },
{ "+ctDissentingOpinion:\"some opinion\"", JudgmentCriteriaBuilder.create().withCtDissentingOpinion("\"some opinion\"").build() },
{ "+ctDissentingOpinionAuthor:someAuthor", JudgmentCriteriaBuilder.create().withCtDissentingOpinionAuthor("someAuthor").build() },
{ "+(ctDissentingOpinionAuthor:author1 ctDissentingOpinionAuthor:author2)", JudgmentCriteriaBuilder.create().withCtDissentingOpinionAuthor("author1 or author2").build() },
{ "+(ccAppealCourtId:12 ccRegionalCourtId:12 ccDistrictCourtId:12)", JudgmentCriteriaBuilder.create().withCcDirectOrSuperiorCourtId(12L).build() },
};
}
//------------------------ LOGIC --------------------------
@Test
@UseDataProvider("criterionData")
public void transformCriteria(String expectedQuery, JudgmentCriteria criteria) {
String actualQuery = queryFactory.transformCriteria(criteria);
assertEquals(expectedQuery, actualQuery);
}
@Test
public void transformCriteria_TWO_CRITERIA() {
JudgmentCriteria criteria = new JudgmentCriteria();
criteria.setCcCourtName("word1");
criteria.setJudgeName("word2");
String solrQuery = queryFactory.transformCriteria(criteria);
assertEquals("+ccCourtName:word1 +judgeName:word2", solrQuery);
}
}