# Coverage summary: hr (generated by harness/coverage/report.py)

Exit check: **PASS**

| Module | Triggers | Program units | Covered | Unreachable | Blocked | Unclassified |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| CONSOLE | 5 | 0 | 5 | 0 | 0 | 0 |
| EMPLOYEES | 14 | 3 | 17 | 0 | 0 | 0 |
| LOGIN | 2 | 0 | 2 | 0 | 0 | 0 |
| **total** | 21 | 3 | 24 | 0 | 0 | 0 |

| Database object | Type | Blocks | Covered | Class |
| --- | --- | ---: | ---: | --- |
| COMPOSE_URL | FUNCTION | 3 | 3 | covered |
| GENERATE_TOKEN | FUNCTION | 5 | 5 | covered |
| VALIDATE_TOKEN | FUNCTION | None | 0 | unreachable |
| ADD_JOB_HISTORY | PROCEDURE | 1 | 1 | covered |
| INSERT_LOG | PROCEDURE | None | 0 | unreachable |
| SECURE_DML | PROCEDURE | None | 0 | unreachable |
| APEX_TRG_01 | TRIGGER | None | 0 | unreachable |
| REQUESTS_TRG_01 | TRIGGER | None | 0 | unreachable |
| SECURE_EMPLOYEES | TRIGGER | None | 0 | unreachable |
| UPDATE_JOB_HISTORY | TRIGGER | 4 | 4 | covered |
| USERS_TRG_01 | TRIGGER | None | 0 | unreachable |

| Item | Class | Scenarios / reason |
| --- | --- | --- |
| `CONSOLE/CONSOLE.EMPLOYEES/WHEN-BUTTON-PRESSED` | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `CONSOLE/CONSOLE.APEX/WHEN-BUTTON-PRESSED` | covered | console-apex |
| `CONSOLE/CONSOLE.LOGOUT/WHEN-BUTTON-PRESSED` | covered | console-logout |
| `CONSOLE/PRE-FORM` | covered | console-apex, console-logout, employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search, login-ok |
| `CONSOLE/WHEN-WINDOW-CLOSED` | covered | employees-close |
| `EMPLOYEES/BUTTONS.SEARCH_BUTTON/WHEN-BUTTON-PRESSED` | covered | employees-search |
| `EMPLOYEES/BUTTONS.RESET_BUTTON/WHEN-BUTTON-PRESSED` | covered | employees-search |
| `EMPLOYEES/BUTTONS.CREATE_BUTTON/WHEN-BUTTON-PRESSED` | covered | employees-create |
| `EMPLOYEES/BUTTONS.SAVE_BUTTON/WHEN-BUTTON-PRESSED` | covered | employees-change-department, employees-change-job, employees-create, employees-details |
| `EMPLOYEES/BUTTONS.DELETE_BUTTON/WHEN-BUTTON-PRESSED` | covered | employees-delete, employees-delete-refused |
| `EMPLOYEES/BUTTONS.CLEAR_BUTTON/WHEN-BUTTON-PRESSED` | covered | employees-clear |
| `EMPLOYEES/BUTTONS.APEX_BUTTON/WHEN-BUTTON-PRESSED` | covered | employees-apex |
| `EMPLOYEES/EMPLOYEES.APEX/WHEN-BUTTON-PRESSED` | covered | employees-apex |
| `EMPLOYEES/EMPLOYEES/ON-POPULATE-DETAILS` | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `EMPLOYEES/EMPLOYEES/PRE-INSERT` | covered | employees-create |
| `EMPLOYEES/EMPLOYEES/ON-CHECK-DELETE-MASTER` | covered | employees-delete, employees-delete-refused |
| `EMPLOYEES/unit:CHECK_PACKAGE_FAILURE` | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `EMPLOYEES/unit:QUERY_MASTER_DETAILS` | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `EMPLOYEES/unit:CLEAR_ALL_MASTER_DETAILS` | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `EMPLOYEES/WHEN-NEW-FORM-INSTANCE` | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `EMPLOYEES/WHEN-WINDOW-CLOSED` | covered | employees-apex, employees-change-department, employees-change-job, employees-close |
| `EMPLOYEES/ON-CLEAR-DETAILS` | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `LOGIN/LOGIN.LOGIN/WHEN-BUTTON-PRESSED` | covered | console-apex, console-logout, employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search, login-fail, login-ok |
| `LOGIN/WHEN-WINDOW-CLOSED` | covered | login-close |

