package pl.edu.icm.saos.search.indexing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static pl.edu.icm.saos.search.indexing.SolrDocumentAssert.assertFieldValues;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.powermock.reflect.Whitebox;
import pl.edu.icm.saos.persistence.model.CommonCourt;
import pl.edu.icm.saos.persistence.model.CommonCourt.CommonCourtType;
import pl.edu.icm.saos.persistence.model.CommonCourtDivision;
import pl.edu.icm.saos.persistence.model.CommonCourtJudgment;
import pl.edu.icm.saos.persistence.model.CourtType;
import pl.edu.icm.saos.persistence.model.JudgmentKeyword;
import pl.edu.icm.saos.search.config.model.JudgmentIndexField;
import pl.edu.icm.saos.search.util.CcCourtAreaFieldValueCreator;
import com.google.common.collect.Lists;
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 CcJudgmentIndexFieldsFillerTest {
private CcJudgmentIndexFieldsFiller ccJudgmentIndexingProcessor = new CcJudgmentIndexFieldsFiller();
private SolrFieldAdder<JudgmentIndexField> fieldAdder = new SolrFieldAdder<JudgmentIndexField>();
private CcCourtAreaFieldValueCreator ccCourtAreaFieldValueCreator = mock(CcCourtAreaFieldValueCreator.class);
@DataProvider
public static Object[][] ccJudgmentsFieldsData() {
SolrInputFieldFactory fieldFactory = new SolrInputFieldFactory();
// basic
String textContent = "some content";
long idValue = 1;
CommonCourtJudgment basicJudgment = new CommonCourtJudgment();
Whitebox.setInternalState(basicJudgment, "id", idValue);
basicJudgment.getTextContent().setRawTextContent(textContent);
List<SolrInputField> basicFields = Lists.newArrayList(
fieldFactory.create("databaseId", idValue),
fieldFactory.create("content", textContent));
// keywords
JudgmentKeyword keyword1 = new JudgmentKeyword(CourtType.COMMON, UUID.randomUUID().toString());
JudgmentKeyword keyword2 = new JudgmentKeyword(CourtType.COMMON, UUID.randomUUID().toString());
CommonCourtJudgment keywordsJudgment = new CommonCourtJudgment();
keywordsJudgment.addKeyword(keyword1);
keywordsJudgment.addKeyword(keyword2);
List<SolrInputField> keywordsFields = Collections.singletonList(
fieldFactory.create("keyword", keyword1.getPhrase(), keyword2.getPhrase()));
// common court
CommonCourt appealCourt = new CommonCourt();
Whitebox.setInternalState(appealCourt, "id", 123);
appealCourt.setCode("15200000");
appealCourt.setName("Sąd Apelacyjny w Krakowie");
appealCourt.setType(CommonCourtType.APPEAL);
CommonCourtDivision appealCourtDivision = new CommonCourtDivision();
Whitebox.setInternalState(appealCourtDivision, "id", 816);
appealCourtDivision.setCode("0000503");
appealCourtDivision.setName("I Wydział Cywilny");
appealCourtDivision.setCourt(appealCourt);
CommonCourt regionalCourt = new CommonCourt();
Whitebox.setInternalState(regionalCourt, "id", 124);
regionalCourt.setCode("15200001");
regionalCourt.setName("Sąd Okręgowy w Krakowie");
regionalCourt.setType(CommonCourtType.REGIONAL);
regionalCourt.setParentCourt(appealCourt);
CommonCourtDivision regionalCourtDivision = new CommonCourtDivision();
Whitebox.setInternalState(regionalCourtDivision, "id", 817);
regionalCourtDivision.setCode("0000504");
regionalCourtDivision.setName("I Wydział Cywilny");
regionalCourtDivision.setCourt(regionalCourt);
CommonCourt districtCourt = new CommonCourt();
Whitebox.setInternalState(districtCourt, "id", 125);
districtCourt.setCode("15200002");
districtCourt.setName("Sąd Rejonowy w Częstochowie");
districtCourt.setType(CommonCourtType.DISTRICT);
districtCourt.setParentCourt(regionalCourt);
CommonCourtDivision districtCourtDivision = new CommonCourtDivision();
Whitebox.setInternalState(districtCourtDivision, "id", 818);
districtCourtDivision.setCode("0000505");
districtCourtDivision.setName("I Wydział Cywilny");
districtCourtDivision.setCourt(districtCourt);
CommonCourtJudgment appealCourtJudgment = new CommonCourtJudgment();
Whitebox.setInternalState(appealCourtJudgment, "id", idValue);
appealCourtJudgment.setCourtDivision(appealCourtDivision);
CommonCourtJudgment regionalCourtJudgment = new CommonCourtJudgment();
Whitebox.setInternalState(regionalCourtJudgment, "id", idValue+1);
regionalCourtJudgment.setCourtDivision(regionalCourtDivision);
CommonCourtJudgment districtCourtJudgment = new CommonCourtJudgment();
Whitebox.setInternalState(districtCourtJudgment, "id", idValue+2);
districtCourtJudgment.setCourtDivision(districtCourtDivision);
List<SolrInputField> appealCourtFields = Lists.newArrayList(
fieldFactory.create("courtType", "COMMON"),
fieldFactory.create("ccCourtType", "APPEAL"),
fieldFactory.create("ccCourtId", 123l),
fieldFactory.create("ccCourtCode", "15200000"),
fieldFactory.create("ccCourtName", "Sąd Apelacyjny w Krakowie"),
fieldFactory.create("ccCourtDivisionId", 816l),
fieldFactory.create("ccCourtDivisionCode", "0000503"),
fieldFactory.create("ccCourtDivisionName", "I Wydział Cywilny"),
fieldFactory.create("ccAppealCourtId", 123l),
fieldFactory.create("ccAppealArea", "NA_Sąd Apelacyjny w Krakowie#123"),
fieldFactory.create("ccRegionArea", "123_Sąd Apelacyjny w Krakowie#123"));
List<SolrInputField> regionalCourtFields = Lists.newArrayList(
fieldFactory.create("courtType", "COMMON"),
fieldFactory.create("ccCourtType", "REGIONAL"),
fieldFactory.create("ccCourtId", 124l),
fieldFactory.create("ccCourtCode", "15200001"),
fieldFactory.create("ccCourtName", "Sąd Okręgowy w Krakowie"),
fieldFactory.create("ccCourtDivisionId", 817l),
fieldFactory.create("ccCourtDivisionCode", "0000504"),
fieldFactory.create("ccCourtDivisionName", "I Wydział Cywilny"),
fieldFactory.create("ccAppealCourtId", 123l),
fieldFactory.create("ccAppealArea", "NA_Sąd Apelacyjny w Krakowie#123"),
fieldFactory.create("ccRegionalCourtId", 124l),
fieldFactory.create("ccRegionArea", "123_Sąd Okręgowy w Krakowie#124"),
fieldFactory.create("ccDistrictArea", "124_Sąd Okręgowy w Krakowie#124"));
List<SolrInputField> districtCourtFields = Lists.newArrayList(
fieldFactory.create("courtType", "COMMON"),
fieldFactory.create("ccCourtType", "DISTRICT"),
fieldFactory.create("ccCourtId", 125l),
fieldFactory.create("ccCourtCode", "15200002"),
fieldFactory.create("ccCourtName", "Sąd Rejonowy w Częstochowie"),
fieldFactory.create("ccCourtDivisionId", 818l),
fieldFactory.create("ccCourtDivisionCode", "0000505"),
fieldFactory.create("ccCourtDivisionName", "I Wydział Cywilny"),
fieldFactory.create("ccAppealCourtId", 123l),
fieldFactory.create("ccAppealArea", "NA_Sąd Apelacyjny w Krakowie#123"),
fieldFactory.create("ccRegionalCourtId", 124l),
fieldFactory.create("ccRegionArea", "123_Sąd Okręgowy w Krakowie#124"),
fieldFactory.create("ccDistrictCourtId", 125l),
fieldFactory.create("ccDistrictArea", "124_Sąd Rejonowy w Częstochowie#125"));
return new Object[][] {
{ basicJudgment, basicFields },
{ keywordsJudgment, keywordsFields },
{ appealCourtJudgment, appealCourtFields },
{ regionalCourtJudgment, regionalCourtFields },
{ districtCourtJudgment, districtCourtFields },
};
}
@Before
public void setUp() {
ccJudgmentIndexingProcessor.setFieldAdder(fieldAdder);
ccJudgmentIndexingProcessor.setCcCourtAreaFieldValueCreator(ccCourtAreaFieldValueCreator);
when(ccCourtAreaFieldValueCreator.createCcCourtAreaFieldValue(Mockito.anyLong(), Mockito.any(CommonCourt.class))).thenAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
CommonCourt court = (CommonCourt)invocation.getArguments()[1];
String parentAreaCourtId = "NA";
if (invocation.getArguments()[0] != null) {
parentAreaCourtId = invocation.getArguments()[0].toString();
}
return parentAreaCourtId + "_" + court.getName() + "#" + court.getId();
}
});
}
//------------------------ LOGIC --------------------------
@Test
@UseDataProvider("ccJudgmentsFieldsData")
public void fillFields(CommonCourtJudgment givenJudgment, List<SolrInputField> expectedFields) {
// given
SolrInputDocument doc = new SolrInputDocument();
JudgmentIndexingData indexingData = new JudgmentIndexingData();
indexingData.setJudgment(givenJudgment);
// execute
ccJudgmentIndexingProcessor.fillFields(doc, indexingData);
// assert
expectedFields.forEach(expectedField -> assertFieldValues(doc, expectedField));
}
}