package edu.asu.spring.quadriga.conceptpower.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentMatcher;
import org.mockito.InjectMocks;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.client.RestTemplate;
import edu.asu.spring.quadriga.domain.impl.ConceptpowerReply;
public class ConceptpowerConnectorTest {
@Mock
private RestTemplate mockedRestTemplate = Mockito.mock(RestTemplate.class);
private String conceptURL = "conceptURL";
private String searchURL = "searchURL";
private String idURL = "idUrl";
@InjectMocks
private ConceptpowerConnector connectorUnderTest;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
ReflectionTestUtils.setField(connectorUnderTest, "conceptURL",
conceptURL);
ReflectionTestUtils
.setField(connectorUnderTest, "searchURL", searchURL);
ReflectionTestUtils.setField(connectorUnderTest, "idUrl", idURL);
List<ConceptpowerReply.ConceptEntry> conceptEntries = new ArrayList<ConceptpowerReply.ConceptEntry>();
ConceptpowerReply.ConceptEntry entry = new ConceptpowerReply.ConceptEntry();
entry.setLemma("dog");
entry.setPos("noun");
conceptEntries.add(entry);
ConceptpowerReply rep = new ConceptpowerReply();
rep.setConceptEntry(conceptEntries);
Map<String, String> vars = new HashMap<String, String>();
vars.put("name", "dog");
vars.put("pos", "noun");
Mockito.when(
mockedRestTemplate.getForObject(
Matchers.eq(conceptURL + searchURL + "{name}/{pos}"),
Matchers.eq(ConceptpowerReply.class),
Mockito.argThat(new MapMatcher(vars)))).thenReturn(rep);
List<ConceptpowerReply.ConceptEntry> emptyList = new ArrayList<ConceptpowerReply.ConceptEntry>();
ConceptpowerReply noResultsReply = new ConceptpowerReply();
noResultsReply.setConceptEntry(emptyList);
Map<String, String> vars2 = new HashMap<String, String>();
vars2.put("name", "cat");
vars2.put("pos", "noun");
Mockito.when(
mockedRestTemplate.getForObject(
Matchers.eq(conceptURL + searchURL + "{name}/{pos}"),
Matchers.eq(ConceptpowerReply.class),
Mockito.argThat(new MapMatcher(vars2)))).thenReturn(
noResultsReply);
Mockito.when(
mockedRestTemplate.getForObject(Matchers.eq(conceptURL + idURL
+ "id"), Matchers.eq(ConceptpowerReply.class), Mockito
.argThat(new MapMatcher(new HashMap<String, String>()))))
.thenReturn(rep);
Mockito.when(
mockedRestTemplate.getForObject(Matchers.eq(conceptURL + idURL
+ "id2"), Matchers.eq(ConceptpowerReply.class), Mockito
.argThat(new MapMatcher(new HashMap<String, String>()))))
.thenReturn(noResultsReply);
}
@Test
public void testSearch() {
ConceptpowerReply reply = connectorUnderTest.search("dog", "noun");
assertNotNull(reply);
assertEquals(1, reply.getConceptEntry().size());
assertEquals("dog", reply.getConceptEntry().get(0).getLemma());
assertEquals("noun", reply.getConceptEntry().get(0).getPos());
}
@Test
public void testSearchNoResults() {
ConceptpowerReply reply = connectorUnderTest.search("cat", "noun");
assertNotNull(reply);
assertEquals(0, reply.getConceptEntry().size());
}
@Test
public void testGetById() {
ConceptpowerReply reply = connectorUnderTest.getById("id");
assertNotNull(reply);
assertEquals(1, reply.getConceptEntry().size());
assertEquals("dog", reply.getConceptEntry().get(0).getLemma());
assertEquals("noun", reply.getConceptEntry().get(0).getPos());
}
@Test
public void testGetByIdNoResult() {
ConceptpowerReply reply = connectorUnderTest.getById("id2");
assertNotNull(reply);
assertEquals(0, reply.getConceptEntry().size());
}
class MapMatcher extends ArgumentMatcher<Map> {
Map<String, String> mapToMatch;
public MapMatcher(Map<String, String> mapToMatch) {
this.mapToMatch = mapToMatch;
}
@Override
public boolean matches(Object argument) {
if (!(argument instanceof Map)) {
return false;
}
if (((Map) argument).size() != mapToMatch.size()) {
return false;
}
for (String key : mapToMatch.keySet()) {
if (!mapToMatch.get(key).equals(((Map) argument).get(key))) {
return false;
}
}
return true;
}
}
}