Skip to content

Commit eadf038

Browse files
committed
HTML-873: Encounter Date should validate that encounter datetime falls within Visit
HTML-872: Time component of encounter date widget should be set properly on form opening (add tests)
1 parent 1e55d21 commit eadf038

3 files changed

Lines changed: 355 additions & 10 deletions

File tree

api-tests/src/test/java/org/openmrs/module/htmlformentry/RegressionTest.java

Lines changed: 301 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.openmrs.Obs;
1616
import org.openmrs.Patient;
1717
import org.openmrs.Provider;
18+
import org.openmrs.Visit;
1819
import org.openmrs.api.context.Context;
1920
import org.openmrs.module.htmlformentry.schema.HtmlFormField;
2021
import org.openmrs.module.htmlformentry.schema.HtmlFormSchema;
@@ -999,7 +1000,37 @@ public void setupEditRequest(MockHttpServletRequest request, Map<String, String>
9991000
request.addParameter(widgets.get("Date:"), dateAsString(date));
10001001
request.addParameter(widgets.get("Location:"), "2");
10011002

1002-
};
1003+
}; @Test
1004+
public void testSimplestFormSuccess() throws Exception {
1005+
final Date date = new Date();
1006+
new RegressionTestHelper() {
1007+
1008+
@Override
1009+
public String getFormName() {
1010+
return "simplestForm";
1011+
}
1012+
1013+
@Override
1014+
public String[] widgetLabels() {
1015+
return new String[] { "Date:", "Location:", "Provider:" };
1016+
}
1017+
1018+
@Override
1019+
public void setupRequest(MockHttpServletRequest request, Map<String, String> widgets) {
1020+
request.addParameter(widgets.get("Date:"), dateAsString(date));
1021+
request.addParameter(widgets.get("Location:"), "2");
1022+
request.addParameter(widgets.get("Provider:"), "502");
1023+
}
1024+
1025+
@Override
1026+
public void testResults(SubmissionResults results) {
1027+
results.assertNoErrors();
1028+
results.assertEncounterCreated();
1029+
results.assertProvider(502);
1030+
results.assertLocation(2);
1031+
}
1032+
}.run();
1033+
}
10031034

