FormsRefresh

HR application / employees-search

employees-search

Search employees by a name fragment (the first hit has no department, so its DEPARTMENT detail is not queried), Reset back to the full list, then Search with an empty field.

0defects
660values match
0tolerated by policy
1waived
0unmapped

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 login
1Type LOGIN.USERNAME = alice, LOGIN.PASSWORD = alice#123
2loginClick LOGIN.LOGIN
3employeesClick CONSOLE.EMPLOYEES
4Type BUTTONS.SEARCH_FIELD = grant
5searchClick BUTTONS.SEARCH_BUTTON
6resetClick BUTTONS.RESET_BUTTON
7search emptyClick BUTTONS.SEARCH_BUTTON

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 login

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: type

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

Step 2: login

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

Step 3: employees

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

Step 4: type

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

Step 5: search

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

Step 6: reset

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

Step 7: search empty

Original (Oracle Forms 14.1.2), step 07-search-empty
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 07-search-empty
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 loginLOGIN.USERNAME[0]
1Type LOGIN.USERNAME = alice, LOGIN.PASSWORD = alice#123LOGIN.PASSWORD[0]LOGIN.PASSWORD[0] = alice#123
LOGIN.USERNAME[0] = alice
2loginClick LOGIN.LOGINCONSOLE.EMPLOYEES[0]CONSOLE.USERNAME[0] = alice
3employeesClick CONSOLE.EMPLOYEESEMPLOYEES.APEX[0]DEPARTMENT.CITY[0] = Seattle
DEPARTMENT.COUNTRY_NAME[0] = United States of America
DEPARTMENT.DEPARTMENT_ID[0] = 90
DEPARTMENT.DEPARTMENT_NAME[0] = Executive
DEPARTMENT.REGION_NAME[0] = Americas
DEPARTMENT.STATE_PROVINCE[0] = Washington
DEPARTMENT.STREET_ADDRESS[0] = 2004 Charade Rd
EMPLOYEES.DEPARTMENT_ID[0] = 90
EMPLOYEES.DEPARTMENT_ID[1] = 90
EMPLOYEES.DEPARTMENT_ID[2] = 90
EMPLOYEES.DEPARTMENT_ID[3] = 60
EMPLOYEES.DEPARTMENT_ID[4] = 60
EMPLOYEES.DEPARTMENT_ID[5] = 60
EMPLOYEES.DEPARTMENT_ID[6] = 60
EMPLOYEES.DEPARTMENT_ID[7] = 60
EMPLOYEES.DEPARTMENT_ID[8] = 100
EMPLOYEES.DEPARTMENT_ID[9] = 100
EMPLOYEES.EMAIL[0] = SKING
EMPLOYEES.EMAIL[1] = NYANG
EMPLOYEES.EMAIL[2] = LGARCIA
EMPLOYEES.EMAIL[3] = AJAMES
EMPLOYEES.EMAIL[4] = BMILLER
EMPLOYEES.EMAIL[5] = DWILLIAMS
EMPLOYEES.EMAIL[6] = VJACKSON
EMPLOYEES.EMAIL[7] = DNGUYEN
EMPLOYEES.EMAIL[8] = NGRUENBE
EMPLOYEES.EMAIL[9] = DFAVIET
EMPLOYEES.EMPLOYEE_ID[0] = 100
EMPLOYEES.EMPLOYEE_ID[1] = 101
EMPLOYEES.EMPLOYEE_ID[2] = 102
EMPLOYEES.EMPLOYEE_ID[3] = 103
EMPLOYEES.EMPLOYEE_ID[4] = 104
EMPLOYEES.EMPLOYEE_ID[5] = 105
EMPLOYEES.EMPLOYEE_ID[6] = 106
EMPLOYEES.EMPLOYEE_ID[7] = 107
EMPLOYEES.EMPLOYEE_ID[8] = 108
EMPLOYEES.EMPLOYEE_ID[9] = 109
EMPLOYEES.FIRST_NAME[0] = Steven
EMPLOYEES.FIRST_NAME[1] = Neena
EMPLOYEES.FIRST_NAME[2] = Lex
EMPLOYEES.FIRST_NAME[3] = Alexander
EMPLOYEES.FIRST_NAME[4] = Bruce
EMPLOYEES.FIRST_NAME[5] = David
EMPLOYEES.FIRST_NAME[6] = Valli
EMPLOYEES.FIRST_NAME[7] = Diana
EMPLOYEES.FIRST_NAME[8] = Nancy
EMPLOYEES.FIRST_NAME[9] = Daniel
EMPLOYEES.HIRE_DATE[0] = 17-06-2013
EMPLOYEES.HIRE_DATE[1] = 21-09-2015
EMPLOYEES.HIRE_DATE[2] = 13-01-2011
EMPLOYEES.HIRE_DATE[3] = 03-01-2016
EMPLOYEES.HIRE_DATE[4] = 21-05-2017
EMPLOYEES.HIRE_DATE[5] = 25-06-2015
EMPLOYEES.HIRE_DATE[6] = 05-02-2016
EMPLOYEES.HIRE_DATE[7] = 07-02-2017
EMPLOYEES.HIRE_DATE[8] = 17-08-2012
EMPLOYEES.HIRE_DATE[9] = 16-08-2012
EMPLOYEES.JOB_ID[0] = AD_PRES
EMPLOYEES.JOB_ID[1] = AD_VP
EMPLOYEES.JOB_ID[2] = AD_VP
EMPLOYEES.JOB_ID[3] = IT_PROG
EMPLOYEES.JOB_ID[4] = IT_PROG
EMPLOYEES.JOB_ID[5] = IT_PROG
EMPLOYEES.JOB_ID[6] = IT_PROG
EMPLOYEES.JOB_ID[7] = IT_PROG
EMPLOYEES.JOB_ID[8] = FI_MGR
EMPLOYEES.JOB_ID[9] = FI_ACCOUNT
EMPLOYEES.LAST_NAME[0] = King
EMPLOYEES.LAST_NAME[1] = Yang
EMPLOYEES.LAST_NAME[2] = Garcia
EMPLOYEES.LAST_NAME[3] = James
EMPLOYEES.LAST_NAME[4] = Miller
EMPLOYEES.LAST_NAME[5] = Williams
EMPLOYEES.LAST_NAME[6] = Jackson
EMPLOYEES.LAST_NAME[7] = Nguyen
EMPLOYEES.LAST_NAME[8] = Gruenberg
EMPLOYEES.LAST_NAME[9] = Faviet
EMPLOYEES.MANAGER_ID[1] = 100
EMPLOYEES.MANAGER_ID[2] = 100
EMPLOYEES.MANAGER_ID[3] = 102
EMPLOYEES.MANAGER_ID[4] = 103
EMPLOYEES.MANAGER_ID[5] = 103
EMPLOYEES.MANAGER_ID[6] = 103
EMPLOYEES.MANAGER_ID[7] = 103
EMPLOYEES.MANAGER_ID[8] = 101
EMPLOYEES.MANAGER_ID[9] = 108
EMPLOYEES.PHONE_NUMBER[0] = 1.515.555.0100
EMPLOYEES.PHONE_NUMBER[1] = 1.515.555.0101
EMPLOYEES.PHONE_NUMBER[2] = 1.515.555.0102
EMPLOYEES.PHONE_NUMBER[3] = 1.590.555.0103
EMPLOYEES.PHONE_NUMBER[4] = 1.590.555.0104
EMPLOYEES.PHONE_NUMBER[5] = 1.590.555.0105
EMPLOYEES.PHONE_NUMBER[6] = 1.590.555.0106
EMPLOYEES.PHONE_NUMBER[7] = 1.590.555.0107
EMPLOYEES.PHONE_NUMBER[8] = 1.515.555.0108
EMPLOYEES.PHONE_NUMBER[9] = 1.515.555.0109
EMPLOYEES.SALARY[0] = 24000
EMPLOYEES.SALARY[1] = 17000
EMPLOYEES.SALARY[2] = 17000
EMPLOYEES.SALARY[3] = 9000
EMPLOYEES.SALARY[4] = 6000
EMPLOYEES.SALARY[5] = 4800
EMPLOYEES.SALARY[6] = 4800
EMPLOYEES.SALARY[7] = 4200
EMPLOYEES.SALARY[8] = 12008
EMPLOYEES.SALARY[9] = 9000
4Type BUTTONS.SEARCH_FIELD = grantBUTTONS.SEARCH_FIELD[0]BUTTONS.SEARCH_FIELD[0] = grant
5searchClick BUTTONS.SEARCH_BUTTONEMPLOYEES.APEX[0]EMPLOYEES.COMMISSION_PCT[0] = .15
EMPLOYEES.DEPARTMENT_ID[1] = 50
EMPLOYEES.EMAIL[0] = KGRANT
EMPLOYEES.EMAIL[1] = DGRANT
EMPLOYEES.EMPLOYEE_ID[0] = 178
EMPLOYEES.EMPLOYEE_ID[1] = 199
EMPLOYEES.FIRST_NAME[0] = Kimberely
EMPLOYEES.FIRST_NAME[1] = Douglas
EMPLOYEES.HIRE_DATE[0] = 24-05-2017
EMPLOYEES.HIRE_DATE[1] = 13-01-2018
EMPLOYEES.JOB_ID[0] = SA_REP
EMPLOYEES.JOB_ID[1] = SH_CLERK
EMPLOYEES.LAST_NAME[0] = Grant
EMPLOYEES.LAST_NAME[1] = Grant
EMPLOYEES.MANAGER_ID[0] = 149
EMPLOYEES.MANAGER_ID[1] = 124
EMPLOYEES.PHONE_NUMBER[0] = 44.1632.960033
EMPLOYEES.PHONE_NUMBER[1] = 1.650.555.0164
EMPLOYEES.SALARY[0] = 7000
EMPLOYEES.SALARY[1] = 2600
6resetClick BUTTONS.RESET_BUTTONEMPLOYEES.APEX[0]DEPARTMENT.CITY[0] = Seattle
DEPARTMENT.COUNTRY_NAME[0] = United States of America
DEPARTMENT.DEPARTMENT_NAME[0] = Executive
DEPARTMENT.REGION_NAME[0] = Americas
DEPARTMENT.STATE_PROVINCE[0] = Washington
DEPARTMENT.STREET_ADDRESS[0] = 2004 Charade Rd
EMPLOYEES.DEPARTMENT_ID[0] = 90
EMPLOYEES.DEPARTMENT_ID[1] = 90
EMPLOYEES.DEPARTMENT_ID[2] = 90
EMPLOYEES.DEPARTMENT_ID[3] = 60
EMPLOYEES.DEPARTMENT_ID[4] = 60
EMPLOYEES.DEPARTMENT_ID[5] = 60
EMPLOYEES.DEPARTMENT_ID[6] = 60
EMPLOYEES.DEPARTMENT_ID[7] = 60
EMPLOYEES.DEPARTMENT_ID[8] = 100
EMPLOYEES.DEPARTMENT_ID[9] = 100
EMPLOYEES.EMAIL[0] = SKING
EMPLOYEES.EMAIL[1] = NYANG
EMPLOYEES.EMAIL[2] = LGARCIA
EMPLOYEES.EMAIL[3] = AJAMES
EMPLOYEES.EMAIL[4] = BMILLER
EMPLOYEES.EMAIL[5] = DWILLIAMS
EMPLOYEES.EMAIL[6] = VJACKSON
EMPLOYEES.EMAIL[7] = DNGUYEN
EMPLOYEES.EMAIL[8] = NGRUENBE
EMPLOYEES.EMAIL[9] = DFAVIET
EMPLOYEES.EMPLOYEE_ID[0] = 100
EMPLOYEES.EMPLOYEE_ID[1] = 101
EMPLOYEES.EMPLOYEE_ID[2] = 102
EMPLOYEES.EMPLOYEE_ID[3] = 103
EMPLOYEES.EMPLOYEE_ID[4] = 104
EMPLOYEES.EMPLOYEE_ID[5] = 105
EMPLOYEES.EMPLOYEE_ID[6] = 106
EMPLOYEES.EMPLOYEE_ID[7] = 107
EMPLOYEES.EMPLOYEE_ID[8] = 108
EMPLOYEES.EMPLOYEE_ID[9] = 109
EMPLOYEES.FIRST_NAME[0] = Steven
EMPLOYEES.FIRST_NAME[1] = Neena
EMPLOYEES.FIRST_NAME[2] = Lex
EMPLOYEES.FIRST_NAME[3] = Alexander
EMPLOYEES.FIRST_NAME[4] = Bruce
EMPLOYEES.FIRST_NAME[5] = David
EMPLOYEES.FIRST_NAME[6] = Valli
EMPLOYEES.FIRST_NAME[7] = Diana
EMPLOYEES.FIRST_NAME[8] = Nancy
EMPLOYEES.FIRST_NAME[9] = Daniel
EMPLOYEES.HIRE_DATE[0] = 17-06-2013
EMPLOYEES.HIRE_DATE[1] = 21-09-2015
EMPLOYEES.HIRE_DATE[2] = 13-01-2011
EMPLOYEES.HIRE_DATE[3] = 03-01-2016
EMPLOYEES.HIRE_DATE[4] = 21-05-2017
EMPLOYEES.HIRE_DATE[5] = 25-06-2015
EMPLOYEES.HIRE_DATE[6] = 05-02-2016
EMPLOYEES.HIRE_DATE[7] = 07-02-2017
EMPLOYEES.HIRE_DATE[8] = 17-08-2012
EMPLOYEES.HIRE_DATE[9] = 16-08-2012
EMPLOYEES.JOB_ID[0] = AD_PRES
EMPLOYEES.JOB_ID[1] = AD_VP
EMPLOYEES.JOB_ID[2] = AD_VP
EMPLOYEES.JOB_ID[3] = IT_PROG
EMPLOYEES.JOB_ID[4] = IT_PROG
EMPLOYEES.JOB_ID[5] = IT_PROG
EMPLOYEES.JOB_ID[6] = IT_PROG
EMPLOYEES.JOB_ID[7] = IT_PROG
EMPLOYEES.JOB_ID[8] = FI_MGR
EMPLOYEES.JOB_ID[9] = FI_ACCOUNT
EMPLOYEES.LAST_NAME[0] = King
EMPLOYEES.LAST_NAME[1] = Yang
EMPLOYEES.LAST_NAME[2] = Garcia
EMPLOYEES.LAST_NAME[3] = James
EMPLOYEES.LAST_NAME[4] = Miller
EMPLOYEES.LAST_NAME[5] = Williams
EMPLOYEES.LAST_NAME[6] = Jackson
EMPLOYEES.LAST_NAME[7] = Nguyen
EMPLOYEES.LAST_NAME[8] = Gruenberg
EMPLOYEES.LAST_NAME[9] = Faviet
EMPLOYEES.MANAGER_ID[1] = 100
EMPLOYEES.MANAGER_ID[2] = 100
EMPLOYEES.MANAGER_ID[3] = 102
EMPLOYEES.MANAGER_ID[4] = 103
EMPLOYEES.MANAGER_ID[5] = 103
EMPLOYEES.MANAGER_ID[6] = 103
EMPLOYEES.MANAGER_ID[7] = 103
EMPLOYEES.MANAGER_ID[8] = 101
EMPLOYEES.MANAGER_ID[9] = 108
EMPLOYEES.PHONE_NUMBER[0] = 1.515.555.0100
EMPLOYEES.PHONE_NUMBER[1] = 1.515.555.0101
EMPLOYEES.PHONE_NUMBER[2] = 1.515.555.0102
EMPLOYEES.PHONE_NUMBER[3] = 1.590.555.0103
EMPLOYEES.PHONE_NUMBER[4] = 1.590.555.0104
EMPLOYEES.PHONE_NUMBER[5] = 1.590.555.0105
EMPLOYEES.PHONE_NUMBER[6] = 1.590.555.0106
EMPLOYEES.PHONE_NUMBER[7] = 1.590.555.0107
EMPLOYEES.PHONE_NUMBER[8] = 1.515.555.0108
EMPLOYEES.PHONE_NUMBER[9] = 1.515.555.0109
EMPLOYEES.SALARY[0] = 24000
EMPLOYEES.SALARY[1] = 17000
EMPLOYEES.SALARY[2] = 17000
EMPLOYEES.SALARY[3] = 9000
EMPLOYEES.SALARY[4] = 6000
EMPLOYEES.SALARY[5] = 4800
EMPLOYEES.SALARY[6] = 4800
EMPLOYEES.SALARY[7] = 4200
EMPLOYEES.SALARY[8] = 12008
EMPLOYEES.SALARY[9] = 9000
7search emptyClick BUTTONS.SEARCH_BUTTONEMPLOYEES.APEX[0]

Database effects

None: the scenario changes no row and draws no sequence value.

Classified diff against the migrated app

Diff: employees-search
counts: match 660, tolerated 0, waived 1, defect 0, unmapped 0, harness 0
generated-id pairs (source -> target): none

waivers:
  H1 [proposed] APEX links fail with FRM-92022 instead of opening the page: applied to 0 value(s)
  H2 [proposed] Department tab keeps the previous department number: applied to 1 value(s)

[waived] ui.values.DEPARTMENT.DEPARTMENT_ID  rule=waiver:H2  x1
    step05.values.DEPARTMENT.DEPARTMENT_ID[0]: source '90' | target ''

Waivers

IdWaiverValuesReason
H2Department tab keeps the previous department number1When the current employee has no department (a new record, or Kimberely Grant, whose DEPARTMENT_ID is NULL), Forms clears the DEPARTMENT detail block, yet DEPARTMENT_ID on the Department tab keeps showing the number of the department shown before (90, Executive) while name, address, city and region are blank. The number belongs to another employee's department; the target clears the whole tab.