CLASS {{p}}mill_charge_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. TYPES ty_min TYPE p LENGTH 8 DECIMALS 2. CLASS-DATA go_env TYPE REF TO if_cds_test_environment. CLASS-METHODS class_setup. CLASS-METHODS class_teardown. METHODS setup. METHODS charge_of_one_job FOR TESTING. METHODS min_charge_drives_charge FOR TESTING. ENDCLASS. CLASS {{p}}mill_charge_test IMPLEMENTATION. METHOD class_setup. go_env = cl_cds_test_environment=>create( i_for_entity = '{{P}}I_MILL_CHARGE' ). ENDMETHOD. METHOD class_teardown. go_env->destroy( ). ENDMETHOD. METHOD setup. DATA lt_job TYPE STANDARD TABLE OF {{p}}milljob WITH EMPTY KEY. DATA lt_lot TYPE STANDARD TABLE OF {{p}}milllot WITH EMPTY KEY. go_env->clear_doubles( ). lt_job = VALUE #( ( job_id = 'A' farmer = 'C1' delivery_date = '20251101' ) ). lt_lot = VALUE #( ( job_id = 'A' lot_no = 1 grain = 'WHEAT' sacks = 2 mill_rate = '30.00' ) ( job_id = 'A' lot_no = 2 grain = 'RYE' sacks = 1 mill_rate = '20.00' ) ). go_env->insert_test_data( lt_job ). go_env->insert_test_data( lt_lot ). ENDMETHOD. METHOD charge_of_one_job. DATA lv_min TYPE ty_min. lv_min = '25.00'. SELECT SINGLE mill_amount, charge_amount FROM {{p}}i_mill_charge( p_min_charge = @lv_min ) WHERE job_id = 'A' INTO @DATA(ls_charge). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '80.00' ) act = CONV decfloat34( ls_charge-mill_amount ) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '80.00' ) act = CONV decfloat34( ls_charge-charge_amount ) ). ENDMETHOD. METHOD min_charge_drives_charge. DATA lv_min TYPE ty_min. lv_min = '100.00'. SELECT SINGLE charge_amount FROM {{p}}i_mill_charge( p_min_charge = @lv_min ) WHERE job_id = 'A' INTO @DATA(lv_charge). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '100.00' ) act = CONV decfloat34( lv_charge ) ). ENDMETHOD. ENDCLASS.