CLASS ltc_seed_lot_checker DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. CONSTANTS c_check_date TYPE d VALUE '20250601'. DATA mo_cut TYPE REF TO {{p}}seed_lot_checker. METHODS setup. METHODS valid_lot RETURNING VALUE(rs_lot) TYPE {{p}}seed_lot_checker=>ty_lot. METHODS releases_valid_lot FOR TESTING. METHODS rejects_bad_lot_no FOR TESTING. METHODS rejects_old_harvest FOR TESTING. METHODS rejects_low_germination FOR TESTING. METHODS rejects_high_moisture FOR TESTING. METHODS accepts_limit_values FOR TESTING. ENDCLASS. CLASS ltc_seed_lot_checker IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}seed_lot_checker( ). ENDMETHOD. METHOD valid_lot. rs_lot = VALUE #( lot_no = 'WHEA123456' germination = 90 moisture = '11.0' harvest_date = '20250501' ). ENDMETHOD. METHOD releases_valid_lot. TRY. mo_cut->check_lot( is_lot = valid_lot( ) iv_check_date = c_check_date ). CATCH {{p}}cx_seed_lot INTO DATA(lo_ex). cl_abap_unit_assert=>fail( msg = lo_ex->get_message( ) ). ENDTRY. ENDMETHOD. METHOD rejects_bad_lot_no. DATA(ls_lot) = valid_lot( ). ls_lot-lot_no = 'AB12345678'. TRY. mo_cut->check_lot( is_lot = ls_lot iv_check_date = c_check_date ). cl_abap_unit_assert=>fail( msg = `CX_LOT_FORMAT expected` ). CATCH {{p}}cx_lot_format INTO DATA(lo_format). cl_abap_unit_assert=>assert_equals( exp = 'The lot number has an invalid format.' act = lo_format->get_message( ) ). CATCH {{p}}cx_seed_lot. cl_abap_unit_assert=>fail( msg = `CX_LOT_FORMAT expected` ). ENDTRY. ENDMETHOD. METHOD rejects_old_harvest. DATA(ls_lot) = valid_lot( ). ls_lot-harvest_date = '20240531'. TRY. mo_cut->check_lot( is_lot = ls_lot iv_check_date = c_check_date ). cl_abap_unit_assert=>fail( msg = `CX_LOT_DATE expected` ). CATCH {{p}}cx_lot_date INTO DATA(lo_date). cl_abap_unit_assert=>assert_equals( exp = 'The harvest date is not valid for the release check.' act = lo_date->get_message( ) ). CATCH {{p}}cx_seed_lot. cl_abap_unit_assert=>fail( msg = `CX_LOT_DATE expected` ). ENDTRY. ENDMETHOD. METHOD rejects_low_germination. DATA(ls_lot) = valid_lot( ). ls_lot-germination = 84. TRY. mo_cut->check_lot( is_lot = ls_lot iv_check_date = c_check_date ). cl_abap_unit_assert=>fail( msg = `CX_LOT_GERMINATION expected` ). CATCH {{p}}cx_lot_germination INTO DATA(lo_germ). cl_abap_unit_assert=>assert_equals( exp = 'The germination rate is below the minimum of 85 percent.' act = lo_germ->get_message( ) ). CATCH {{p}}cx_seed_lot. cl_abap_unit_assert=>fail( msg = `CX_LOT_GERMINATION expected` ). ENDTRY. ENDMETHOD. METHOD rejects_high_moisture. DATA(ls_lot) = valid_lot( ). ls_lot-moisture = '12.1'. TRY. mo_cut->check_lot( is_lot = ls_lot iv_check_date = c_check_date ). cl_abap_unit_assert=>fail( msg = `CX_LOT_MOISTURE expected` ). CATCH {{p}}cx_lot_moisture INTO DATA(lo_moist). cl_abap_unit_assert=>assert_equals( exp = 'The moisture is above the maximum of 12.0 percent.' act = lo_moist->get_message( ) ). CATCH {{p}}cx_seed_lot. cl_abap_unit_assert=>fail( msg = `CX_LOT_MOISTURE expected` ). ENDTRY. ENDMETHOD. METHOD accepts_limit_values. DATA(ls_lot) = valid_lot( ). ls_lot-germination = 85. ls_lot-moisture = '12.0'. ls_lot-harvest_date = '20240601'. TRY. mo_cut->check_lot( is_lot = ls_lot iv_check_date = c_check_date ). CATCH {{p}}cx_seed_lot INTO DATA(lo_ex). cl_abap_unit_assert=>fail( msg = lo_ex->get_message( ) ). ENDTRY. ENDMETHOD. ENDCLASS.