CLASS {{p}}t_rental_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 per_rental_totals FOR TESTING. METHODS charge_counts FOR TESTING. METHODS rental_without_charges FOR TESTING. METHODS customer_shown FOR TESTING. METHODS decimals FOR TESTING. METHODS two_customers FOR TESTING. ENDCLASS. CLASS {{p}}t_rental_hidden IMPLEMENTATION. METHOD class_setup. go_env = cl_cds_test_environment=>create( i_for_entity = '{{P}}I_RENTAL_TOTAL' ). ENDMETHOD. METHOD class_teardown. go_env->destroy( ). ENDMETHOD. METHOD setup. DATA lt_rental TYPE STANDARD TABLE OF {{p}}rental WITH EMPTY KEY. DATA lt_charge TYPE STANDARD TABLE OF {{p}}charge WITH EMPTY KEY. go_env->clear_doubles( ). lt_rental = VALUE #( ( rental_id = 'R1' customer = 'C1' pickup_date = '20240101' ) ( rental_id = 'R2' customer = 'C1' pickup_date = '20240102' ) ( rental_id = 'R3' customer = 'C2' pickup_date = '20240103' ) ( rental_id = 'R4' customer = 'C2' pickup_date = '20240104' ) ( rental_id = 'R5' customer = 'C3' pickup_date = '20240105' ) ). lt_charge = VALUE #( ( rental_id = 'R1' charge_no = 1 customer = 'C1' charge_type = 'FUEL' amount = '50.00' ) ( rental_id = 'R1' charge_no = 2 customer = 'C1' charge_type = 'TOLL' amount = '10.00' ) ( rental_id = 'R2' charge_no = 1 customer = 'C1' charge_type = 'FUEL' amount = '30.00' ) ( rental_id = 'R4' charge_no = 1 customer = 'C2' charge_type = 'FUEL' amount = '20.00' ) ( rental_id = 'R5' charge_no = 1 customer = 'C3' charge_type = 'FUEL' amount = '5.50' ) ( rental_id = 'R5' charge_no = 2 customer = 'C3' charge_type = 'TOLL' amount = '4.50' ) ). go_env->insert_test_data( lt_rental ). go_env->insert_test_data( lt_charge ). ENDMETHOD. METHOD per_rental_totals. SELECT SINGLE total_amount FROM {{p}}i_rental_total WHERE rental_id = 'R1' INTO @DATA(lv_total). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '60.00' ) act = CONV decfloat34( lv_total ) ). SELECT SINGLE total_amount FROM {{p}}i_rental_total WHERE rental_id = 'R2' INTO @DATA(lv_total2). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '30.00' ) act = CONV decfloat34( lv_total2 ) ). ENDMETHOD. METHOD charge_counts. SELECT SINGLE charge_count FROM {{p}}i_rental_total WHERE rental_id = 'R1' INTO @DATA(lv_count). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_count ). SELECT SINGLE charge_count FROM {{p}}i_rental_total WHERE rental_id = 'R2' INTO @DATA(lv_count2). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_count2 ). ENDMETHOD. METHOD rental_without_charges. SELECT COUNT(*) FROM {{p}}i_rental_total WHERE rental_id = 'R3' INTO @DATA(lv_count). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_count ). ENDMETHOD. METHOD customer_shown. SELECT SINGLE customer FROM {{p}}i_rental_total WHERE rental_id = 'R1' INTO @DATA(lv_customer). cl_abap_unit_assert=>assert_equals( exp = 'C1' act = lv_customer ). ENDMETHOD. METHOD decimals. SELECT SINGLE total_amount FROM {{p}}i_rental_total WHERE rental_id = 'R5' INTO @DATA(lv_total). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '10.00' ) act = CONV decfloat34( lv_total ) ). ENDMETHOD. METHOD two_customers. SELECT SINGLE total_amount FROM {{p}}i_rental_total WHERE rental_id = 'R4' INTO @DATA(lv_total4). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '20.00' ) act = CONV decfloat34( lv_total4 ) ). SELECT SINGLE total_amount FROM {{p}}i_rental_total WHERE rental_id = 'R5' INTO @DATA(lv_total5). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '10.00' ) act = CONV decfloat34( lv_total5 ) ). ENDMETHOD. ENDCLASS.