10041035
@Override
10051036
public void testEditedResults(SubmissionResults results) {
@@ -2694,7 +2725,275 @@ public void testResults(SubmissionResults results) {
26942725
}
26952726
}.run();
26962727
}
2697-
2728+
2729+
@Test
2730+
public void testShouldFailIfEncounterDateBeforeVisitStartDate() throws Exception {
2731+
Date visitStartDate = new DateTime(2010, 10, 10, 0, 0, 0).toDate();
2732+
Date encounterDate = new DateTime(2009, 10, 9, 0, 0, 0).toDate();
2733+
Visit visit = new Visit();
2734+
visit.setStartDatetime(visitStartDate);
2735+
2736+
new RegressionTestHelper() {
2737+
2738+
@Override
2739+
public Visit getVisit() {
2740+
return visit;
2741+
}
2742+
2743+
@Override
2744+
public String getFormName() {
2745+
return "simplestForm";
2746+
}
2747+
2748+
@Override
2749+
public String[] widgetLabels() {
2750+
return new String[] { "Date:", "Location:", "Provider:" };
2751+
}
2752+
2753+
@Override
2754+
public void setupRequest(MockHttpServletRequest request, Map<String, String> widgets) {
2755+
request.addParameter(widgets.get("Date:"), dateAsString(encounterDate));
2756+
request.addParameter(widgets.get("Location:"), "2");
2757+
request.addParameter(widgets.get("Provider:"), "502");
2758+
}
2759+
2760+
@Override
2761+
public void testResults(SubmissionResults results) {
2762+
results.assertNoEncounterCreated();
2763+
results.assertErrors(1);
2764+
List<FormSubmissionError> errors = results.getValidationErrors();
2765+
Assert.assertEquals("Cannot be before visit start date", errors.get(0).getError());
2766+
}
2767+
}.run();
2768+
}
2769+
2770+
@Test
2771+
public void testShouldFailIfEncounterDateAfterVisitEndDate() throws Exception {
2772+
Date visitStartDate = new DateTime(2010, 10, 10, 0, 0, 0).toDate();
2773+
Date visitEndDate = new DateTime(2010, 10, 12, 0, 0, 0).toDate();
2774+
Date encounterDate = new DateTime(2010, 10, 13, 0, 0, 0).toDate();
2775+
Visit visit = new Visit();
2776+
visit.setStartDatetime(visitStartDate);
2777+
visit.setStopDatetime(visitEndDate);
2778+
2779+
new RegressionTestHelper() {
2780+
2781+
@Override
2782+
public Visit getVisit() {
2783+
return visit;
2784+
}
2785+
2786+
@Override
2787+
public String getFormName() {
2788+
return "simplestForm";
2789+
}
2790+
2791+
@Override
2792+
public String[] widgetLabels() {
2793+
return new String[] { "Date:", "Location:", "Provider:" };
2794+
}
2795+
2796+
@Override
2797+
public void setupRequest(MockHttpServletRequest request, Map<String, String> widgets) {
2798+
request.addParameter(widgets.get("Date:"), dateAsString(encounterDate));
2799+
request.addParameter(widgets.get("Location:"), "2");
2800+
request.addParameter(widgets.get("Provider:"), "502");
2801+
}
2802+
2803+
@Override
2804+
public void testResults(SubmissionResults results) {
2805+
results.assertNoEncounterCreated();
2806+
results.assertErrors(1);
2807+
List<FormSubmissionError> errors = results.getValidationErrors();
2808+
Assert.assertEquals("Cannot be after visit stop date", errors.get(0).getError());
2809+
}
2810+
}.run();
2811+
}
2812+
2813+
@Test
2814+
public void testShouldNotFailIfEncounterDateWithinVisitDates() throws Exception {
2815+
Date visitStartDate = new DateTime(2010, 10, 10, 0, 0, 0).toDate();
2816+
Date visitEndDate = new DateTime(2010, 10, 12, 0, 0, 0).toDate();
2817+
Date encounterDate = new DateTime(2010, 10, 11, 0, 0, 0).toDate();
2818+
Visit visit = new Visit();
2819+
visit.setStartDatetime(visitStartDate);
2820+
visit.setStopDatetime(visitEndDate);
2821+
2822+
new RegressionTestHelper() {
2823+
2824+
@Override
2825+
public Visit getVisit() {
2826+
return visit;
2827+
}
2828+
2829+
@Override
2830+
public String getFormName() {
2831+
return "simplestForm";
2832+
}
2833+
2834+
@Override
2835+
public String[] widgetLabels() {
2836+
return new String[] { "Date:", "Location:", "Provider:" };
2837+
}
2838+
2839+
@Override
2840+
public void setupRequest(MockHttpServletRequest request, Map<String, String> widgets) {
2841+
request.addParameter(widgets.get("Date:"), dateAsString(encounterDate));
2842+
request.addParameter(widgets.get("Location:"), "2");
2843+
request.addParameter(widgets.get("Provider:"), "502");
2844+
}
2845+
2846+
@Override
2847+
public void testResults(SubmissionResults results) {
2848+
results.assertNoErrors();
2849+
results.assertEncounterCreated();
2850+
results.assertProvider(502);
2851+
results.assertLocation(2);
2852+
}
2853+
}.run();
2854+
}
2855+
2856+
@Test
2857+
public void testShouldNotFailIfEncounterDateAfterVisitStartDateAndVisitActive() throws Exception {
2858+
Date visitStartDate = new DateTime(2010, 10, 10, 0, 0, 0).toDate();
2859+
Date encounterDate = new DateTime(2010, 10, 11, 0, 0, 0).toDate();
2860+
Visit visit = new Visit();
2861+
visit.setStartDatetime(visitStartDate);
2862+
2863+
new RegressionTestHelper() {
2864+
2865+
@Override
2866+
public Visit getVisit() {
2867+
return visit;
2868+
}
2869+
2870+
@Override
2871+
public String getFormName() {
2872+
return "simplestForm";
2873+
}
2874+
2875+
@Override
2876+
public String[] widgetLabels() {
2877+
return new String[] { "Date:", "Location:", "Provider:" };
2878+
}
2879+
2880+
@Override
2881+
public void setupRequest(MockHttpServletRequest request, Map<String, String> widgets) {
2882+
request.addParameter(widgets.get("Date:"), dateAsString(encounterDate));
2883+
request.addParameter(widgets.get("Location:"), "2");
2884+
request.addParameter(widgets.get("Provider:"), "502");
2885+
}
2886+
2887+
@Override
2888+
public void testResults(SubmissionResults results) {
2889+
results.assertNoErrors();
2890+
results.assertEncounterCreated();
2891+
results.assertProvider(502);
2892+
results.assertLocation(2);
2893+
}
2894+
}.run();
2895+
}
2896+
2897+
@Test
2898+
public void testShouldNotFailIfEncounterDateSameDayAsVisitStartDateAndHasNoTimeComponent() throws Exception {
2899+
Date visitStartDate = new DateTime(2010, 10, 10, 10, 10, 0).toDate();
2900+
Date encounterDate = new DateTime(2010, 10, 10, 0, 0, 0).toDate();
2901+
Visit visit = new Visit();
2902+
visit.setStartDatetime(visitStartDate);
2903+
2904+
new RegressionTestHelper() {
2905+
2906+
@Override
2907+
public Visit getVisit() {
2908+
return visit;
2909+
}
2910+
2911+
@Override
2912+
public String getFormName() {
2913+
return "simplestFormWithTimeComponent";
2914+
}
2915+
2916+
@Override
2917+
public String[] widgetLabels() {
2918+
return new String[] { "Date:", "Location:", "Provider:" };
2919+
}
2920+
2921+
@Override
2922+
public void setupRequest(MockHttpServletRequest request, Map<String, String> widgets) {
2923+
Calendar cal = Calendar.getInstance();
2924+
cal.setTime(encounterDate);
2925+
cal.set(Calendar.MILLISECOND, 0);
2926+
2927+
request.addParameter(widgets.get("Date:"), dateAsString(encounterDate));
2928+
request.addParameter(widgets.get("Location:"), "2");
2929+
request.addParameter(widgets.get("Provider:"), "502");
2930+
2931+
// hack since time components don't have labels, have to specify actual widget names
2932+
request.addParameter("w1hours", String.valueOf(cal.get(Calendar.HOUR_OF_DAY)));
2933+
request.addParameter("w1minutes", String.valueOf(cal.get(Calendar.MINUTE)));
2934+
request.addParameter("w1seconds", String.valueOf(cal.get(Calendar.SECOND)));
2935+
}
2936+
2937+
@Override
2938+
public void testResults(SubmissionResults results) {
2939+
results.assertNoErrors();
2940+
results.assertEncounterCreated();
2941+
results.assertProvider(502);
2942+
results.assertLocation(2);
2943+
}
2944+
}.run();
2945+
}
2946+
2947+
@Test
2948+
public void testShouldFailIfEncounterDateBeforeVisitStartDateOnSameDayAndHasTimeComponent() throws Exception {
2949+
Date visitStartDate = new DateTime(2010, 10, 10, 10, 10, 0).toDate();
2950+
Date encounterDate = new DateTime(2010, 10, 10, 8, 0, 0).toDate();
2951+
Visit visit = new Visit();
2952+
visit.setStartDatetime(visitStartDate);
2953+
2954+
new RegressionTestHelper() {
2955+
2956+
@Override
2957+
public Visit getVisit() {
2958+
return visit;
2959+
}
2960+
2961+
@Override
2962+
public String getFormName() {
2963+
return "simplestFormWithTimeComponent";
2964+
}
2965+
2966+
@Override
2967+
public String[] widgetLabels() {
2968+
return new String[] { "Date:", "Location:", "Provider:" };
2969+
}
2970+
2971+
@Override
2972+
public void setupRequest(MockHttpServletRequest request, Map<String, String> widgets) {
2973+
Calendar cal = Calendar.getInstance();
2974+
cal.setTime(encounterDate);
2975+
cal.set(Calendar.MILLISECOND, 0);
2976+
2977+
request.addParameter(widgets.get("Date:"), dateAsString(encounterDate));
2978+
request.addParameter(widgets.get("Location:"), "2");
2979+
request.addParameter(widgets.get("Provider:"), "502");
2980+
2981+
// hack since time components don't have labels, have to specify actual widget names
2982+
request.addParameter("w1hours", String.valueOf(cal.get(Calendar.HOUR_OF_DAY)));
2983+
request.addParameter("w1minutes", String.valueOf(cal.get(Calendar.MINUTE)));
2984+
request.addParameter("w1seconds", String.valueOf(cal.get(Calendar.SECOND)));
2985+
}
2986+
2987+
@Override
2988+
public void testResults(SubmissionResults results) {
2989+
results.assertNoEncounterCreated();
2990+
results.assertErrors(1);
2991+
List<FormSubmissionError> errors = results.getValidationErrors();
2992+
Assert.assertEquals("Cannot be before visit start date", errors.get(0).getError());
2993+
}
2994+
}.run();
2995+
}
2996+
26982997
// this test currently fails because Encounter Date tag is after Obs tag on the form; should be fixed or ticketed
26992998
@Test
27002999
@Ignore

0 commit comments

Comments
 (0)