package pl.edu.icm.saos.search.search.service;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.solr.common.SolrDocument;
import org.joda.time.LocalDate;
import org.junit.Test;
import pl.edu.icm.saos.persistence.model.Judge.JudgeRole;
import pl.edu.icm.saos.search.config.model.JudgmentIndexField;
/**
* @author madryk
*/
public class SolrFieldFetcherTest {
private SolrFieldFetcher<JudgmentIndexField> fieldFetcher = new SolrFieldFetcher<JudgmentIndexField>();
//------------------------ TESTS --------------------------
@Test
public void fetchValue() {
// given
SolrDocument doc = new SolrDocument();
doc.addField("judge", "Jan Kowalski");
// execute
String actual = fieldFetcher.fetchValue(doc, JudgmentIndexField.JUDGE);
// assert
assertEquals("Jan Kowalski", actual);
}
@Test
public void fetchLongValue() {
// given
SolrDocument doc = new SolrDocument();
doc.addField("ccCourtId", 123l);
// execute
Long actual = fieldFetcher.fetchLongValue(doc, JudgmentIndexField.CC_COURT_ID);
// assert
assertEquals(123l, actual.longValue());
}
@Test
public void fetchDateValue() {
// given
SolrDocument doc = new SolrDocument();
Date date = new Date(1396310400000L); // 2014-04-01
doc.addField("judgmentDate", date);
// execute
LocalDate actualDate = fieldFetcher.fetchDateValue(doc, JudgmentIndexField.JUDGMENT_DATE);
// assert
LocalDate expectedDate = new LocalDate(2014, 4, 1);
assertEquals(expectedDate, actualDate);
}
@Test
public void fetchValues() {
// given
SolrDocument doc = new SolrDocument();
doc.addField("judge", "Jan Kowalski");
doc.addField("judge", "Adam Nowak");
// execute
List<String> actual = fieldFetcher.fetchValues(doc, JudgmentIndexField.JUDGE);
// assert
assertEquals(2, actual.size());
assertTrue(actual.contains("Jan Kowalski"));
assertTrue(actual.contains("Adam Nowak"));
}
@Test
public void fetchValues_FIELD_WITH_POSTFIX() {
// given
SolrDocument doc = new SolrDocument();
doc.addField("judgeWithRole_#_PRESIDING_JUDGE", "Jan Kowalski");
doc.addField("judgeWithRole_#_PRESIDING_JUDGE", "Jan Nowak");
doc.addField("judgeWithRole_#_REPORTING_JUDGE", "Adam Nowak");
// execute
List<String> actual = fieldFetcher.fetchValues(doc, JudgmentIndexField.JUDGE_WITH_ROLE, "PRESIDING_JUDGE");
// assert
assertEquals(2, actual.size());
assertTrue(actual.contains("Jan Kowalski"));
assertTrue(actual.contains("Jan Nowak"));
}
@Test
public void fetchValuesWithAttributes() {
// given
SolrDocument doc = new SolrDocument();
doc.addField("judge", "Jan Kowalski|PRESIDING_JUDGE|REPORTING_JUDGE");
doc.addField("judge", "Adam Nowak|PRESIDING_JUDGE|UNKNOWN_ROLE");
// execute
List<Pair<String, List<String>>> actual = fieldFetcher.fetchValuesWithAttributes(doc, JudgmentIndexField.JUDGE);
// assert
assertEquals(2, actual.size());
Pair<String, List<String>> actualFirstJudge = actual.get(0);
Pair<String, List<String>> actualSecondJudge = actual.get(1);
assertEquals("Jan Kowalski", actualFirstJudge.getLeft());
assertEquals(2, actualFirstJudge.getRight().size());
assertTrue(actualFirstJudge.getRight().contains("PRESIDING_JUDGE"));
assertTrue(actualFirstJudge.getRight().contains("REPORTING_JUDGE"));
assertEquals("Adam Nowak", actualSecondJudge.getLeft());
assertEquals(2, actualSecondJudge.getRight().size());
assertTrue(actualSecondJudge.getRight().contains("PRESIDING_JUDGE"));
assertTrue(actualSecondJudge.getRight().contains("UNKNOWN_ROLE"));
}
@Test
public void fetchValuesWithEnumedAttributes() {
// given
SolrDocument doc = new SolrDocument();
doc.addField("judge", "Jan Kowalski|PRESIDING_JUDGE|REPORTING_JUDGE");
doc.addField("judge", "Adam Nowak|PRESIDING_JUDGE|UNKNOWN_ROLE");
// execute
List<Pair<String, List<JudgeRole>>> actual = fieldFetcher.fetchValuesWithEnumedAttributes(doc, JudgmentIndexField.JUDGE, JudgeRole.class);
// assert
assertEquals(2, actual.size());
Pair<String, List<JudgeRole>> actualFirstJudge = actual.get(0);
Pair<String, List<JudgeRole>> actualSecondJudge = actual.get(1);
assertEquals("Jan Kowalski", actualFirstJudge.getLeft());
assertEquals(2, actualFirstJudge.getRight().size());
assertTrue(actualFirstJudge.getRight().contains(JudgeRole.PRESIDING_JUDGE));
assertTrue(actualFirstJudge.getRight().contains(JudgeRole.REPORTING_JUDGE));
assertEquals("Adam Nowak", actualSecondJudge.getLeft());
assertEquals(1, actualSecondJudge.getRight().size());
assertTrue(actualSecondJudge.getRight().contains(JudgeRole.PRESIDING_JUDGE));
}
@Test
public void fetchCurrencyValue() {
// given
SolrDocument doc = new SolrDocument();
doc.addField("maximumMoneyAmount", "12300.45,PLN");
// execute
BigDecimal actual = fieldFetcher.fetchCurrencyValue(doc, JudgmentIndexField.MAXIMUM_MONEY_AMOUNT);
// assert
assertEquals(new BigDecimal("12300.45"), actual);
}
}