CLASS {{p}}t14_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS call IMPORTING iv_grain_type TYPE string iv_weight_kg TYPE decfloat34 iv_moisture_pct TYPE decfloat34 iv_supplier TYPE string EXPORTING ev_accepted TYPE abap_bool ev_drying_cost TYPE decfloat34 ev_reason TYPE string ev_text TYPE string. METHODS accepts_valid_delivery FOR TESTING. METHODS rejects_bad_weight FOR TESTING. METHODS rejects_missing_supplier FOR TESTING. METHODS rejects_unknown_grain FOR TESTING. METHODS rejects_moisture_out_of_range FOR TESTING. METHODS rejects_wheat_too_wet FOR TESTING. METHODS accepts_barley_at_limit FOR TESTING. METHODS accepts_rye_at_limit FOR TESTING. METHODS calculates_drying_cost FOR TESTING. METHODS sets_message_text FOR TESTING. ENDCLASS. CLASS {{p}}t14_hidden IMPLEMENTATION. METHOD call. ev_accepted = abap_false. ev_drying_cost = 0. ev_reason = ``. ev_text = ``. TRY. CALL FUNCTION '{{P}}GRAIN_CHECK' EXPORTING iv_grain_type = iv_grain_type iv_weight_kg = iv_weight_kg iv_moisture_pct = iv_moisture_pct iv_supplier = iv_supplier IMPORTING ev_accepted = ev_accepted ev_drying_cost = ev_drying_cost. CATCH {{p}}cx_grain INTO DATA(lo_ex). ev_reason = lo_ex->mv_reason. ev_text = lo_ex->mv_text. ENDTRY. ENDMETHOD. METHOD accepts_valid_delivery. call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 1000 iv_moisture_pct = '12.0' iv_supplier = 'S1' IMPORTING ev_accepted = DATA(lv_accepted) ev_drying_cost = DATA(lv_cost) ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_initial( act = lv_reason msg = 'no exception expected' ). cl_abap_unit_assert=>assert_true( act = lv_accepted ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_cost ). ENDMETHOD. METHOD rejects_bad_weight. call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 0 iv_moisture_pct = '12.0' iv_supplier = 'S1' IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_equals( exp = 'WEIGHT' act = lv_reason ). call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = -5 iv_moisture_pct = '12.0' iv_supplier = 'S1' IMPORTING ev_reason = DATA(lv_reason2) ). cl_abap_unit_assert=>assert_equals( exp = 'WEIGHT' act = lv_reason2 ). ENDMETHOD. METHOD rejects_missing_supplier. call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 100 iv_moisture_pct = '12.0' iv_supplier = '' IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_equals( exp = 'SUPPLIER' act = lv_reason ). ENDMETHOD. METHOD rejects_unknown_grain. call( EXPORTING iv_grain_type = 'OATS' iv_weight_kg = 100 iv_moisture_pct = '12.0' iv_supplier = 'S1' IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_equals( exp = 'GRAIN_TYPE' act = lv_reason ). ENDMETHOD. METHOD rejects_moisture_out_of_range. call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 100 iv_moisture_pct = '120' iv_supplier = 'S1' IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_equals( exp = 'MOISTURE_RANGE' act = lv_reason ). call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 100 iv_moisture_pct = '-1' iv_supplier = 'S1' IMPORTING ev_reason = DATA(lv_reason2) ). cl_abap_unit_assert=>assert_equals( exp = 'MOISTURE_RANGE' act = lv_reason2 ). ENDMETHOD. METHOD rejects_wheat_too_wet. call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 100 iv_moisture_pct = '14.6' iv_supplier = 'S1' IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_equals( exp = 'MOISTURE' act = lv_reason ). ENDMETHOD. METHOD accepts_barley_at_limit. call( EXPORTING iv_grain_type = 'BARLEY' iv_weight_kg = 100 iv_moisture_pct = '14.0' iv_supplier = 'S1' IMPORTING ev_accepted = DATA(lv_accepted) ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_initial( act = lv_reason msg = 'no exception expected' ). cl_abap_unit_assert=>assert_true( act = lv_accepted ). ENDMETHOD. METHOD accepts_rye_at_limit. call( EXPORTING iv_grain_type = 'RYE' iv_weight_kg = 100 iv_moisture_pct = '15.0' iv_supplier = 'S1' IMPORTING ev_accepted = DATA(lv_accepted) ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_initial( act = lv_reason msg = 'no exception expected' ). cl_abap_unit_assert=>assert_true( act = lv_accepted ). ENDMETHOD. METHOD calculates_drying_cost. call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 1000 iv_moisture_pct = '13.5' iv_supplier = 'S1' IMPORTING ev_drying_cost = DATA(lv_cost) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '750' ) act = lv_cost ). call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 1 iv_moisture_pct = '12.53' iv_supplier = 'S1' IMPORTING ev_drying_cost = DATA(lv_cost2) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '0.02' ) act = lv_cost2 ). ENDMETHOD. METHOD sets_message_text. call( EXPORTING iv_grain_type = 'WHEAT' iv_weight_kg = 0 iv_moisture_pct = '12.0' iv_supplier = 'S1' IMPORTING ev_text = DATA(lv_text) ). cl_abap_unit_assert=>assert_equals( exp = 'Weight must be greater than zero' act = lv_text ). ENDMETHOD. ENDCLASS.