Package org.openmrs.module.htmlformentry.widget

Source Code of org.openmrs.module.htmlformentry.widget.DynamicAutocompleteWidgetTest

package org.openmrs.module.htmlformentry.widget;

import org.junit.Before;
import org.junit.Test;
import org.openmrs.Concept;
import org.openmrs.ConceptClass;
import org.openmrs.ConceptName;
import org.openmrs.module.htmlformentry.FormEntryContext;
import org.openmrs.module.htmlformentry.TestUtil;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static org.hamcrest.CoreMatchers.any;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.argThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;



public class DynamicAutocompleteWidgetTest {

    private FormEntryContext context;

    private HttpServletRequest request;

    @Before
    public void setup() {
        request = mock(HttpServletRequest.class);
        context = mock(FormEntryContext.class);
        when(context.getFieldName(argThat(any(Widget.class)))).thenReturn("w2");
    }


    @Test
    public void generateHtml_shouldRenderProperHtmlWithConceptList() {

        when(context.getMode()).thenReturn(FormEntryContext.Mode.EDIT);

        DynamicAutocompleteWidget dynamicAutocompleteWidget = new DynamicAutocompleteWidget(generateConceptList(), null);
        String html = dynamicAutocompleteWidget.generateHtml(context);

        TestUtil.assertFuzzyContains("<div id=\"w2_div\" class=\"dynamicAutocomplete\">" +
            "<input name=\"w2_hid\" id=\"w2_hid\" type=\"hidden\" class=\"autoCompleteHidden\" />" +
            "<input type=\"text\"  id=\"w2\" name=\"w2\" onfocus=\"setupAutocomplete\\(this, 'conceptSearch.form','1,2,3','null'\\); \"class=\"autoCompleteText\" onBlur=\"onBlurAutocomplete\\(this\\)\"/>" +
            "<input id=\"w2_button\" type=\"button\" class=\"addConceptButton\" value=\"Add\" /></div>",
                html);

    }

    @Test
    public void generateHtml_shouldRenderProperHtmlWithConceptClasses() {

        when(context.getMode()).thenReturn(FormEntryContext.Mode.EDIT);

        DynamicAutocompleteWidget dynamicAutocompleteWidget = new DynamicAutocompleteWidget(null, generateConceptClassList());
        String html = dynamicAutocompleteWidget.generateHtml(context);

        TestUtil.assertFuzzyContains("<div id=\"w2_div\" class=\"dynamicAutocomplete\">" +
                "<input name=\"w2_hid\" id=\"w2_hid\" type=\"hidden\" class=\"autoCompleteHidden\" />" +
                "<input type=\"text\"  id=\"w2\" name=\"w2\" onfocus=\"setupAutocomplete\\(this, 'conceptSearch.form','null','someClass,anotherClass'\\); \"class=\"autoCompleteText\" onBlur=\"onBlurAutocomplete\\(this\\)\"/>" +
                "<input id=\"w2_button\" type=\"button\" class=\"addConceptButton\" value=\"Add\" /></div>",
                html);

    }

    @Test
    public void generateHtml_shouldRenderSingleConceptProperlyInViewMode() {

        when(context.getMode()).thenReturn(FormEntryContext.Mode.VIEW);

        DynamicAutocompleteWidget dynamicAutocompleteWidget = new DynamicAutocompleteWidget(generateConceptList(), null);

        Concept initialValue = mock(Concept.class);
        when(initialValue.getDisplayString()).thenReturn("concept1");
        dynamicAutocompleteWidget.setInitialValue(initialValue);

        String html = dynamicAutocompleteWidget.generateHtml(context);

        TestUtil.assertFuzzyContains("concept1", html);
    }

    @Test
    public void generateHtml_shouldRenderMultipleConceptProperlyInViewMode() {

        when(context.getMode()).thenReturn(FormEntryContext.Mode.VIEW);

        DynamicAutocompleteWidget dynamicAutocompleteWidget = new DynamicAutocompleteWidget(generateConceptList(), null);

        Concept initialValue1 = mock(Concept.class);
        when(initialValue1.getDisplayString()).thenReturn("concept1");
        dynamicAutocompleteWidget.addInitialValue(initialValue1);

        Concept initialValue2 = mock(Concept.class);
        when(initialValue2.getDisplayString()).thenReturn("concept2");
        dynamicAutocompleteWidget.addInitialValue(initialValue2);

        String html = dynamicAutocompleteWidget.generateHtml(context);

        TestUtil.assertFuzzyContains("concept1;concept2;", html);
    }


    @Test
    public void getValue_shouldReturnProperValues() {

        when(request.getParameter("w2_hid")).thenReturn("3");
        when(request.getParameter("w2span_0_hid")).thenReturn("1001");
        when(request.getParameter("w2span_1_hid")).thenReturn("1002");
        when(request.getParameter("w2span_2_hid")).thenReturn("1003");

        DynamicAutocompleteWidget dynamicAutocompleteWidget = new DynamicAutocompleteWidget(generateConceptList(), null);
        List values = (List) dynamicAutocompleteWidget.getValue(context, request);
        assertThat(values.size(), is(3));

        Set<String> results = new HashSet<String>();

        for (Object val : values) {
            results.add((String) val);
        }

        assertTrue(results.contains("1001"));
        assertTrue(results.contains("1002"));
        assertTrue(results.contains("1003"));
    }

    @Test
    public void getValue_shouldReturnEmptyListIfNoValuesInRequest() {
        DynamicAutocompleteWidget dynamicAutocompleteWidget = new DynamicAutocompleteWidget(generateConceptList(), null);
        List values = (List) dynamicAutocompleteWidget.getValue(context, request);
        assertThat(values.size(), is(0));
    }


    private List<Concept> generateConceptList() {

        List<Concept>  conceptList = new ArrayList<Concept>();

        Concept concept1 = new Concept();
        concept1.setConceptId(1);
        ConceptName concept1Name = new ConceptName();
        concept1Name.setName("concept1");
        concept1.addName(concept1Name);
        conceptList.add(concept1);

        Concept concept2 = new Concept();
        concept2.setConceptId(2);
        ConceptName concept2Name = new ConceptName();
        concept1Name.setName("concept2");
        concept1.addName(concept2Name);
        conceptList.add(concept2);

        Concept concept3 = new Concept();
        concept3.setConceptId(3);
        ConceptName concept3Name = new ConceptName();
        concept1Name.setName("concept3");
        concept1.addName(concept3Name);
        conceptList.add(concept3);

        return conceptList;
    }

    private List<ConceptClass> generateConceptClassList() {

        List<ConceptClass> conceptClassList = new ArrayList<ConceptClass>();

        ConceptClass conceptClass1 = new ConceptClass();
        conceptClass1.setName("someClass");
        conceptClassList.add(conceptClass1);

        ConceptClass conceptClass2 = new ConceptClass();
        conceptClass2.setName("anotherClass");
        conceptClassList.add(conceptClass2);

        return conceptClassList;
    }
}
TOP

Related Classes of org.openmrs.module.htmlformentry.widget.DynamicAutocompleteWidgetTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.