@@ -231,99 +231,113 @@ class QuestionnaireUiEspressoTest {
231231 fun dateTimePicker_shouldShowErrorForWrongDate () {
232232 buildFragmentFromQuestionnaire(" /component_date_time_picker.json" )
233233
234- // Add month and day. No need to add slashes as they are added automatically
235- composeTestRule.onNodeWithTag(DATE_TEXT_INPUT_FIELD ).performTextReplacement(" 0105" )
234+ runBlocking {
235+ // Add month and day. No need to add slashes as they are added automatically
236+ composeTestRule.onNodeWithTag(DATE_TEXT_INPUT_FIELD ).performTextReplacement(" 0105" )
237+ delay(HANDLE_INPUT_DEBOUNCE_TIME + 10L )
236238
237- composeTestRule
238- .onNodeWithTag(DATE_TEXT_INPUT_FIELD )
239- .assert (
240- SemanticsMatcher .expectValue(
241- SemanticsProperties .Error ,
242- " Date format needs to be mm/dd/yyyy (e.g. 01/31/2023)" ,
243- ),
244- )
245- composeTestRule.onNodeWithTag(TIME_PICKER_INPUT_FIELD ).assertIsNotEnabled()
239+ composeTestRule
240+ .onNodeWithTag(DATE_TEXT_INPUT_FIELD )
241+ .assert (
242+ SemanticsMatcher .expectValue(
243+ SemanticsProperties .Error ,
244+ " Date format needs to be mm/dd/yyyy (e.g. 01/31/2023)" ,
245+ ),
246+ )
247+ composeTestRule.onNodeWithTag(TIME_PICKER_INPUT_FIELD ).assertIsNotEnabled()
248+ }
246249 }
247250
248251 @Test
249252 fun dateTimePicker_shouldEnableTimePickerWithCorrectDate_butNotSaveInQuestionnaireResponse () {
250253 buildFragmentFromQuestionnaire(" /component_date_time_picker.json" )
251254
252- composeTestRule.onNodeWithTag(DATE_TEXT_INPUT_FIELD ).performTextReplacement(" 01052005" )
255+ runBlocking {
256+ composeTestRule.onNodeWithTag(DATE_TEXT_INPUT_FIELD ).performTextReplacement(" 01052005" )
257+ delay(HANDLE_INPUT_DEBOUNCE_TIME + 10L )
253258
254- composeTestRule
255- .onNodeWithTag(DATE_TEXT_INPUT_FIELD )
256- .assert (
257- SemanticsMatcher .keyNotDefined(
258- SemanticsProperties .Error ,
259- ),
260- )
261- composeTestRule.onNodeWithTag(TIME_PICKER_INPUT_FIELD ).assertIsEnabled()
259+ composeTestRule
260+ .onNodeWithTag(DATE_TEXT_INPUT_FIELD )
261+ .assert (
262+ SemanticsMatcher .keyNotDefined(
263+ SemanticsProperties .Error ,
264+ ),
265+ )
266+ composeTestRule.onNodeWithTag(TIME_PICKER_INPUT_FIELD ).assertIsEnabled()
262267
263- val questionnaireResponse = runBlocking { getQuestionnaireResponse() }
264- assertThat(questionnaireResponse.item.size).isEqualTo(1 )
265- assertThat(questionnaireResponse.item.first().answer.size).isEqualTo(1 )
266- val answer = questionnaireResponse.item.first().answer.first().valueDateTimeType
267- assertThat(answer.localDateTime).isEqualTo(LocalDateTime .of(2005 , 1 , 5 , 0 , 0 ))
268+ val questionnaireResponse = getQuestionnaireResponse()
269+ assertThat(questionnaireResponse.item.size).isEqualTo(1 )
270+ assertThat(questionnaireResponse.item.first().answer.size).isEqualTo(1 )
271+ val answer = questionnaireResponse.item.first().answer.first().valueDateTimeType
272+ assertThat(answer.localDateTime).isEqualTo(LocalDateTime .of(2005 , 1 , 5 , 0 , 0 ))
273+ }
268274 }
269275
270276 @Test
271277 fun dateTimePicker_shouldSetAnswerWhenDateAndTimeAreFilled () {
272278 buildFragmentFromQuestionnaire(" /component_date_time_picker.json" )
273279
274- composeTestRule.onNodeWithTag(DATE_TEXT_INPUT_FIELD ).performTextReplacement(" 01052005" )
275-
276- composeTestRule
277- .onNodeWithTag(TIME_PICKER_INPUT_FIELD )
278- .onChildren()
279- .filterToOne(
280- SemanticsMatcher .expectValue(SemanticsProperties .Role , Role .Button ),
281- )
282- .performClick()
283-
284- composeTestRule.onNodeWithText(" AM" ).performClick()
285- composeTestRule.onNodeWithContentDescription(" Select hour" , substring = true ).performClick()
286- composeTestRule.onNodeWithContentDescription(" 6 o'clock" , substring = true ).performClick()
287-
288- composeTestRule.onNodeWithContentDescription(" Select minutes" , substring = true ).performClick()
289- composeTestRule.onNodeWithContentDescription(" 10 minutes" , substring = true ).performClick()
280+ runBlocking {
281+ composeTestRule.onNodeWithTag(DATE_TEXT_INPUT_FIELD ).performTextReplacement(" 01052005" )
282+ delay(HANDLE_INPUT_DEBOUNCE_TIME + 10L )
283+ composeTestRule
284+ .onNodeWithTag(TIME_PICKER_INPUT_FIELD )
285+ .onChildren()
286+ .filterToOne(
287+ SemanticsMatcher .expectValue(SemanticsProperties .Role , Role .Button ),
288+ )
289+ .performClick()
290290
291- composeTestRule.onNodeWithText(" OK " ).performClick()
292- // Synchronize
293- composeTestRule.waitForIdle ()
291+ composeTestRule.onNodeWithText(" AM " ).performClick()
292+ composeTestRule.onNodeWithContentDescription( " Select hour " , substring = true ).performClick()
293+ composeTestRule.onNodeWithContentDescription( " 6 o'clock " , substring = true ).performClick ()
294294
295- val questionnaireResponse = runBlocking { getQuestionnaireResponse() }
296- val answer = questionnaireResponse.item.first().answer.first().valueDateTimeType
297- // check Locale
298- assertThat(answer.localDateTime).isEqualTo(LocalDateTime .of(2005 , 1 , 5 , 6 , 10 ))
295+ composeTestRule
296+ .onNodeWithContentDescription(" Select minutes" , substring = true )
297+ .performClick()
298+ composeTestRule.onNodeWithContentDescription(" 10 minutes" , substring = true ).performClick()
299+
300+ composeTestRule.onNodeWithText(" OK" ).performClick()
301+ // Synchronize
302+ composeTestRule.waitForIdle()
303+
304+ val questionnaireResponse = getQuestionnaireResponse()
305+ val answer = questionnaireResponse.item.first().answer.first().valueDateTimeType
306+ // check Locale
307+ assertThat(answer.localDateTime).isEqualTo(LocalDateTime .of(2005 , 1 , 5 , 6 , 10 ))
308+ }
299309 }
300310
301311 @Test
302312 fun datePicker_shouldShowErrorForWrongDate () {
303313 buildFragmentFromQuestionnaire(" /component_date_picker.json" )
304314
305- // Add month and day. No need to add slashes as they are added automatically
306- composeTestRule.onNodeWithTag(DATE_TEXT_INPUT_FIELD ).performTextInput(" 0105" )
307- composeTestRule
308- .onNodeWithTag(DATE_TEXT_INPUT_FIELD )
309- .assert (
310- SemanticsMatcher .expectValue(
311- SemanticsProperties .Error ,
312- " Date format needs to be mm/dd/yyyy (e.g. 01/31/2023)" ,
313- ),
314- )
315+ runBlocking {
316+ // Add month and day. No need to add slashes as they are added automatically
317+ composeTestRule.onNodeWithTag(DATE_TEXT_INPUT_FIELD ).performTextInput(" 0105" )
318+ delay(HANDLE_INPUT_DEBOUNCE_TIME + 10L )
319+ composeTestRule
320+ .onNodeWithTag(DATE_TEXT_INPUT_FIELD )
321+ .assert (
322+ SemanticsMatcher .expectValue(
323+ SemanticsProperties .Error ,
324+ " Date format needs to be mm/dd/yyyy (e.g. 01/31/2023)" ,
325+ ),
326+ )
327+ }
315328 }
316329
317330 @Test
318331 fun datePicker_shouldSaveInQuestionnaireResponseWhenCorrectDateEntered () {
319332 buildFragmentFromQuestionnaire(" /component_date_picker.json" )
320333
321- composeTestRule.onNodeWithTag(DATE_TEXT_INPUT_FIELD ).performTextInput(" 01052005" )
322- composeTestRule
323- .onNodeWithTag(DATE_TEXT_INPUT_FIELD )
324- .assert (SemanticsMatcher .keyNotDefined(SemanticsProperties .Error ))
325-
326334 runBlocking {
335+ composeTestRule.onNodeWithTag(DATE_TEXT_INPUT_FIELD ).performTextInput(" 01052005" )
336+ delay(HANDLE_INPUT_DEBOUNCE_TIME + 10L )
337+ composeTestRule
338+ .onNodeWithTag(DATE_TEXT_INPUT_FIELD )
339+ .assert (SemanticsMatcher .keyNotDefined(SemanticsProperties .Error ))
340+
327341 val answer = getQuestionnaireResponse().item.first().answer.first().valueDateType
328342 assertThat(answer.localDate).isEqualTo(LocalDate .of(2005 , 1 , 5 ))
329343 }
@@ -579,19 +593,29 @@ class QuestionnaireUiEspressoTest {
579593 @Test
580594 fun clearAllAnswers_shouldClearDraftAnswer () {
581595 val questionnaireFragment = buildFragmentFromQuestionnaire(" /component_date_picker.json" )
582- // Add month and day. No need to add slashes as they are added automatically
583- composeTestRule
584- .onNodeWithTag(DATE_TEXT_INPUT_FIELD , useUnmergedTree = true )
585- .performTextInput(" 0105" )
586- composeTestRule
587- .onNodeWithTag(DATE_TEXT_INPUT_FIELD , useUnmergedTree = true )
588- .assertTextEquals(" 01/05/" )
589596
590- questionnaireFragment.clearAllAnswers()
597+ runBlocking {
598+ // Add month and day. No need to add slashes as they are added automatically
599+ composeTestRule
600+ .onNodeWithTag(DATE_TEXT_INPUT_FIELD , useUnmergedTree = true )
601+ .performTextInput(" 0105" )
602+ composeTestRule
603+ .onNodeWithTag(DATE_TEXT_INPUT_FIELD , useUnmergedTree = true )
604+ .assertTextEquals(" 01/05" )
605+ delay(HANDLE_INPUT_DEBOUNCE_TIME * 3 )
606+
607+ val str =
608+ FhirContext .forR4Cached()
609+ .newJsonParser()
610+ .encodeToString(questionnaireFragment.getQuestionnaireResponse())
611+ println (" Yellow" )
612+ println (str)
613+ questionnaireFragment.clearAllAnswers()
591614
592- composeTestRule
593- .onNodeWithTag(DATE_TEXT_INPUT_FIELD , useUnmergedTree = true )
594- .assertTextEquals(" " )
615+ composeTestRule
616+ .onNodeWithTag(DATE_TEXT_INPUT_FIELD , useUnmergedTree = true )
617+ .assertTextEquals(" " )
618+ }
595619 }
596620
597621 @Test
0 commit comments