FormsRefresh

Retail order system / products-add-delete

products-add-delete

Add a record, save, delete the unreferenced fixture record.

0defects
102values match
8tolerated by policy
0waived
17unmapped

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: the Forms record indicator ("Record: 1/2" in the status bar) (8); list-of-values window titles (1); the list of open Forms windows (8).

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.

#StepActionChecked on the original
0Open form product_form
1add newClick PRODUCTS.ADD_BTN
2fieldsType PRODUCTS.PRODUCT_ID = 903, PRODUCTS.NAME = Mocha, PRODUCTS.PRICE = 60
3categoryList of values on PRODUCTS.CATEGORY_ID_FK, pick Category_Name = Snacks
4remaining fieldsType PRODUCTS.COST = 25, PRODUCTS.AVAILABLE = Yes
5saveClick PRODUCTS.SAVE_BTN
6last recordClick PRODUCTS.ITEM16PRODUCTS.NAME[0] = Espresso
7deleteClick PRODUCTS.DELETE_BTN

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 product_form

Original (Oracle Forms 14.1.2), step 00-open
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 00-open
Migrated (.NET, PostgreSQL)

Step 1: add new

Original (Oracle Forms 14.1.2), step 01-add-new
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 01-add-new
Migrated (.NET, PostgreSQL)

Step 2: fields

Original (Oracle Forms 14.1.2), step 02-fields
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 02-fields
Migrated (.NET, PostgreSQL)

Step 3: category

Original (Oracle Forms 14.1.2), step 03-category
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 03-category
Migrated (.NET, PostgreSQL)

Step 4: remaining fields

Original (Oracle Forms 14.1.2), step 04-remaining-fields
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 04-remaining-fields
Migrated (.NET, PostgreSQL)

Step 5: save

Original (Oracle Forms 14.1.2), step 05-save
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 05-save
Migrated (.NET, PostgreSQL)

Step 6: last record

Original (Oracle Forms 14.1.2), step 06-last-record
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 06-last-record
Migrated (.NET, PostgreSQL)

Step 7: delete

Original (Oracle Forms 14.1.2), step 07-delete
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 07-delete
Migrated (.NET, PostgreSQL)

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.

#StepAction (by name)Focus afterDisplayed values that changedMessage lineAlertExpect
0Open form product_formPRODUCTS.PRODUCT_ID[0]PRODUCTS.AVAILABLE[0] = Yes
PRODUCTS.CATEGORY_ID_FK[0] = 1
PRODUCTS.COST[0] = 20
PRODUCTS.NAME[0] = Latte
PRODUCTS.PRICE[0] = 55
PRODUCTS.PRODUCT_ID[0] = 1
1add newClick PRODUCTS.ADD_BTNPRODUCTS.PRODUCT_ID[0]
2fieldsType PRODUCTS.PRODUCT_ID = 903, PRODUCTS.NAME = Mocha, PRODUCTS.PRICE = 60PRODUCTS.PRICE[0]PRODUCTS.NAME[0] = Mocha
PRODUCTS.PRICE[0] = 60
PRODUCTS.PRODUCT_ID[0] = 903
3categoryList of values on PRODUCTS.CATEGORY_ID_FK, pick Category_Name = SnacksPRODUCTS.CATEGORY_ID_FK[0]PRODUCTS.CATEGORY_ID_FK[0] = 902
4remaining fieldsType PRODUCTS.COST = 25, PRODUCTS.AVAILABLE = YesPRODUCTS.AVAILABLE[0]PRODUCTS.AVAILABLE[0] = Yes
PRODUCTS.COST[0] = 25
5saveClick PRODUCTS.SAVE_BTNPRODUCTS.SAVE_BTN[0]FRM-40400: Transaction complete: 1 records applied and saved.
6last recordClick PRODUCTS.ITEM16PRODUCTS.PRODUCT_ID[0]PRODUCTS.CATEGORY_ID_FK[0] = 1
PRODUCTS.COST[0] = 15
PRODUCTS.NAME[0] = Espresso
PRODUCTS.PRICE[0] = 40
PRODUCTS.PRODUCT_ID[0] = 21
pass
7deleteClick PRODUCTS.DELETE_BTNPRODUCTS.PRODUCT_ID[0]PRODUCTS.CATEGORY_ID_FK[0] = 902
PRODUCTS.COST[0] = 25
PRODUCTS.NAME[0] = Mocha
PRODUCTS.PRICE[0] = 60
PRODUCTS.PRODUCT_ID[0] = 903
FRM-40400: Transaction complete: 1 records applied and saved.

Database effects

PRODUCTS inserted: {"PRODUCT_ID": 903, "NAME": "Mocha", "PRICE": 60, "CATEGORY_ID_FK": 902, "COST": 25, "AVAILABLE": "Yes"}
PRODUCTS deleted: {"PRODUCT_ID": 21, "NAME": "Espresso", "PRICE": 40, "CATEGORY_ID_FK": 1, "COST": 15, "AVAILABLE": "Yes"}

Classified diff against the migrated app

Diff: products-add-delete
counts: match 102, tolerated 8, waived 0, defect 0, unmapped 17, harness 0
generated-id pairs (source -> target): none

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.PRODUCTS.deleted.COST  rule=money  x1
[tolerated] db.PRODUCTS.deleted.PRICE  rule=money  x1
[tolerated] db.PRODUCTS.inserted.COST  rule=money  x1
[tolerated] db.PRODUCTS.inserted.PRICE  rule=money  x1
[tolerated] ui.values.PRODUCTS.COST  rule=money  x2
[tolerated] ui.values.PRODUCTS.PRICE  rule=money  x2
[unmapped] ui.record  (no target counterpart)  x8
[unmapped] ui.seen.lov.title  x1
[unmapped] ui.windows  (no target counterpart)  x8

Waivers

No waiver applies to this scenario: every compared value matches or is within the tolerance policy.