CLASS {{p}}t14_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS prepare IMPORTING iv_week TYPE string it_book TYPE STANDARD TABLE OF {{P}}MEALBK. METHODS cleanup IMPORTING iv_week TYPE string. METHODS bill IMPORTING iv_week TYPE string EXPORTING ev_meals TYPE decfloat34 ev_pupils TYPE decfloat34 ev_amount TYPE decfloat34 ev_discount TYPE decfloat34 ev_subrc TYPE sysubrc. METHODS empty_week_zero FOR TESTING. METHODS sums_two_pupils FOR TESTING. METHODS skips_cancelled FOR TESTING. METHODS skips_free_meal FOR TESTING. METHODS discount_from_five FOR TESTING. METHODS no_discount_for_four FOR TESTING. METHODS discount_is_per_pupil FOR TESTING. METHODS rejects_negative_price FOR TESTING. METHODS counts_pupils FOR TESTING. METHODS rounds_half_up FOR TESTING. METHODS ignores_other_weeks FOR TESTING. ENDCLASS. CLASS {{p}}t14_hidden IMPLEMENTATION. METHOD prepare. cleanup( iv_week ). INSERT {{P}}MEALBK FROM TABLE @it_book. ENDMETHOD. METHOD cleanup. DELETE FROM {{P}}MEALBK WHERE week_key = @iv_week. ENDMETHOD. METHOD bill. CALL FUNCTION '{{P}}MEAL_BILL' EXPORTING iv_week = iv_week IMPORTING ev_meals = ev_meals ev_pupils = ev_pupils ev_amount = ev_amount ev_discount = ev_discount EXCEPTIONS invalid_price = 1 OTHERS = 2. ev_subrc = sy-subrc. ENDMETHOD. METHOD empty_week_zero. DATA lv_week TYPE string VALUE 'H-EMPTY'. cleanup( lv_week ). bill( EXPORTING iv_week = lv_week IMPORTING ev_meals = DATA(lv_meals) ev_pupils = DATA(lv_pupils) ev_amount = DATA(lv_amount) ev_discount = DATA(lv_discount) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_meals ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_pupils ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_amount ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_discount ). ENDMETHOD. METHOD sums_two_pupils. DATA lv_week TYPE string VALUE 'H-SUM1'. prepare( iv_week = lv_week it_book = VALUE #( ( week_key = 'H-SUM1' pupil = 'A' meal_no = 1 meal = 'LUNCH' price = '2.50' ) ( week_key = 'H-SUM1' pupil = 'A' meal_no = 2 meal = 'LUNCH' price = '3.00' ) ( week_key = 'H-SUM1' pupil = 'B' meal_no = 1 meal = 'LUNCH' price = '4.00' ) ) ). bill( EXPORTING iv_week = lv_week IMPORTING ev_meals = DATA(lv_meals) ev_pupils = DATA(lv_pupils) ev_amount = DATA(lv_amount) ev_discount = DATA(lv_discount) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 3 ) act = lv_meals ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 2 ) act = lv_pupils ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '9.50' ) act = lv_amount ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_discount ). cleanup( lv_week ). ENDMETHOD. METHOD skips_cancelled. DATA lv_week TYPE string VALUE 'H-CANC'. prepare( iv_week = lv_week it_book = VALUE #( ( week_key = 'H-CANC' pupil = 'A' meal_no = 1 meal = 'LUNCH' price = '2.00' ) ( week_key = 'H-CANC' pupil = 'A' meal_no = 2 meal = 'LUNCH' price = '5.00' cancelled = 'X' ) ) ). bill( EXPORTING iv_week = lv_week IMPORTING ev_meals = DATA(lv_meals) ev_pupils = DATA(lv_pupils) ev_amount = DATA(lv_amount) ev_discount = DATA(lv_discount) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 1 ) act = lv_meals ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 1 ) act = lv_pupils ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '2.00' ) act = lv_amount ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_discount ). cleanup( lv_week ). ENDMETHOD. METHOD skips_free_meal. DATA lv_week TYPE string VALUE 'H-FREE'. prepare( iv_week = lv_week it_book = VALUE #( ( week_key = 'H-FREE' pupil = 'A' meal_no = 1 meal = 'LUNCH' price = '0.00' ) ( week_key = 'H-FREE' pupil = 'A' meal_no = 2 meal = 'LUNCH' price = '3.00' ) ) ). bill( EXPORTING iv_week = lv_week IMPORTING ev_meals = DATA(lv_meals) ev_pupils = DATA(lv_pupils) ev_amount = DATA(lv_amount) ev_discount = DATA(lv_discount) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 1 ) act = lv_meals ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 1 ) act = lv_pupils ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '3.00' ) act = lv_amount ). cleanup( lv_week ). ENDMETHOD. METHOD discount_from_five. DATA lv_week TYPE string VALUE 'H-DISC'. prepare( iv_week = lv_week it_book = VALUE #( ( week_key = 'H-DISC' pupil = 'A' meal_no = 1 meal = 'LUNCH' price = '9.99' ) ( week_key = 'H-DISC' pupil = 'A' meal_no = 2 meal = 'LUNCH' price = '9.99' ) ( week_key = 'H-DISC' pupil = 'A' meal_no = 3 meal = 'LUNCH' price = '9.99' ) ( week_key = 'H-DISC' pupil = 'A' meal_no = 4 meal = 'LUNCH' price = '9.99' ) ( week_key = 'H-DISC' pupil = 'A' meal_no = 5 meal = 'LUNCH' price = '9.99' ) ) ). bill( EXPORTING iv_week = lv_week IMPORTING ev_meals = DATA(lv_meals) ev_pupils = DATA(lv_pupils) ev_amount = DATA(lv_amount) ev_discount = DATA(lv_discount) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 5 ) act = lv_meals ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 1 ) act = lv_pupils ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '44.96' ) act = lv_amount ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '4.99' ) act = lv_discount ). cleanup( lv_week ). ENDMETHOD. METHOD no_discount_for_four. DATA lv_week TYPE string VALUE 'H-NODS'. prepare( iv_week = lv_week it_book = VALUE #( ( week_key = 'H-NODS' pupil = 'A' meal_no = 1 meal = 'LUNCH' price = '9.99' ) ( week_key = 'H-NODS' pupil = 'A' meal_no = 2 meal = 'LUNCH' price = '9.99' ) ( week_key = 'H-NODS' pupil = 'A' meal_no = 3 meal = 'LUNCH' price = '9.99' ) ( week_key = 'H-NODS' pupil = 'A' meal_no = 4 meal = 'LUNCH' price = '9.99' ) ) ). bill( EXPORTING iv_week = lv_week IMPORTING ev_meals = DATA(lv_meals) ev_pupils = DATA(lv_pupils) ev_amount = DATA(lv_amount) ev_discount = DATA(lv_discount) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 4 ) act = lv_meals ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '39.96' ) act = lv_amount ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_discount ). cleanup( lv_week ). ENDMETHOD. METHOD discount_is_per_pupil. DATA lv_week TYPE string VALUE 'H-PERP'. prepare( iv_week = lv_week it_book = VALUE #( ( week_key = 'H-PERP' pupil = 'A' meal_no = 1 meal = 'LUNCH' price = '10.00' ) ( week_key = 'H-PERP' pupil = 'A' meal_no = 2 meal = 'LUNCH' price = '10.00' ) ( week_key = 'H-PERP' pupil = 'A' meal_no = 3 meal = 'LUNCH' price = '10.00' ) ( week_key = 'H-PERP' pupil = 'A' meal_no = 4 meal = 'LUNCH' price = '10.00' ) ( week_key = 'H-PERP' pupil = 'A' meal_no = 5 meal = 'LUNCH' price = '10.00' ) ( week_key = 'H-PERP' pupil = 'B' meal_no = 1 meal = 'LUNCH' price = '10.00' ) ( week_key = 'H-PERP' pupil = 'B' meal_no = 2 meal = 'LUNCH' price = '10.00' ) ( week_key = 'H-PERP' pupil = 'B' meal_no = 3 meal = 'LUNCH' price = '10.00' ) ( week_key = 'H-PERP' pupil = 'B' meal_no = 4 meal = 'LUNCH' price = '10.00' ) ) ). bill( EXPORTING iv_week = lv_week IMPORTING ev_meals = DATA(lv_meals) ev_pupils = DATA(lv_pupils) ev_amount = DATA(lv_amount) ev_discount = DATA(lv_discount) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 9 ) act = lv_meals ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 2 ) act = lv_pupils ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '85.00' ) act = lv_amount ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '5.00' ) act = lv_discount ). cleanup( lv_week ). ENDMETHOD. METHOD rejects_negative_price. DATA lv_week TYPE string VALUE 'H-NEG'. prepare( iv_week = lv_week it_book = VALUE #( ( week_key = 'H-NEG' pupil = 'A' meal_no = 1 meal = 'LUNCH' price = '2.00' ) ( week_key = 'H-NEG' pupil = 'B' meal_no = 1 meal = 'LUNCH' price = '-1.00' ) ) ). bill( EXPORTING iv_week = lv_week IMPORTING ev_meals = DATA(lv_meals) ev_pupils = DATA(lv_pupils) ev_amount = DATA(lv_amount) ev_discount = DATA(lv_discount) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ). cleanup( lv_week ). ENDMETHOD. METHOD counts_pupils. DATA lv_week TYPE string VALUE 'H-PUPL'. prepare( iv_week = lv_week it_book = VALUE #( ( week_key = 'H-PUPL' pupil = 'A' meal_no = 1 meal = 'LUNCH' price = '2.00' ) ( week_key = 'H-PUPL' pupil = 'B' meal_no = 1 meal = 'LUNCH' price = '3.00' cancelled = 'X' ) ( week_key = 'H-PUPL' pupil = 'C' meal_no = 1 meal = 'LUNCH' price = '0.00' ) ) ). bill( EXPORTING iv_week = lv_week IMPORTING ev_meals = DATA(lv_meals) ev_pupils = DATA(lv_pupils) ev_amount = DATA(lv_amount) ev_discount = DATA(lv_discount) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 1 ) act = lv_meals ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 1 ) act = lv_pupils ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '2.00' ) act = lv_amount ). cleanup( lv_week ). ENDMETHOD. METHOD rounds_half_up. DATA lv_week TYPE string VALUE 'H-RND'. prepare( iv_week = lv_week it_book = VALUE #( ( week_key = 'H-RND' pupil = 'A' meal_no = 1 meal = 'LUNCH' price = '1.01' ) ( week_key = 'H-RND' pupil = 'A' meal_no = 2 meal = 'LUNCH' price = '1.01' ) ( week_key = 'H-RND' pupil = 'A' meal_no = 3 meal = 'LUNCH' price = '1.01' ) ( week_key = 'H-RND' pupil = 'A' meal_no = 4 meal = 'LUNCH' price = '1.01' ) ( week_key = 'H-RND' pupil = 'A' meal_no = 5 meal = 'LUNCH' price = '1.01' ) ) ). bill( EXPORTING iv_week = lv_week IMPORTING ev_meals = DATA(lv_meals) ev_pupils = DATA(lv_pupils) ev_amount = DATA(lv_amount) ev_discount = DATA(lv_discount) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 5 ) act = lv_meals ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '4.55' ) act = lv_amount ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '0.50' ) act = lv_discount ). cleanup( lv_week ). ENDMETHOD. METHOD ignores_other_weeks. DATA lv_week TYPE string VALUE 'H-OTHR'. DATA lv_other TYPE string VALUE 'H-OTHR2'. prepare( iv_week = lv_week it_book = VALUE #( ( week_key = 'H-OTHR' pupil = 'A' meal_no = 1 meal = 'LUNCH' price = '2.00' ) ) ). prepare( iv_week = lv_other it_book = VALUE #( ( week_key = 'H-OTHR2' pupil = 'A' meal_no = 1 meal = 'LUNCH' price = '9.00' ) ) ). bill( EXPORTING iv_week = lv_week IMPORTING ev_meals = DATA(lv_meals) ev_pupils = DATA(lv_pupils) ev_amount = DATA(lv_amount) ev_discount = DATA(lv_discount) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 1 ) act = lv_meals ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '2.00' ) act = lv_amount ). cleanup( lv_week ). cleanup( lv_other ). ENDMETHOD. ENDCLASS.