package tudelft.healthpsychology.traumaontologies.answerstate; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.io.IOException; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.junit.Before; import org.junit.Test; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import tudelft.healthpsychology.traumaontologies.owltree.OwlProperty; import tudelft.healthpsychology.traumaontologies.questiontypes.TypedQuestion; import tudelft.utilities.tree.Tree; public class PropertiesAnswerStateTest { private static final String SERIALIZED = "{\"PropertiesAnswerState\":{\"nodelabel\":\"node\",\"answers\":[{\"prop\":{\"OwlProperty\":{\"range\":\"string\",\"comment\":\"comment1\",\"id\":\"id1\"}},\"answer\":\"answer1\"}]}}"; // "{\"PropertiesAnswerState\":{\"nodelabel\":\"node\",\"answers\":{}}}"; private final Tree, OntologyNode> tree = mock( Tree.class); private OntologyNode node; private final ObjectMapper jackson = new ObjectMapper(); @Before public void before() { node = mock(OntologyNode.class); when(tree.get("node")).thenReturn(node); } @Test public void getOptionsTest() { // check state with no properties when(node.getAttribute()).thenReturn(Collections.emptyList()); PropertiesAnswerState state = new PropertiesAnswerState("node"); assertEquals(null, state.getOptions(tree)); } @Test public void getOptionsTest1() { // check state with a property, not yet answered Property prop1 = mock(Property.class); TypedQuestion questiontype1 = mock(TypedQuestion.class); when(prop1.getQuestionType()).thenReturn(questiontype1); when(node.getAttribute()).thenReturn(Arrays.asList(prop1)); PropertiesAnswerState state = new PropertiesAnswerState("node"); assertEquals(questiontype1, state.getOptions(tree)); } @Test public void getOptionsTest2() { // check state with a property, not yet answered Property prop1 = mock(Property.class); TypedQuestion questiontype1 = mock(TypedQuestion.class); when(prop1.getQuestionType()).thenReturn(questiontype1); when(node.getAttribute()).thenReturn(Arrays.asList(prop1)); PropertiesAnswerState state = new PropertiesAnswerState("node"); assertEquals(questiontype1, state.getOptions(tree)); } @Test public void testSerialize() throws JsonProcessingException { Map answers = new HashMap<>(); answers.put(new OwlProperty("string", "comment1", "id1"), "answer1"); PropertiesAnswerState state = new PropertiesAnswerState("node", answers); assertEquals(SERIALIZED, jackson.writeValueAsString(state)); } @Test public void testDeserialize() throws IOException { Map answers = new HashMap<>(); answers.put(new OwlProperty("string", "comment1", "id1"), "answer1"); PropertiesAnswerState state = new PropertiesAnswerState("node", answers); assertEquals(state, jackson.readValue(SERIALIZED, AnswerState.class)); } }