CLASS {{p}}d01_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}care_visit_checker. METHODS setup. METHODS accepts_valid_visit FOR TESTING. METHODS accepts_touching_visits FOR TESTING. METHODS rejects_empty_visit_id FOR TESTING. METHODS rejects_empty_client FOR TESTING. METHODS rejects_empty_carer FOR TESTING. METHODS rejects_early_start FOR TESTING. METHODS rejects_late_end FOR TESTING. METHODS rejects_bad_duration FOR TESTING. METHODS rejects_too_long FOR TESTING. METHODS rejects_carer_overlap FOR TESTING. METHODS rejects_client_overlap FOR TESTING. METHODS carer_overlap_first FOR TESTING. METHODS expect_reason IMPORTING is_visit TYPE {{p}}care_visit_checker=>ty_visit it_plan TYPE {{p}}care_visit_checker=>tt_visit iv_reason TYPE {{p}}if_care_reason=>ty_reason. ENDCLASS. CLASS {{p}}d01_hidden IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}care_visit_checker( ). ENDMETHOD. METHOD accepts_valid_visit. DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit( visit_id = 'V1' client_id = 'K1' carer_id = 'C1' start_hour = 9 end_hour = 11 ). DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ). TRY. mo_cut->check_visit( is_visit = ls_visit it_plan = lt_plan ). CATCH {{p}}cx_care_visit INTO DATA(lx). cl_abap_unit_assert=>fail( msg = |unexpected reason { lx->mv_reason }| ). ENDTRY. ENDMETHOD. METHOD accepts_touching_visits. DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit( visit_id = 'V2' client_id = 'K1' carer_id = 'C1' start_hour = 9 end_hour = 11 ). DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ( visit_id = 'P1' client_id = 'K9' carer_id = 'C1' start_hour = 7 end_hour = 9 ) ). TRY. mo_cut->check_visit( is_visit = ls_visit it_plan = lt_plan ). CATCH {{p}}cx_care_visit INTO DATA(lx). cl_abap_unit_assert=>fail( msg = |unexpected reason { lx->mv_reason }| ). ENDTRY. ENDMETHOD. METHOD rejects_empty_visit_id. DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit( visit_id = '' client_id = '' carer_id = 'C1' start_hour = 9 end_hour = 11 ). DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ). expect_reason( is_visit = ls_visit it_plan = lt_plan iv_reason = {{p}}if_care_reason=>c_reason-no_visit_id ). ENDMETHOD. METHOD rejects_empty_client. DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit( visit_id = 'V1' client_id = '' carer_id = 'C1' start_hour = 9 end_hour = 11 ). DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ). TRY. mo_cut->check_visit( is_visit = ls_visit it_plan = lt_plan ). cl_abap_unit_assert=>fail( msg = 'exception expected' ). CATCH {{p}}cx_care_visit INTO DATA(lx). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_care_reason=>c_reason-no_client act = lx->mv_reason ). cl_abap_unit_assert=>assert_equals( exp = 'V1' act = lx->mv_visit_id ). ENDTRY. ENDMETHOD. METHOD rejects_empty_carer. DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit( visit_id = 'V1' client_id = 'K1' carer_id = '' start_hour = 9 end_hour = 11 ). DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ). expect_reason( is_visit = ls_visit it_plan = lt_plan iv_reason = {{p}}if_care_reason=>c_reason-no_carer ). ENDMETHOD. METHOD rejects_early_start. DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit( visit_id = 'V1' client_id = 'K1' carer_id = 'C1' start_hour = 6 end_hour = 8 ). DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ). expect_reason( is_visit = ls_visit it_plan = lt_plan iv_reason = {{p}}if_care_reason=>c_reason-outside_hours ). ENDMETHOD. METHOD rejects_late_end. DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit( visit_id = 'V1' client_id = 'K1' carer_id = 'C1' start_hour = 21 end_hour = 21 ). DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ). expect_reason( is_visit = ls_visit it_plan = lt_plan iv_reason = {{p}}if_care_reason=>c_reason-outside_hours ). ENDMETHOD. METHOD rejects_bad_duration. DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit( visit_id = 'V1' client_id = 'K1' carer_id = 'C1' start_hour = 9 end_hour = 9 ). DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ). expect_reason( is_visit = ls_visit it_plan = lt_plan iv_reason = {{p}}if_care_reason=>c_reason-bad_duration ). ENDMETHOD. METHOD rejects_too_long. DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit( visit_id = 'V1' client_id = 'K1' carer_id = 'C1' start_hour = 8 end_hour = 13 ). DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ). expect_reason( is_visit = ls_visit it_plan = lt_plan iv_reason = {{p}}if_care_reason=>c_reason-too_long ). ENDMETHOD. METHOD rejects_carer_overlap. DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit( visit_id = 'V1' client_id = 'K1' carer_id = 'C1' start_hour = 11 end_hour = 13 ). DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ( visit_id = 'P1' client_id = 'K9' carer_id = 'C1' start_hour = 10 end_hour = 12 ) ). expect_reason( is_visit = ls_visit it_plan = lt_plan iv_reason = {{p}}if_care_reason=>c_reason-carer_overlap ). ENDMETHOD. METHOD rejects_client_overlap. DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit( visit_id = 'V1' client_id = 'K1' carer_id = 'C1' start_hour = 11 end_hour = 13 ). DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ( visit_id = 'P1' client_id = 'K1' carer_id = 'C9' start_hour = 10 end_hour = 12 ) ). expect_reason( is_visit = ls_visit it_plan = lt_plan iv_reason = {{p}}if_care_reason=>c_reason-client_overlap ). ENDMETHOD. METHOD carer_overlap_first. DATA(ls_visit) = VALUE {{p}}care_visit_checker=>ty_visit( visit_id = 'V1' client_id = 'K1' carer_id = 'C1' start_hour = 11 end_hour = 13 ). DATA(lt_plan) = VALUE {{p}}care_visit_checker=>tt_visit( ( visit_id = 'P1' client_id = 'K1' carer_id = 'C1' start_hour = 10 end_hour = 12 ) ). expect_reason( is_visit = ls_visit it_plan = lt_plan iv_reason = {{p}}if_care_reason=>c_reason-carer_overlap ). ENDMETHOD. METHOD expect_reason. TRY. mo_cut->check_visit( is_visit = is_visit it_plan = it_plan ). cl_abap_unit_assert=>fail( msg = 'exception expected' ). CATCH {{p}}cx_care_visit INTO DATA(lx). cl_abap_unit_assert=>assert_equals( exp = iv_reason act = lx->mv_reason ). ENDTRY. ENDMETHOD. ENDCLASS.