| Trigger | Branch | Class | Scenarios / reason |
| --- | --- | --- | --- |
| `LOGIN/LOGIN.LOGIN/WHEN-BUTTON-PRESSED` | user and password match - console opens | covered | console-apex, console-logout, employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search, login-ok |
| `LOGIN/LOGIN.LOGIN/WHEN-BUTTON-PRESSED` | no matching user - ALERT_FAILURE | covered | login-fail |
| `CONSOLE/CONSOLE.EMPLOYEES/WHEN-BUTTON-PRESSED` | EMPLOYEES not open - OPEN_FORM | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `CONSOLE/CONSOLE.EMPLOYEES/WHEN-BUTTON-PRESSED` | EMPLOYEES already open - GO_FORM | blocked | Needs the CONSOLE button pressed while EMPLOYEES is open. OPEN_FORM(ACTIVATE) puts the EMPLOYEES window over the console, and the way back is the FSAL "Window" menu, which is a client menu with no Forms name (LWMenu1); the runner only clicks named elements. Harness limit. |
| `EMPLOYEES/BUTTONS.SAVE_BUTTON/WHEN-BUTTON-PRESSED` | block changed - commit | covered | employees-change-department, employees-change-job, employees-create |
| `EMPLOYEES/BUTTONS.SAVE_BUTTON/WHEN-BUTTON-PRESSED` | nothing changed - no commit | covered | employees-details |
| `EMPLOYEES/BUTTONS.DELETE_BUTTON/WHEN-BUTTON-PRESSED` | confirmed - delete and commit | covered | employees-delete |
| `EMPLOYEES/BUTTONS.DELETE_BUTTON/WHEN-BUTTON-PRESSED` | cancelled - nothing deleted | covered | employees-delete-refused |
| `EMPLOYEES/BUTTONS.CLEAR_BUTTON/WHEN-BUTTON-PRESSED` | changed, confirmed - changes discarded and requeried | covered | employees-clear |
| `EMPLOYEES/BUTTONS.CLEAR_BUTTON/WHEN-BUTTON-PRESSED` | changed, cancelled - changes kept | covered | employees-clear |
| `EMPLOYEES/BUTTONS.CLEAR_BUTTON/WHEN-BUTTON-PRESSED` | nothing changed - no question | covered | employees-clear |
| `EMPLOYEES/EMPLOYEES/ON-CHECK-DELETE-MASTER` | job history exists, delete refused | covered | employees-delete-refused |
| `EMPLOYEES/EMPLOYEES/ON-CHECK-DELETE-MASTER` | no job history, delete goes ahead | covered | employees-delete |
| `EMPLOYEES/EMPLOYEES/ON-POPULATE-DETAILS` | master record NEW or INSERT - no detail query | covered | employees-clear, employees-create |
| `EMPLOYEES/EMPLOYEES/ON-POPULATE-DETAILS` | DEPARTMENT_ID set - department queried | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `EMPLOYEES/EMPLOYEES/ON-POPULATE-DETAILS` | DEPARTMENT_ID null - no department query | covered | employees-search |
| `EMPLOYEES/EMPLOYEES/ON-POPULATE-DETAILS` | MANAGER_ID set - manager queried | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-delete, employees-delete-refused, employees-details, employees-search |
| `EMPLOYEES/EMPLOYEES/ON-POPULATE-DETAILS` | MANAGER_ID null - no manager query | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `EMPLOYEES/EMPLOYEES/ON-POPULATE-DETAILS` | EMPLOYEE_ID set - history queried | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `EMPLOYEES/EMPLOYEES/ON-POPULATE-DETAILS` | EMPLOYEE_ID null on a queried record - no history query | unreachable | EMPLOYEE_ID is the primary key of EMPLOYEES, so a queried record always has it; NEW and INSERT records return before this point. |
| `EMPLOYEES/EMPLOYEES/ON-POPULATE-DETAILS` | cursor moved by the queries, returned to the start item | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `EMPLOYEES/EMPLOYEES/ON-POPULATE-DETAILS` | cursor still on the start item after the queries | unreachable | Every relation is not deferred, so each detail query does GO_BLOCK to the detail and the cursor always leaves the master item; HISTORY is always queried (EMPLOYEE_ID is the key). |
| `EMPLOYEES/unit:QUERY_MASTER_DETAILS` | relation not deferred - GO_BLOCK and EXECUTE_QUERY | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `EMPLOYEES/unit:QUERY_MASTER_DETAILS` | relation deferred - SET_BLOCK_PROPERTY non-coordinated | unreachable | No relation of EMPLOYEES is deferred and nothing changes that at run time. |
| `EMPLOYEES/unit:QUERY_MASTER_DETAILS` | GO_BLOCK to the detail failed - exception handler | blocked | Needs GO_BLOCK to a detail block to fail during coordination. The detail blocks have no PRE-BLOCK, WHEN-NEW-BLOCK-INSTANCE or validation that can refuse entry; no input found that makes it fail. |
| `EMPLOYEES/unit:CHECK_PACKAGE_FAILURE` | previous built-in succeeded | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `EMPLOYEES/unit:CHECK_PACKAGE_FAILURE` | previous built-in failed - raise FORM_TRIGGER_FAILURE | blocked | Called after GO_BLOCK and GO_ITEM in the coordination units; no input found that makes these fail (see the QUERY_MASTER_DETAILS exception branch). |
| `EMPLOYEES/unit:CLEAR_ALL_MASTER_DETAILS` | a detail block holds rows - cleared without validation | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-search |
| `EMPLOYEES/unit:CLEAR_ALL_MASTER_DETAILS` | every detail block empty - nothing cleared | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-open, employees-search |
| `EMPLOYEES/unit:CLEAR_ALL_MASTER_DETAILS` | cursor moved by the clearing, returned to the start item | covered | employees-apex, employees-change-department, employees-change-job, employees-clear, employees-close, employees-create, employees-delete, employees-delete-refused, employees-details, employees-search |
| `EMPLOYEES/unit:CLEAR_ALL_MASTER_DETAILS` | changed detail block below the master - ask to commit | unreachable | DEPARTMENT, MANAGER and HISTORY allow no insert, update or delete, so a detail block is never CHANGED. |
| `EMPLOYEES/unit:CLEAR_ALL_MASTER_DETAILS` | a detail block not cleared - raise FORM_TRIGGER_FAILURE | blocked | Needs CLEAR_BLOCK(NO_VALIDATE) on a read-only detail block to leave rows behind; no input found that makes it fail. |

