CLASS {{p}}t61_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 shows_dome_data FOR TESTING. METHODS shows_scope_data FOR TESTING. METHODS shows_ids_and_visitors FOR TESTING. METHODS shows_night_date FOR TESTING. METHODS free_seats_positive FOR TESTING. METHODS free_seats_negative FOR TESTING. METHODS hides_unknown_dome FOR TESTING. METHODS hides_unknown_scope FOR TESTING. METHODS counts_rows FOR TESTING. ENDCLASS. CLASS {{p}}t61_hidden IMPLEMENTATION. METHOD class_setup. go_env = cl_cds_test_environment=>create( i_for_entity = '{{P}}I_STAR_NIGHT' ). ENDMETHOD. METHOD class_teardown. go_env->destroy( ). ENDMETHOD. METHOD setup. DATA lt_dome TYPE STANDARD TABLE OF {{p}}dome WITH EMPTY KEY. DATA lt_scope TYPE STANDARD TABLE OF {{p}}scope WITH EMPTY KEY. DATA lt_night TYPE STANDARD TABLE OF {{p}}night WITH EMPTY KEY. go_env->clear_doubles( ). lt_dome = VALUE #( ( dome_id = 'D1' dome_name = 'Main Dome' city = 'NORTH' capacity = 120 ) ( dome_id = 'D2' dome_name = 'Side Dome' city = 'SOUTH' capacity = 60 ) ). lt_scope = VALUE #( ( scope_id = 'S1' scope_name = 'Reflector' aperture_mm = 300 mount_kind = 'EQUATORIAL' ) ( scope_id = 'S2' scope_name = 'Refractor' aperture_mm = 150 mount_kind = 'ALT_AZ' ) ). lt_night = VALUE #( ( night_id = 'N1' dome_id = 'D1' scope_id = 'S1' visitors = 100 night_date = '20250601' ) ( night_id = 'N2' dome_id = 'D2' scope_id = 'S2' visitors = 70 night_date = '20250602' ) ( night_id = 'N3' dome_id = 'D9' scope_id = 'S1' visitors = 5 night_date = '20250603' ) ( night_id = 'N4' dome_id = 'D1' scope_id = 'S9' visitors = 5 night_date = '20250604' ) ). go_env->insert_test_data( lt_dome ). go_env->insert_test_data( lt_scope ). go_env->insert_test_data( lt_night ). ENDMETHOD. METHOD shows_dome_data. SELECT SINGLE dome_name, dome_city FROM {{p}}i_star_night WHERE night_id = 'N1' INTO @DATA(ls_row). cl_abap_unit_assert=>assert_equals( exp = 'Main Dome' act = ls_row-dome_name ). cl_abap_unit_assert=>assert_equals( exp = 'NORTH' act = ls_row-dome_city ). ENDMETHOD. METHOD shows_scope_data. SELECT SINGLE scope_name, aperture_mm FROM {{p}}i_star_night WHERE night_id = 'N2' INTO @DATA(ls_row). cl_abap_unit_assert=>assert_equals( exp = 'Refractor' act = ls_row-scope_name ). cl_abap_unit_assert=>assert_equals( exp = 150 act = ls_row-aperture_mm ). ENDMETHOD. METHOD shows_ids_and_visitors. SELECT SINGLE dome_id, scope_id, visitors FROM {{p}}i_star_night WHERE night_id = 'N2' INTO @DATA(ls_row). cl_abap_unit_assert=>assert_equals( exp = 'D2' act = ls_row-dome_id ). cl_abap_unit_assert=>assert_equals( exp = 'S2' act = ls_row-scope_id ). cl_abap_unit_assert=>assert_equals( exp = 70 act = ls_row-visitors ). ENDMETHOD. METHOD shows_night_date. DATA lv_expected TYPE dats VALUE '20250601'. SELECT SINGLE night_date FROM {{p}}i_star_night WHERE night_id = 'N1' INTO @DATA(lv_date). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_date ). ENDMETHOD. METHOD free_seats_positive. SELECT SINGLE free_seats FROM {{p}}i_star_night WHERE night_id = 'N1' INTO @DATA(lv_free). cl_abap_unit_assert=>assert_equals( exp = 20 act = lv_free ). ENDMETHOD. METHOD free_seats_negative. SELECT SINGLE free_seats FROM {{p}}i_star_night WHERE night_id = 'N2' INTO @DATA(lv_free). cl_abap_unit_assert=>assert_equals( exp = -10 act = lv_free ). ENDMETHOD. METHOD hides_unknown_dome. SELECT COUNT(*) FROM {{p}}i_star_night WHERE dome_id = 'D9' INTO @DATA(lv_rows). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rows ). ENDMETHOD. METHOD hides_unknown_scope. SELECT COUNT(*) FROM {{p}}i_star_night WHERE scope_id = 'S9' INTO @DATA(lv_rows). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rows ). ENDMETHOD. METHOD counts_rows. SELECT COUNT(*) FROM {{p}}i_star_night INTO @DATA(lv_rows). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_rows ). ENDMETHOD. ENDCLASS.