Retail order system / order-two-lines
order-two-lines
Create an order with two lines, change a quantity, save.
Unmapped values are recorded on the original but have no counterpart the mapping names in the migrated app, so they are listed, not compared, and are not defects. Here: alert titles (4); the Forms record indicator ("Record: 1/2" in the status bar) (13); the list-of-values column Price (2); list-of-values window titles (2); ORDER_ITEMS.ORDER_ID_FK, a Forms item with no field in the migrated screen (65); the list of open Forms windows (13).
Arabic text in this scenario is the original source's, kept word for word in the migrated app: تم حفظ الأوردر بنجاح يا بطل!
(roughly: Order saved successfully, champ!); قائمه المشروبات
(Drinks list).
Three runs from a fresh database gave byte-identical diffs. Behaviour that looks odd in the migrated app but is the original's: faithful to the original and waivers. Files: scenario, golden record, target record, diff (JSON).
Scenario steps
Items are addressed by their Forms name (BLOCK.ITEM[row]), the same name in the
original and, through the mapping, in the migrated app.
| # | Step | Action | Checked on the original |
|---|---|---|---|
| 0 | Open form ORDERS | ||
| 1 | header | Type ORDERS.CUSTOMER_ID = 1, ORDERS.EMPLOYEE_ID = 1, ORDERS.TABLE_NUMBER = 5 | |
| 2 | line 1 id | Type ORDER_ITEMS.ITEM_ID[0] = 1 | |
| 3 | line 1 product | List of values on ORDER_ITEMS.PRODUCT_ID_FK[0], pick Name = Latte | ORDER_ITEMS.PRODUCT_ID_FK[0] = 1, ORDER_ITEMS.UNIT_PRICE[0] = 55 |
| 4 | line 1 quantity | Type ORDER_ITEMS.QUANTITY[0] = 2 | |
| 5 | line 2 id | Type ORDER_ITEMS.ITEM_ID[1] = 2 | ORDER_ITEMS.TOTAL_PRICE[0] = 110 |
| 6 | line 2 product | List of values on ORDER_ITEMS.PRODUCT_ID_FK[1], pick Name = Espresso | ORDER_ITEMS.UNIT_PRICE[1] = 40 |
| 7 | line 2 quantity | Type ORDER_ITEMS.QUANTITY[1] = 1 | |
| 8 | change line 1 quantity | Type ORDER_ITEMS.QUANTITY[0] = 3 | ORDER_ITEMS.TOTAL_PRICE[1] = 40, ORDER_ITEMS.QUANTITY[0] = 3 |
| 9 | leave quantity | Press Tab | ORDER_ITEMS.TOTAL_PRICE[0] = 165 |
| 10 | save | Click ORDERS.PUSH_BUTTON10 | alert FRM-40400: Transaction complete: 3 records applied and saved. |
| 11 | acknowledge commit | Answer the alert OK | alert تم حفظ الأوردر بنجاح يا بطل! |
| 12 | acknowledge message | Answer the alert OK | no alert open; record indicator Record: 1/1 |
Screens, step by step
Left: the original Oracle Forms application, recorded on a virtual display. Right: the migrated application in headless Chromium. Screenshots are evidence only; the comparison works on the recorded values.
Step 0: open ORDERS
Step 1: header
Step 2: line 1 id
Step 3: line 1 product
Step 4: line 1 quantity
Step 5: line 2 id
Step 6: line 2 product
Step 7: line 2 quantity
Step 8: change line 1 quantity
Step 9: leave quantity
Step 10: save
Step 11: acknowledge commit
Step 12: acknowledge message
Golden record of the original
After each step: the focus, the displayed values that changed, the message line and any alert. The full record (every item of every step, windows, lists of values) is in the JSON file.
| # | Step | Action (by name) | Focus after | Displayed values that changed | Message line | Alert | Expect |
|---|---|---|---|---|---|---|---|
| 0 | Open form ORDERS | ORDERS.CUSTOMER_ID[0] | ORDERS.ORDER_ID[0] = 16 | ||||
| 1 | header | Type ORDERS.CUSTOMER_ID = 1, ORDERS.EMPLOYEE_ID = 1, ORDERS.TABLE_NUMBER = 5 | ORDERS.TABLE_NUMBER[0] | ORDERS.CUSTOMER_ID[0] = 1ORDERS.EMPLOYEE_ID[0] = 1ORDERS.TABLE_NUMBER[0] = 5 | |||
| 2 | line 1 id | Type ORDER_ITEMS.ITEM_ID[0] = 1 | ORDER_ITEMS.ITEM_ID[0] | ORDER_ITEMS.ITEM_ID[0] = 1ORDER_ITEMS.ORDER_ID_FK[0] = 16 | |||
| 3 | line 1 product | List of values on ORDER_ITEMS.PRODUCT_ID_FK[0], pick Name = Latte | ORDER_ITEMS.PRODUCT_ID_FK[0] | ORDER_ITEMS.PRODUCT_ID_FK[0] = 1ORDER_ITEMS.UNIT_PRICE[0] = 55 | pass | ||
| 4 | line 1 quantity | Type ORDER_ITEMS.QUANTITY[0] = 2 | ORDER_ITEMS.QUANTITY[0] | ORDER_ITEMS.QUANTITY[0] = 2 | |||
| 5 | line 2 id | Type ORDER_ITEMS.ITEM_ID[1] = 2 | ORDER_ITEMS.ITEM_ID[1] | ORDER_ITEMS.ITEM_ID[1] = 2ORDER_ITEMS.ORDER_ID_FK[1] = 16ORDER_ITEMS.TOTAL_PRICE[0] = 110 | pass | ||
| 6 | line 2 product | List of values on ORDER_ITEMS.PRODUCT_ID_FK[1], pick Name = Espresso | ORDER_ITEMS.PRODUCT_ID_FK[1] | ORDER_ITEMS.PRODUCT_ID_FK[1] = 21ORDER_ITEMS.UNIT_PRICE[1] = 40 | pass | ||
| 7 | line 2 quantity | Type ORDER_ITEMS.QUANTITY[1] = 1 | ORDER_ITEMS.QUANTITY[1] | ORDER_ITEMS.QUANTITY[1] = 1 | |||
| 8 | change line 1 quantity | Type ORDER_ITEMS.QUANTITY[0] = 3 | ORDER_ITEMS.QUANTITY[0] | ORDER_ITEMS.QUANTITY[0] = 3ORDER_ITEMS.TOTAL_PRICE[1] = 40 | pass | ||
| 9 | leave quantity | Press Tab | ORDER_ITEMS.ITEM_ID[0] | ORDER_ITEMS.TOTAL_PRICE[0] = 165 | pass | ||
| 10 | save | Click ORDERS.PUSH_BUTTON10 | FWindow/PushButton:OK | ORDERS.ORDER_ID[0] = 17ORDER_ITEMS.ORDER_ID_FK[0] = 17ORDER_ITEMS.ORDER_ID_FK[1] = 17 | FRM-40400: Transaction complete: 3 records applied and saved. | FRM-40400: Transaction complete: 3 records applied and saved. | pass |
| 11 | acknowledge commit | Answer the alert OK | FWindow/PushButton:OK | تم حفظ الأوردر بنجاح يا بطل! | تم حفظ الأوردر بنجاح يا بطل! | pass | |
| 12 | acknowledge message | Answer the alert OK | ORDERS.PUSH_BUTTON10[0] | pass |
Database effects
ORDERS inserted: {"ORDER_ID": 17, "ORDER_DATA": null, "CUSTOMER_ID": 1, "EMPLOYEE_ID": 1, "TOTAL_AMOUNT": null, "TABLE_NUMBER": 5, "ORDER_TYPE": null, "DISCOUNT": null, "FINAL_AMOUNT": null, "STATUES": null}
ORDER_ITEMS inserted: {"ITEM_ID": 1, "ORDER_ID_FK": 17, "PRODUCT_ID_FK": 1, "QUANTITY": 3, "UNIT_PRICE": 55, "TOTAL_PRICE": 165}
ORDER_ITEMS inserted: {"ITEM_ID": 2, "ORDER_ID_FK": 17, "PRODUCT_ID_FK": 21, "QUANTITY": 1, "UNIT_PRICE": 40, "TOTAL_PRICE": 40}
sequence ORD_SEQ: next 16 -> 18, drawn [16, 17]
generated: ORDERS.ORDER_ID = 17 is ORD_SEQ#2
generated: ORDER_ITEMS.ORDER_ID_FK = 17 is ORD_SEQ#2
generated: ORDER_ITEMS.ORDER_ID_FK = 17 is ORD_SEQ#2
Classified diff against the migrated app
Diff: order-two-lines counts: match 259, tolerated 290, waived 0, defect 0, unmapped 99, harness 0 generated-id pairs (source -> target): ORD_SEQ#1 -> ORD_SEQ#1 (draw order), ORD_SEQ#2 -> ORD_SEQ#2 waivers: W1 [proposed] ORDER_DATA saved as NULL: applied to 0 value(s) W2 [proposed] Order number consumed when the form opens: applied to 0 value(s) W3 [proposed] Line ITEM_ID typed by the user: applied to 0 value(s) W4 [proposed] Two modal alerts after saving: applied to 0 value(s) W5 [proposed] Key debug message on record navigation (single-table forms): applied to 0 value(s) W6 [proposed] Customer debug message in ORDERS: applied to 0 value(s) W7 [proposed] Placeholder alert on leaving Employees: applied to 0 value(s) W8 [proposed] Error message when the application starts: applied to 0 value(s) W9 [proposed] Keyboard hint of the Forms client while a question is open: applied to 0 value(s) W10 [proposed] An order added with Add cannot be saved: applied to 0 value(s) [tolerated] db.ORDER_ITEMS.inserted.TOTAL_PRICE rule=money x2 [tolerated] db.ORDER_ITEMS.inserted.UNIT_PRICE rule=money x2 [tolerated] ui.values.ORDERS.ORDER_TYPE rule=text x13 [tolerated] ui.values.ORDERS.STATUES rule=text x13 [tolerated] ui.values.ORDER_ITEMS.ITEM_ID rule=blank_rows x46 [tolerated] ui.values.ORDER_ITEMS.PRODUCT_ID_FK rule=blank_rows x46 [tolerated] ui.values.ORDER_ITEMS.QUANTITY rule=blank_rows x46 [tolerated] ui.values.ORDER_ITEMS.TOTAL_PRICE rule=blank_rows x46 [tolerated] ui.values.ORDER_ITEMS.TOTAL_PRICE rule=money x13 [tolerated] ui.values.ORDER_ITEMS.UNIT_PRICE rule=blank_rows x46 [tolerated] ui.values.ORDER_ITEMS.UNIT_PRICE rule=money x17 [unmapped] ui.alert.title (browser dialogs have no title) x2 [unmapped] ui.record (no target counterpart) x13 [unmapped] ui.seen.alert.title (browser dialogs have no title) x2 [unmapped] ui.seen.lov.column.Price (column not shown in the target) x2 [unmapped] ui.seen.lov.title x2 [unmapped] ui.values.ORDER_ITEMS.ORDER_ID_FK (no target item) x65 [unmapped] ui.windows (no target counterpart) x13
Waivers
No waiver applies to this scenario: every compared value matches or is within the tolerance policy.

























