3.3 KiB
3.3 KiB
1. Goal
A tyre shop fits tyres to a vehicle. Before the mechanic starts a job, the shop checks the fitting order against the vehicle. The shop needs one reason for each rejected order.
2. Open questions
None.
3. Context
- The interface {{P}}IF_TYRE_ORDER exists in package $TMP. It is active.
- The interface has two types:
- TY_VEHICLE with the components WIDTH_MM, PROFILE_PCT, RIM_INCH, LOAD_INDEX and SPEED_KMH. All components have the type i.
- TY_ORDER with the components WIDTH_MM, PROFILE_PCT, RIM_INCH, LOAD_INDEX, SPEED_KMH and QTY. All components have the type i.
- WIDTH_MM is the tyre width in millimetres. PROFILE_PCT is the aspect ratio in percent. RIM_INCH is the rim diameter in inches. LOAD_INDEX is the load index of the tyre. SPEED_KMH is the maximum speed in kilometres per hour. QTY is the number of tyres of the order.
4. Contract
Create these objects in package $TMP.
- Class {{P}}TYRE_CHECKER. It is public and final.
- Public constructor: CONSTRUCTOR IMPORTING is_vehicle TYPE {{P}}IF_TYRE_ORDER=>TY_VEHICLE.
- Public method: CHECK_ORDER IMPORTING is_order TYPE {{P}}IF_TYRE_ORDER=>TY_ORDER RAISING {{P}}CX_TYRE_QTY {{P}}CX_TYRE_SIZE {{P}}CX_TYRE_LOAD {{P}}CX_TYRE_SPEED.
- Exception class {{P}}CX_TYRE_ERROR. It inherits from CX_STATIC_CHECK.
- Public read-only attribute MV_TEXT TYPE string.
- Public constructor: CONSTRUCTOR IMPORTING iv_text TYPE string.
- Exception class {{P}}CX_TYRE_QTY. It inherits from {{P}}CX_TYRE_ERROR.
- Public constructor without parameters.
- Exception class {{P}}CX_TYRE_SIZE. It inherits from {{P}}CX_TYRE_ERROR.
- Public constructor without parameters.
- Exception class {{P}}CX_TYRE_LOAD. It inherits from {{P}}CX_TYRE_ERROR.
- Public constructor without parameters.
- Exception class {{P}}CX_TYRE_SPEED. It inherits from {{P}}CX_TYRE_ERROR.
- Public constructor without parameters.
Do not add other public methods to {{P}}TYRE_CHECKER.
5. Business rules
CHECK_ORDER compares the order with the vehicle of the constructor. Check the rules in this sequence. Raise the exception of the first rule that fails. Do not check a rule after a rule has failed.
- QTY must be greater than or equal to 1 and less than or equal to 4. If not, raise {{P}}CX_TYRE_QTY.
- WIDTH_MM, PROFILE_PCT and RIM_INCH of the order must be equal to the WIDTH_MM, PROFILE_PCT and RIM_INCH of the vehicle. If not, raise {{P}}CX_TYRE_SIZE.
- LOAD_INDEX of the order must be greater than or equal to the LOAD_INDEX of the vehicle. If not, raise {{P}}CX_TYRE_LOAD.
- SPEED_KMH of the order must be greater than or equal to the SPEED_KMH of the vehicle. If not, raise {{P}}CX_TYRE_SPEED.
- If no rule fails, the method returns without an exception.
Each exception class sets MV_TEXT in its own constructor:
- {{P}}CX_TYRE_QTY: 'Quantity must be between 1 and 4'
- {{P}}CX_TYRE_SIZE: 'Tyre size does not match the vehicle'
- {{P}}CX_TYRE_LOAD: 'Load index is too low'
- {{P}}CX_TYRE_SPEED: 'Speed rating is too low'
6. Constraints
- Release target: 8.16.
- Coding standards: Clean ABAP. Method length below 40 statements. No global variables. No comment that restates the code.
- Out of scope: do not change {{P}}IF_TYRE_ORDER.
7. Acceptance
- All objects are active and have no syntax error.
- The hidden tests pass.
- Write your own ABAP Unit tests for the class.