CLASS {{p}}t16_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. CLASS-DATA go_env TYPE REF TO if_cds_test_environment. CLASS-METHODS class_setup. CLASS-METHODS class_teardown. METHODS setup. METHODS slot_counts FOR TESTING. METHODS empty_slots FOR TESTING. METHODS fill_rate_decimals FOR TESTING. METHODS fill_rate_half FOR TESTING. METHODS status_empty FOR TESTING. METHODS status_low FOR TESTING. METHODS status_ok FOR TESTING. METHODS status_at_limit FOR TESTING. METHODS machine_without_slots FOR TESTING. METHODS location_upper FOR TESTING. ENDCLASS. CLASS {{p}}t16_hidden IMPLEMENTATION. METHOD class_setup. go_env = cl_cds_test_environment=>create( i_for_entity = '{{P}}I_VEND_STATE' ). ENDMETHOD. METHOD class_teardown. go_env->destroy( ). ENDMETHOD. METHOD setup. DATA lt_mach TYPE STANDARD TABLE OF {{p}}vmach WITH EMPTY KEY. DATA lt_slot TYPE STANDARD TABLE OF {{p}}vslot WITH EMPTY KEY. go_env->clear_doubles( ). lt_mach = VALUE #( ( machine_id = 'M1' location = 'Hall A' ) ( machine_id = 'M2' location = 'Bay 2' ) ( machine_id = 'M3' location = 'Depot C' ) ( machine_id = 'M4' location = 'Kiosk D' ) ( machine_id = 'M5' location = 'Gate E' ) ( machine_id = 'M6' location = 'Pier F' ) ). lt_slot = VALUE #( ( machine_id = 'M1' slot_no = 1 product = 'COLA' fill_level = 3 max_units = 10 ) ( machine_id = 'M1' slot_no = 2 product = 'WATER' fill_level = 0 max_units = 10 ) ( machine_id = 'M2' slot_no = 1 product = 'CHIPS' fill_level = 0 max_units = 5 ) ( machine_id = 'M2' slot_no = 2 product = 'NUTS' fill_level = 0 max_units = 5 ) ( machine_id = 'M3' slot_no = 1 product = 'COLA' fill_level = 5 max_units = 10 ) ( machine_id = 'M3' slot_no = 2 product = 'JUICE' fill_level = 5 max_units = 10 ) ( machine_id = 'M5' slot_no = 1 product = 'TEA' fill_level = 5 max_units = 20 ) ( machine_id = 'M6' slot_no = 1 product = 'MILK' fill_level = 1 max_units = 8 ) ). go_env->insert_test_data( lt_mach ). go_env->insert_test_data( lt_slot ). ENDMETHOD. METHOD slot_counts. SELECT SINGLE slot_count FROM {{p}}i_vend_state WHERE machine_id = 'M1' INTO @DATA(lv_two). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_two ). SELECT SINGLE slot_count FROM {{p}}i_vend_state WHERE machine_id = 'M5' INTO @DATA(lv_one). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_one ). ENDMETHOD. METHOD empty_slots. SELECT SINGLE empty_slots FROM {{p}}i_vend_state WHERE machine_id = 'M1' INTO @DATA(lv_one). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_one ). SELECT SINGLE empty_slots FROM {{p}}i_vend_state WHERE machine_id = 'M2' INTO @DATA(lv_two). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_two ). SELECT SINGLE empty_slots FROM {{p}}i_vend_state WHERE machine_id = 'M3' INTO @DATA(lv_none). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_none ). ENDMETHOD. METHOD fill_rate_decimals. SELECT SINGLE fill_rate FROM {{p}}i_vend_state WHERE machine_id = 'M6' INTO @DATA(lv_rate). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '12.5' ) act = CONV decfloat34( lv_rate ) ). ENDMETHOD. METHOD fill_rate_half. SELECT SINGLE fill_rate FROM {{p}}i_vend_state WHERE machine_id = 'M3' INTO @DATA(lv_rate). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '50.0' ) act = CONV decfloat34( lv_rate ) ). ENDMETHOD. METHOD status_empty. SELECT SINGLE status FROM {{p}}i_vend_state WHERE machine_id = 'M2' INTO @DATA(lv_status). cl_abap_unit_assert=>assert_equals( exp = 'EMPTY' act = lv_status ). ENDMETHOD. METHOD status_low. SELECT SINGLE status FROM {{p}}i_vend_state WHERE machine_id = 'M1' INTO @DATA(lv_status). cl_abap_unit_assert=>assert_equals( exp = 'LOW' act = lv_status ). ENDMETHOD. METHOD status_ok. SELECT SINGLE status FROM {{p}}i_vend_state WHERE machine_id = 'M3' INTO @DATA(lv_status). cl_abap_unit_assert=>assert_equals( exp = 'OK' act = lv_status ). ENDMETHOD. METHOD status_at_limit. SELECT SINGLE status FROM {{p}}i_vend_state WHERE machine_id = 'M5' INTO @DATA(lv_status). cl_abap_unit_assert=>assert_equals( exp = 'OK' act = lv_status ). ENDMETHOD. METHOD machine_without_slots. SELECT COUNT(*) FROM {{p}}i_vend_state INTO @DATA(lv_rows). cl_abap_unit_assert=>assert_equals( exp = 5 act = lv_rows ). ENDMETHOD. METHOD location_upper. SELECT SINGLE location FROM {{p}}i_vend_state WHERE machine_id = 'M1' INTO @DATA(lv_location). cl_abap_unit_assert=>assert_equals( exp = 'HALL A' act = lv_location ). ENDMETHOD. ENDCLASS.