login as:
~/abapcraft.dev — code, crafted in SAP
florin@s4hana:~/abap/posts/gilded-rose/src/ycl_conjured_cake.clas.testclasses.abap $ cat ycl_conjured_cake.clas.testclasses.abap
gilded-rose / src / ycl_conjured_cake.clas.testclasses.abap
ABAP 61 lines
CLASS ltc_common_item DEFINITION FINAL FOR TESTING RISK LEVEL HARMLESS.
  PRIVATE SECTION.
    DATA: mo_cut   TYPE REF TO ycl_gilded_rose,
          mt_items TYPE ycl_gilded_rose=>tt_items.
    METHODS:
      setup,
      "Given: sell-in is positive
      "When : item is conjured and sell-in remains positive
      "Then : quality decreases by 2
      conjured_positive_sellin FOR TESTING,
      "Given: sell-in is negative
      "When : item is conjured and sell-in goes negative
      "Then : quality decreases twice as fast
      conjured_negative_sellin FOR TESTING,
      "Given: sell-in is negative
      "When : item is conjured and sell-in goes negative, but quality goes never negative
      "Then : quality decreases twice as fast
      conj_no_negative_quality FOR TESTING.

ENDCLASS.

CLASS ltc_common_item IMPLEMENTATION.

  METHOD setup.
    mt_items = VALUE ycl_gilded_rose=>tt_items( ( NEW #( iv_name    = |Conjured Cake|
                                                       iv_sell_in = 3
                                                       iv_quality = 6 ) )
                                                ( NEW #( iv_name    = |Conjured Cake|
                                                         iv_sell_in = 0
                                                         iv_quality = 6 ) )
                                                ( NEW #( iv_name    = |Conjured Cake|
                                                         iv_sell_in = 0
                                                         iv_quality = 1 ) )
                                                        ).

    mo_cut = NEW ycl_gilded_rose( it_items = mt_items ).
  ENDMETHOD.

  METHOD conjured_positive_sellin.
    mo_cut->update_quality( ).
    cl_abap_unit_assert=>assert_equals(
                   act = CAST ycl_item( mt_items[ 1 ] )->description( )
                   exp = |Conjured Cake, 2, 4| ).
  ENDMETHOD.

  METHOD conjured_negative_sellin.
    mo_cut->update_quality( ).
    cl_abap_unit_assert=>assert_equals(
                   act = CAST ycl_item( mt_items[ 2 ] )->description( )
                   exp = |Conjured Cake, -1, 2| ).
  ENDMETHOD.

  METHOD conj_no_negative_quality.
    mo_cut->update_quality( ).
    cl_abap_unit_assert=>assert_equals(
                   act = CAST ycl_item( mt_items[ 3 ] )->description( )
                   exp = |Conjured Cake, -1, 0| ).
  ENDMETHOD.

ENDCLASS.