CLASS {{p}}repair_charge_test 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 charge_of_two_jobs FOR TESTING. METHODS charge_of_single_rate FOR TESTING. ENDCLASS. CLASS {{p}}repair_charge_test IMPLEMENTATION. METHOD class_setup. go_env = cl_cds_test_environment=>create( i_for_entity = '{{P}}I_REPAIR_CHARGE' ). ENDMETHOD. METHOD class_teardown. go_env->destroy( ). ENDMETHOD. METHOD setup. go_env->clear_doubles( ). ENDMETHOD. METHOD charge_of_two_jobs. DATA lt_job TYPE STANDARD TABLE OF {{p}}job WITH EMPTY KEY. DATA lt_rate TYPE STANDARD TABLE OF {{p}}rate WITH EMPTY KEY. lt_job = VALUE #( ( job_id = 'A' customer = 'C1' shoe_type = 'BOOT' repair_type = 'SOLE' pairs = 2 job_state = 'D' ) ( job_id = 'B' customer = 'C1' shoe_type = 'BOOT' repair_type = 'HEEL' pairs = 1 job_state = 'D' ) ). lt_rate = VALUE #( ( shoe_type = 'BOOT' repair_type = 'SOLE' price = '10.00' ) ( shoe_type = 'BOOT' repair_type = 'HEEL' price = '5.00' ) ). go_env->insert_test_data( lt_job ). go_env->insert_test_data( lt_rate ). SELECT SINGLE job_count, total_pairs, total_charge FROM {{p}}i_repair_charge WHERE customer = 'C1' INTO @DATA(ls_charge). cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_charge-job_count ). cl_abap_unit_assert=>assert_equals( exp = 3 act = ls_charge-total_pairs ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '25.00' ) act = CONV decfloat34( ls_charge-total_charge ) ). ENDMETHOD. METHOD charge_of_single_rate. DATA lt_job TYPE STANDARD TABLE OF {{p}}job WITH EMPTY KEY. DATA lt_rate TYPE STANDARD TABLE OF {{p}}rate WITH EMPTY KEY. lt_job = VALUE #( ( job_id = 'C' customer = 'C2' shoe_type = 'SANDAL' repair_type = 'STRAP' pairs = 4 job_state = 'D' ) ). lt_rate = VALUE #( ( shoe_type = 'SANDAL' repair_type = 'STRAP' price = '5.50' ) ). go_env->insert_test_data( lt_job ). go_env->insert_test_data( lt_rate ). SELECT SINGLE total_charge FROM {{p}}i_repair_charge WHERE customer = 'C2' INTO @DATA(lv_charge). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '22.00' ) act = CONV decfloat34( lv_charge ) ). ENDMETHOD. ENDCLASS.