CLASS ltc_studio_summary DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. TYPES ty_fee TYPE p LENGTH 8 DECIMALS 2. DATA mo_cut TYPE REF TO {{p}}studio_summary. METHODS setup. METHODS single_entry FOR TESTING. METHODS ignores_invalid_fee FOR TESTING. METHODS removes_duplicates FOR TESTING. METHODS groups_two_studios FOR TESTING. METHODS sorts_by_class_type FOR TESTING. ENDCLASS. CLASS ltc_studio_summary IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}studio_summary( ). ENDMETHOD. METHOD single_entry. DATA lt_input TYPE {{p}}studio_summary=>tt_attendance. lt_input = VALUE #( ( studio = 'S001' class_id = 'C0000001' class_type = 'YOGA' member_id = 'M0000001' fee = '12.50' ) ). DATA(lt_result) = mo_cut->summarize( lt_input ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ). cl_abap_unit_assert=>assert_equals( exp = CONV ty_fee( '12.50' ) act = lt_result[ 1 ]-total_fee ). ENDMETHOD. METHOD ignores_invalid_fee. DATA lt_input TYPE {{p}}studio_summary=>tt_attendance. lt_input = VALUE #( ( studio = 'S001' class_id = 'C0000001' class_type = 'YOGA' member_id = 'M0000001' fee = '0.00' ) ). DATA(lt_result) = mo_cut->summarize( lt_input ). cl_abap_unit_assert=>assert_initial( act = lt_result ). ENDMETHOD. METHOD removes_duplicates. DATA lt_input TYPE {{p}}studio_summary=>tt_attendance. lt_input = VALUE #( ( studio = 'S001' class_id = 'C0000001' class_type = 'YOGA' member_id = 'M0000001' fee = '10.00' ) ( studio = 'S001' class_id = 'C0000001' class_type = 'YOGA' member_id = 'M0000001' fee = '99.00' ) ). DATA(lt_result) = mo_cut->summarize( lt_input ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_result[ 1 ]-class_count ). cl_abap_unit_assert=>assert_equals( exp = CONV ty_fee( '10.00' ) act = lt_result[ 1 ]-total_fee ). ENDMETHOD. METHOD groups_two_studios. DATA lt_input TYPE {{p}}studio_summary=>tt_attendance. lt_input = VALUE #( ( studio = 'S001' class_id = 'C0000001' class_type = 'YOGA' member_id = 'M0000001' fee = '10.00' ) ( studio = 'S002' class_id = 'C0000002' class_type = 'YOGA' member_id = 'M0000002' fee = '15.00' ) ). DATA(lt_result) = mo_cut->summarize( lt_input ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lt_result[ 1 ]-class_count ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lt_result[ 1 ]-member_count ). ENDMETHOD. METHOD sorts_by_class_type. DATA lt_input TYPE {{p}}studio_summary=>tt_attendance. lt_input = VALUE #( ( studio = 'S001' class_id = 'C0000001' class_type = 'ZUMBA' member_id = 'M0000001' fee = '10.00' ) ( studio = 'S001' class_id = 'C0000002' class_type = 'AEROBIC' member_id = 'M0000002' fee = '10.00' ) ). DATA(lt_result) = mo_cut->summarize( lt_input ). cl_abap_unit_assert=>assert_equals( exp = 'AEROBIC' act = lt_result[ 1 ]-class_type ). ENDMETHOD. ENDCLASS.