CLASS {{p}}t21_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 effort_of_one_project FOR TESTING. METHODS no_active_assignment FOR TESTING. ENDCLASS. CLASS {{p}}t21_test IMPLEMENTATION. METHOD class_setup. go_env = cl_cds_test_environment=>create( i_for_entity = '{{P}}I_PROJ_EFFORT' ). ENDMETHOD. METHOD class_teardown. go_env->destroy( ). ENDMETHOD. METHOD setup. DATA lt_proj TYPE STANDARD TABLE OF {{p}}proj WITH EMPTY KEY. DATA lt_asgn TYPE STANDARD TABLE OF {{p}}asgn WITH EMPTY KEY. go_env->clear_doubles( ). lt_proj = VALUE #( ( proj_id = 'A' proj_name = 'ONE' budget = '100.00' ) ( proj_id = 'B' proj_name = 'TWO' budget = '10.00' ) ). lt_asgn = VALUE #( ( proj_id = 'A' emp_id = 'E1' work_hours = 2 rate = '10.00' status = 'A' ) ( proj_id = 'A' emp_id = 'E2' work_hours = 1 rate = '5.00' status = 'A' ) ( proj_id = 'A' emp_id = 'E3' work_hours = 9 rate = '9.00' status = 'I' ) ( proj_id = 'B' emp_id = 'E1' work_hours = 3 rate = '1.00' status = 'I' ) ). go_env->insert_test_data( lt_proj ). go_env->insert_test_data( lt_asgn ). ENDMETHOD. METHOD effort_of_one_project. SELECT SINGLE assign_count, total_hours, total_cost, over_budget FROM {{p}}i_proj_effort WHERE proj_id = 'A' INTO @DATA(ls_effort). cl_abap_unit_assert=>assert_equals( exp = CONV i( ls_effort-assign_count ) act = 2 ). cl_abap_unit_assert=>assert_equals( exp = CONV i( ls_effort-total_hours ) act = 3 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '25.00' ) act = CONV decfloat34( ls_effort-total_cost ) ). cl_abap_unit_assert=>assert_equals( exp = 'N' act = ls_effort-over_budget ). ENDMETHOD. METHOD no_active_assignment. SELECT SINGLE proj_id FROM {{p}}i_proj_effort WHERE proj_id = 'B' INTO @DATA(lv_proj_id). cl_abap_unit_assert=>assert_equals( exp = 4 act = sy-subrc ). cl_abap_unit_assert=>assert_initial( lv_proj_id ). ENDMETHOD. ENDCLASS.