CLASS {{p}}solar_check_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PUBLIC SECTION. INTERFACES {{p}}if_solar_check. PRIVATE SECTION. METHODS assert_reason IMPORTING iv_exp TYPE {{p}}if_solar_check=>ty_reason iv_act TYPE {{p}}if_solar_check=>ty_reason. METHODS assert_roof IMPORTING iv_exp TYPE {{p}}if_solar_check=>ty_roof iv_act TYPE {{p}}if_solar_check=>ty_roof. METHODS reason_codes FOR TESTING. METHODS roof_codes FOR TESTING. METHODS limit_values FOR TESTING. METHODS reason_length FOR TESTING. METHODS roof_length FOR TESTING. METHODS request_structure FOR TESTING. METHODS request_table FOR TESTING. METHODS reason_table FOR TESTING. METHODS check_via_interface FOR TESTING. METHODS check_many_via_interface FOR TESTING. ENDCLASS. CLASS {{p}}solar_check_hidden IMPLEMENTATION. METHOD {{p}}if_solar_check~check. rv_reason = {{p}}if_solar_check=>c_reason-ok. IF is_request-panel_count < {{p}}if_solar_check=>c_min_panels. rv_reason = {{p}}if_solar_check=>c_reason-panels. ENDIF. ENDMETHOD. METHOD {{p}}if_solar_check~check_many. DATA ls_request TYPE {{p}}if_solar_check=>ty_request. LOOP AT it_request INTO ls_request. IF ls_request-tilt_angle < 0. APPEND {{p}}if_solar_check=>c_reason-tilt TO rt_reason. ELSE. APPEND {{p}}if_solar_check=>c_reason-ok TO rt_reason. ENDIF. ENDLOOP. ENDMETHOD. METHOD assert_reason. cl_abap_unit_assert=>assert_equals( exp = iv_exp act = iv_act ). ENDMETHOD. METHOD assert_roof. cl_abap_unit_assert=>assert_equals( exp = iv_exp act = iv_act ). ENDMETHOD. METHOD reason_codes. assert_reason( iv_exp = 'OK' iv_act = {{p}}if_solar_check=>c_reason-ok ). assert_reason( iv_exp = 'EMPTY' iv_act = {{p}}if_solar_check=>c_reason-empty_input ). assert_reason( iv_exp = 'ROOF' iv_act = {{p}}if_solar_check=>c_reason-roof_type ). assert_reason( iv_exp = 'SIZE' iv_act = {{p}}if_solar_check=>c_reason-roof_size ). assert_reason( iv_exp = 'PANELS' iv_act = {{p}}if_solar_check=>c_reason-panels ). assert_reason( iv_exp = 'TILT' iv_act = {{p}}if_solar_check=>c_reason-tilt ). assert_reason( iv_exp = 'BATTERY' iv_act = {{p}}if_solar_check=>c_reason-battery ). ENDMETHOD. METHOD roof_codes. assert_roof( iv_exp = 'TILE' iv_act = {{p}}if_solar_check=>c_roof_tile ). assert_roof( iv_exp = 'SLAT' iv_act = {{p}}if_solar_check=>c_roof_slate ). assert_roof( iv_exp = 'FLAT' iv_act = {{p}}if_solar_check=>c_roof_flat ). ENDMETHOD. METHOD limit_values. cl_abap_unit_assert=>assert_equals( exp = 4 act = {{p}}if_solar_check=>c_min_panels ). cl_abap_unit_assert=>assert_equals( exp = 60 act = {{p}}if_solar_check=>c_max_panels ). cl_abap_unit_assert=>assert_equals( exp = 5 act = {{p}}if_solar_check=>c_min_tilt ). cl_abap_unit_assert=>assert_equals( exp = 60 act = {{p}}if_solar_check=>c_max_tilt ). cl_abap_unit_assert=>assert_equals( exp = 20 act = {{p}}if_solar_check=>c_max_battery ). ENDMETHOD. METHOD reason_length. DATA lv_reason TYPE {{p}}if_solar_check=>ty_reason. DATA(lo_descr) = cl_abap_typedescr=>describe_by_data( lv_reason ). cl_abap_unit_assert=>assert_equals( exp = 10 act = lo_descr->length ). cl_abap_unit_assert=>assert_equals( exp = cl_abap_typedescr=>typekind_char act = lo_descr->type_kind ). ENDMETHOD. METHOD roof_length. DATA lv_roof TYPE {{p}}if_solar_check=>ty_roof. DATA(lo_descr) = cl_abap_typedescr=>describe_by_data( lv_roof ). cl_abap_unit_assert=>assert_equals( exp = 4 act = lo_descr->length ). cl_abap_unit_assert=>assert_equals( exp = cl_abap_typedescr=>typekind_char act = lo_descr->type_kind ). ENDMETHOD. METHOD request_structure. DATA ls_request TYPE {{p}}if_solar_check=>ty_request. ls_request = VALUE #( roof_type = {{p}}if_solar_check=>c_roof_tile roof_size = 80 panel_count = 20 tilt_angle = 30 battery_kwh = 10 ). DATA(lo_descr) = cl_abap_typedescr=>describe_by_data( ls_request ). DATA(lo_struct) = CAST cl_abap_structdescr( lo_descr ). DATA(lt_comp) = lo_struct->get_components( ). cl_abap_unit_assert=>assert_equals( exp = 5 act = lines( lt_comp ) ). cl_abap_unit_assert=>assert_equals( exp = 'ROOF_TYPE' act = lt_comp[ 1 ]-name ). cl_abap_unit_assert=>assert_equals( exp = 'ROOF_SIZE' act = lt_comp[ 2 ]-name ). cl_abap_unit_assert=>assert_equals( exp = 'PANEL_COUNT' act = lt_comp[ 3 ]-name ). cl_abap_unit_assert=>assert_equals( exp = 'TILT_ANGLE' act = lt_comp[ 4 ]-name ). cl_abap_unit_assert=>assert_equals( exp = 'BATTERY_KWH' act = lt_comp[ 5 ]-name ). cl_abap_unit_assert=>assert_equals( exp = cl_abap_typedescr=>typekind_char act = lt_comp[ 1 ]-type_kind ). cl_abap_unit_assert=>assert_equals( exp = 4 act = lt_comp[ 1 ]-length ). cl_abap_unit_assert=>assert_equals( exp = cl_abap_typedescr=>typekind_int act = lt_comp[ 2 ]-type_kind ). cl_abap_unit_assert=>assert_equals( exp = 4 act = lt_comp[ 2 ]-length ). cl_abap_unit_assert=>assert_equals( exp = cl_abap_typedescr=>typekind_int act = lt_comp[ 3 ]-type_kind ). cl_abap_unit_assert=>assert_equals( exp = 4 act = lt_comp[ 3 ]-length ). cl_abap_unit_assert=>assert_equals( exp = cl_abap_typedescr=>typekind_int act = lt_comp[ 4 ]-type_kind ). cl_abap_unit_assert=>assert_equals( exp = 4 act = lt_comp[ 4 ]-length ). cl_abap_unit_assert=>assert_equals( exp = cl_abap_typedescr=>typekind_int act = lt_comp[ 5 ]-type_kind ). cl_abap_unit_assert=>assert_equals( exp = 4 act = lt_comp[ 5 ]-length ). ENDMETHOD. METHOD request_table. DATA lv_kind TYPE c LENGTH 1. DATA lt_request TYPE {{p}}if_solar_check=>tt_request. lt_request = VALUE #( ( roof_type = {{p}}if_solar_check=>c_roof_flat roof_size = 120 panel_count = 30 tilt_angle = 15 battery_kwh = 10 ) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_request ) ). DESCRIBE TABLE lt_request KIND lv_kind. cl_abap_unit_assert=>assert_equals( exp = 'T' act = lv_kind ). ENDMETHOD. METHOD reason_table. DATA lv_kind TYPE c LENGTH 1. DATA lt_reason TYPE {{p}}if_solar_check=>tt_reason. lt_reason = VALUE #( ( {{p}}if_solar_check=>c_reason-ok ) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_reason ) ). DESCRIBE TABLE lt_reason KIND lv_kind. cl_abap_unit_assert=>assert_equals( exp = 'T' act = lv_kind ). ENDMETHOD. METHOD check_via_interface. DATA lo_cut TYPE REF TO {{p}}if_solar_check. DATA ls_request TYPE {{p}}if_solar_check=>ty_request. lo_cut = me. ls_request = VALUE #( roof_type = {{p}}if_solar_check=>c_roof_flat roof_size = 120 panel_count = 30 tilt_angle = 15 battery_kwh = 10 ). assert_reason( iv_exp = {{p}}if_solar_check=>c_reason-ok iv_act = lo_cut->check( ls_request ) ). ENDMETHOD. METHOD check_many_via_interface. DATA lo_cut TYPE REF TO {{p}}if_solar_check. DATA lt_request TYPE {{p}}if_solar_check=>tt_request. DATA lt_reason TYPE {{p}}if_solar_check=>tt_reason. lo_cut = me. lt_request = VALUE #( ( roof_type = {{p}}if_solar_check=>c_roof_tile roof_size = 80 panel_count = 20 tilt_angle = 30 battery_kwh = 0 ) ). lt_reason = lo_cut->check_many( lt_request ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_reason ) ). assert_reason( iv_exp = {{p}}if_solar_check=>c_reason-ok iv_act = lt_reason[ 1 ] ). ENDMETHOD. ENDCLASS.