CLASS {{p}}t_mush_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS setup. METHODS teardown. METHODS add_batch IMPORTING iv_room TYPE string iv_grade TYPE string iv_batch TYPE string iv_weight TYPE decfloat34. METHODS call IMPORTING iv_a TYPE string iv_b TYPE string EXPORTING ev_total TYPE decfloat34 ev_rooms TYPE i ev_grade TYPE char1 ev_subrc TYPE sysubrc. METHODS sums_two_rooms FOR TESTING. METHODS ignores_bad_records FOR TESTING. METHODS finds_top_grade FOR TESTING. METHODS raises_without_records FOR TESTING. ENDCLASS. CLASS {{p}}t_mush_test IMPLEMENTATION. METHOD setup. DELETE FROM {{P}}HARVEST. ENDMETHOD. METHOD teardown. DELETE FROM {{P}}HARVEST. ENDMETHOD. METHOD add_batch. DATA ls_row TYPE {{P}}HARVEST. ls_row-room_id = iv_room. ls_row-grade = iv_grade. ls_row-batch_no = iv_batch. ls_row-weight_kg = iv_weight. INSERT {{P}}HARVEST FROM @ls_row. cl_abap_unit_assert=>assert_subrc( exp = 0 ). ENDMETHOD. METHOD call. CALL FUNCTION '{{P}}MUSH_HARVEST' EXPORTING iv_room_a = iv_a iv_room_b = iv_b IMPORTING ev_total_kg = ev_total ev_room_count = ev_rooms ev_top_grade = ev_grade EXCEPTIONS no_stock = 1 OTHERS = 2. ev_subrc = sy-subrc. ENDMETHOD. METHOD sums_two_rooms. add_batch( iv_room = 'R01' iv_grade = 'A' iv_batch = '001' iv_weight = '10.000' ). add_batch( iv_room = 'R02' iv_grade = 'B' iv_batch = '001' iv_weight = '5.000' ). call( EXPORTING iv_a = 'R01' iv_b = 'R02' IMPORTING ev_total = DATA(lv_total) ev_rooms = DATA(lv_rooms) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 15 ) act = lv_total ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_rooms ). ENDMETHOD. METHOD ignores_bad_records. add_batch( iv_room = 'R01' iv_grade = 'D' iv_batch = '001' iv_weight = '4.000' ). add_batch( iv_room = 'R01' iv_grade = 'A' iv_batch = '002' iv_weight = '0.000' ). add_batch( iv_room = 'R01' iv_grade = 'B' iv_batch = '003' iv_weight = '3.000' ). call( EXPORTING iv_a = 'R01' iv_b = 'R02' IMPORTING ev_total = DATA(lv_total) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 3 ) act = lv_total ). ENDMETHOD. METHOD finds_top_grade. add_batch( iv_room = 'R01' iv_grade = 'A' iv_batch = '001' iv_weight = '1.000' ). add_batch( iv_room = 'R01' iv_grade = 'B' iv_batch = '002' iv_weight = '9.000' ). call( EXPORTING iv_a = 'R01' iv_b = 'R01' IMPORTING ev_grade = DATA(lv_grade) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = 'B' act = lv_grade ). ENDMETHOD. METHOD raises_without_records. call( EXPORTING iv_a = 'R01' iv_b = 'R02' IMPORTING ev_total = DATA(lv_total) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_total ). ENDMETHOD. ENDCLASS.