CLASS {{p}}repl_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. TYPES: BEGIN OF ty_result, qty TYPE decfloat34, action TYPE string, subrc TYPE sysubrc, END OF ty_result. METHODS call IMPORTING iv_stock TYPE decfloat34 iv_safety TYPE decfloat34 iv_lot_size TYPE decfloat34 iv_min_order TYPE decfloat34 RETURNING VALUE(rs_result) TYPE ty_result. METHODS exact_multiple FOR TESTING. METHODS partial_lot FOR TESTING. METHODS no_order FOR TESTING. METHODS minimum_order FOR TESTING. METHODS invalid_input FOR TESTING. ENDCLASS. CLASS {{p}}repl_test IMPLEMENTATION. METHOD call. CALL FUNCTION '{{P}}REPL_QTY' EXPORTING iv_stock = iv_stock iv_safety = iv_safety iv_lot_size = iv_lot_size iv_min_order = iv_min_order IMPORTING ev_order_qty = rs_result-qty ev_action = rs_result-action EXCEPTIONS invalid_input = 1 OTHERS = 2. rs_result-subrc = sy-subrc. ENDMETHOD. METHOD exact_multiple. DATA(ls_result) = call( iv_stock = 0 iv_safety = 100 iv_lot_size = 50 iv_min_order = 0 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 100 ) act = ls_result-qty ). ENDMETHOD. METHOD partial_lot. DATA(ls_result) = call( iv_stock = 0 iv_safety = 101 iv_lot_size = 50 iv_min_order = 0 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 150 ) act = ls_result-qty ). ENDMETHOD. METHOD no_order. DATA(ls_result) = call( iv_stock = 300 iv_safety = 100 iv_lot_size = 50 iv_min_order = 0 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = ls_result-qty ). cl_abap_unit_assert=>assert_equals( exp = `NONE` act = ls_result-action ). ENDMETHOD. METHOD minimum_order. DATA(ls_result) = call( iv_stock = 0 iv_safety = 5 iv_lot_size = 0 iv_min_order = 20 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 20 ) act = ls_result-qty ). ENDMETHOD. METHOD invalid_input. DATA(ls_result) = call( iv_stock = 0 iv_safety = 100 iv_lot_size = -5 iv_min_order = 0 ). cl_abap_unit_assert=>assert_equals( exp = 1 act = ls_result-subrc ). ENDMETHOD. ENDCLASS.