CLASS ltc_stock_age DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. CONSTANTS c_key_date TYPE dats VALUE '20240401'. DATA mo_cut TYPE REF TO {{p}}if_stock_age. METHODS setup. METHODS gr_date_for_age IMPORTING iv_age TYPE i RETURNING VALUE(rv_date) TYPE dats. METHODS empty_input FOR TESTING. METHODS bucket_01 FOR TESTING. METHODS bucket_04 FOR TESTING. METHODS invalid_rows FOR TESTING. METHODS total_by_material FOR TESTING. ENDCLASS. CLASS ltc_stock_age IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}stock_age( ). ENDMETHOD. METHOD gr_date_for_age. rv_date = c_key_date - iv_age. ENDMETHOD. METHOD empty_input. cl_abap_unit_assert=>assert_initial( act = mo_cut->analyze( it_batch = VALUE {{p}}if_stock_age=>tt_batch( ) iv_key_date = c_key_date ) ). ENDMETHOD. METHOD bucket_01. DATA(lt_result) = mo_cut->analyze( it_batch = VALUE {{p}}if_stock_age=>tt_batch( ( material = 'MAT-1' batch = 'B1' quantity = 10 gr_date = gr_date_for_age( 30 ) ) ) iv_key_date = c_key_date ). cl_abap_unit_assert=>assert_equals( act = lt_result[ 1 ]-bucket exp = {{p}}if_stock_age=>c_bucket-d0_30 ). cl_abap_unit_assert=>assert_equals( act = lt_result[ 1 ]-quantity exp = 10 ). ENDMETHOD. METHOD bucket_04. DATA(lt_result) = mo_cut->analyze( it_batch = VALUE {{p}}if_stock_age=>tt_batch( ( material = 'MAT-1' batch = 'B1' quantity = 10 gr_date = gr_date_for_age( 91 ) ) ) iv_key_date = c_key_date ). cl_abap_unit_assert=>assert_equals( act = lt_result[ 1 ]-bucket exp = {{p}}if_stock_age=>c_bucket-d91_plus ). ENDMETHOD. METHOD invalid_rows. DATA(lt_result) = mo_cut->analyze( it_batch = VALUE {{p}}if_stock_age=>tt_batch( ( material = 'MAT-1' batch = 'B1' quantity = 10 gr_date = '00000000' ) ) iv_key_date = c_key_date ). cl_abap_unit_assert=>assert_initial( act = lt_result ). ENDMETHOD. METHOD total_by_material. DATA(lt_result) = mo_cut->total_by_material( it_batch = VALUE {{p}}if_stock_age=>tt_batch( ( material = 'MAT-2' batch = 'B1' quantity = 10 gr_date = gr_date_for_age( 1 ) ) ( material = 'MAT-1' batch = 'B2' quantity = 5 gr_date = gr_date_for_age( 100 ) ) ) iv_key_date = c_key_date ). cl_abap_unit_assert=>assert_equals( act = lt_result[ 1 ]-material exp = 'MAT-1' ). cl_abap_unit_assert=>assert_equals( act = lt_result[ 1 ]-quantity exp = 5 ). cl_abap_unit_assert=>assert_equals( act = lt_result[ 2 ]-material exp = 'MAT-2' ). cl_abap_unit_assert=>assert_equals( act = lt_result[ 2 ]-quantity exp = 10 ). ENDMETHOD. ENDCLASS.