CLASS {{p}}mix_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS call IMPORTING it_tints TYPE {{P}}PAINT_MIX=>TY_TINTS EXPORTING ev_volume TYPE decfloat34 ev_price TYPE decfloat34 ev_subrc TYPE sysubrc. METHODS empty_table FOR TESTING. METHODS single_tint FOR TESTING. METHODS duplicate_tints FOR TESTING. METHODS two_tints FOR TESTING. METHODS zero_quantity FOR TESTING. METHODS negative_quantity FOR TESTING. METHODS unknown_tint FOR TESTING. METHODS rounding FOR TESTING. METHODS quantity_checked_first FOR TESTING. METHODS fee_per_distinct_tint FOR TESTING. ENDCLASS. CLASS {{p}}mix_hidden IMPLEMENTATION. METHOD call. CALL FUNCTION '{{P}}MIX_PRICE' EXPORTING it_tints = it_tints IMPORTING ev_volume = ev_volume ev_price = ev_price EXCEPTIONS no_components = 1 invalid_quantity = 2 unknown_tint = 3 OTHERS = 4. ev_subrc = sy-subrc. ENDMETHOD. METHOD empty_table. DATA lt_tints TYPE {{P}}PAINT_MIX=>TY_TINTS. call( EXPORTING it_tints = lt_tints IMPORTING ev_subrc = DATA(lv_subrc) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_subrc ). ENDMETHOD. METHOD single_tint. call( EXPORTING it_tints = VALUE #( ( tint_id = 'WHIT' quantity_ml = 1000 ) ) IMPORTING ev_volume = DATA(lv_volume) ev_price = DATA(lv_price) ev_subrc = DATA(lv_subrc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 1000 ) act = lv_volume ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '21.5' ) act = lv_price ). ENDMETHOD. METHOD duplicate_tints. call( EXPORTING it_tints = VALUE #( ( tint_id = 'WHIT' quantity_ml = 1000 ) ( tint_id = 'WHIT' quantity_ml = 500 ) ) IMPORTING ev_volume = DATA(lv_volume) ev_price = DATA(lv_price) ev_subrc = DATA(lv_subrc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 1500 ) act = lv_volume ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '31.5' ) act = lv_price ). ENDMETHOD. METHOD two_tints. call( EXPORTING it_tints = VALUE #( ( tint_id = 'WHIT' quantity_ml = 1000 ) ( tint_id = 'BLUE' quantity_ml = 200 ) ) IMPORTING ev_volume = DATA(lv_volume) ev_price = DATA(lv_price) ev_subrc = DATA(lv_subrc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 1200 ) act = lv_volume ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 32 ) act = lv_price ). ENDMETHOD. METHOD zero_quantity. call( EXPORTING it_tints = VALUE #( ( tint_id = 'WHIT' quantity_ml = 0 ) ) IMPORTING ev_subrc = DATA(lv_subrc) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_subrc ). ENDMETHOD. METHOD negative_quantity. call( EXPORTING it_tints = VALUE #( ( tint_id = 'BLUE' quantity_ml = -5 ) ) IMPORTING ev_subrc = DATA(lv_subrc) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_subrc ). ENDMETHOD. METHOD unknown_tint. call( EXPORTING it_tints = VALUE #( ( tint_id = 'XXXX' quantity_ml = 100 ) ) IMPORTING ev_subrc = DATA(lv_subrc) ). cl_abap_unit_assert=>assert_equals( exp = 3 act = lv_subrc ). ENDMETHOD. METHOD rounding. call( EXPORTING it_tints = VALUE #( ( tint_id = 'BLUE' quantity_ml = 111 ) ) IMPORTING ev_price = DATA(lv_price) ev_subrc = DATA(lv_subrc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '6.5' ) act = lv_price ). ENDMETHOD. METHOD quantity_checked_first. call( EXPORTING it_tints = VALUE #( ( tint_id = 'XXXX' quantity_ml = 100 ) ( tint_id = 'WHIT' quantity_ml = 0 ) ) IMPORTING ev_subrc = DATA(lv_subrc) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_subrc ). ENDMETHOD. METHOD fee_per_distinct_tint. call( EXPORTING it_tints = VALUE #( ( tint_id = 'WHIT' quantity_ml = 100 ) ( tint_id = 'WHIT' quantity_ml = 100 ) ( tint_id = 'BLUE' quantity_ml = 100 ) ) IMPORTING ev_volume = DATA(lv_volume) ev_price = DATA(lv_price) ev_subrc = DATA(lv_subrc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 300 ) act = lv_volume ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '11.5' ) act = lv_price ). ENDMETHOD. ENDCLASS.