CLASS {{p}}tpo_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 total_of_2023 FOR TESTING. METHODS total_of_2024 FOR TESTING. METHODS counts_not_mixed FOR TESTING. METHODS order_without_items FOR TESTING. METHODS supplier_shown FOR TESTING. METHODS two_rows_same_no FOR TESTING. METHODS decimals FOR TESTING. METHODS year_in_result FOR TESTING. ENDCLASS. CLASS {{p}}tpo_hidden IMPLEMENTATION. METHOD class_setup. go_env = cl_cds_test_environment=>create( i_for_entity = '{{P}}I_PO_VALUE' ). ENDMETHOD. METHOD class_teardown. go_env->destroy( ). ENDMETHOD. METHOD setup. DATA lt_head TYPE STANDARD TABLE OF {{p}}po_head WITH EMPTY KEY. DATA lt_item TYPE STANDARD TABLE OF {{p}}po_item WITH EMPTY KEY. go_env->clear_doubles( ). lt_head = VALUE #( ( po_no = '1000' fiscal_year = '2023' supplier = 'ALPHA' ) ( po_no = '1000' fiscal_year = '2024' supplier = 'BETA' ) ( po_no = '2000' fiscal_year = '2023' supplier = 'GAMMA' ) ( po_no = '3000' fiscal_year = '2024' supplier = 'DELTA' ) ). lt_item = VALUE #( ( po_no = '1000' fiscal_year = '2023' item_no = 1 quantity = 3 price = '10.00' ) ( po_no = '1000' fiscal_year = '2023' item_no = 2 quantity = 2 price = '5.00' ) ( po_no = '1000' fiscal_year = '2024' item_no = 1 quantity = 1 price = '7.50' ) ( po_no = '3000' fiscal_year = '2024' item_no = 1 quantity = 4 price = '2.25' ) ). go_env->insert_test_data( lt_head ). go_env->insert_test_data( lt_item ). ENDMETHOD. METHOD total_of_2023. SELECT SINGLE total_value FROM {{p}}i_po_value WHERE po_no = '1000' AND fiscal_year = '2023' INTO @DATA(lv_total). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '40.00' ) act = CONV decfloat34( lv_total ) ). ENDMETHOD. METHOD total_of_2024. SELECT SINGLE total_value FROM {{p}}i_po_value WHERE po_no = '1000' AND fiscal_year = '2024' INTO @DATA(lv_total). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '7.50' ) act = CONV decfloat34( lv_total ) ). ENDMETHOD. METHOD counts_not_mixed. SELECT SINGLE item_count FROM {{p}}i_po_value WHERE po_no = '1000' AND fiscal_year = '2023' INTO @DATA(lv_count). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_count ). SELECT SINGLE item_count FROM {{p}}i_po_value WHERE po_no = '1000' AND fiscal_year = '2024' INTO @DATA(lv_count_2024). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_count_2024 ). ENDMETHOD. METHOD order_without_items. SELECT COUNT(*) FROM {{p}}i_po_value INTO @DATA(lv_rows). cl_abap_unit_assert=>assert_equals( exp = 3 act = lv_rows ). ENDMETHOD. METHOD supplier_shown. SELECT SINGLE supplier FROM {{p}}i_po_value WHERE po_no = '1000' AND fiscal_year = '2024' INTO @DATA(lv_supplier). cl_abap_unit_assert=>assert_equals( exp = 'BETA' act = lv_supplier ). ENDMETHOD. METHOD two_rows_same_no. SELECT COUNT(*) FROM {{p}}i_po_value WHERE po_no = '1000' INTO @DATA(lv_rows). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_rows ). ENDMETHOD. METHOD decimals. SELECT SINGLE total_value FROM {{p}}i_po_value WHERE po_no = '3000' AND fiscal_year = '2024' INTO @DATA(lv_total). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '9.00' ) act = CONV decfloat34( lv_total ) ). ENDMETHOD. METHOD year_in_result. SELECT SINGLE fiscal_year FROM {{p}}i_po_value WHERE po_no = '1000' AND supplier = 'BETA' INTO @DATA(lv_year). cl_abap_unit_assert=>assert_equals( exp = '2024' act = lv_year ). ENDMETHOD. ENDCLASS.