| Scenario | Form | Named pass | FRD pass | 3 runs identical | 3 runs pass | Golden sha256 | Bytes | Items fired |
| --- | --- | --- | --- | --- | --- | --- | ---: | ---: |
| console-apex | login | True | True | True | True/True/True | `beca9553757e4295` | 2761 | 3 |
| console-logout | login | True | True | True | True/True/True | `d60c16050f44f263` | 2403 | 3 |
| employees-apex | login | True | True | True | True/True/True | `3a7d93d44aaff377` | 32300 | 12 |
| employees-change-department | login | True | True | True | True/True/True | `d3092f380e13b844` | 26552 | 11 |
| employees-change-job | login | True | True | True | True/True/True | `29bb7b252b95f75c` | 26176 | 11 |
| employees-clear | login | True | True | True | True/True/True | `1f7f15469811ae7d` | 40755 | 10 |
| employees-close | login | True | True | True | True/True/True | `40d2a0a6095f0001` | 19229 | 11 |
| employees-create | login | True | True | True | True/True/True | `29c761f76b33ac76` | 56847 | 12 |
| employees-delete | login | True | True | True | True/True/True | `6e214e326fd20577` | 24834 | 11 |
| employees-delete-refused | login | True | True | True | True/True/True | `5b428577d083a1c9` | 35691 | 11 |
| employees-details | login | True | True | True | True/True/True | `a7883fadeed8f487` | 34824 | 10 |
| employees-open | login | True | True | True | True/True/True | `dc79c5d8efb167e6` | 7253 | 9 |
| employees-search | login | True | True | True | True/True/True | `df43216628249c33` | 28469 | 11 |
| login-close | login | True | True | True | True/True/True | `1a7bb158d42e0f0d` | 963 | 1 |
| login-fail | login | True | True | True | True/True/True | `44dd0cc0f472239e` | 3005 | 1 |
| login-ok | login | True | True | True | True/True/True | `46a6f0a75356a7a2` | 1808 | 2 |
| login-open | login | True | True | True | True/True/True | `55f0a85edc9b786b` | 831 | 0 |
