# Logical Test Cases
## LTCs
This page describes the logical test cases (LTCs) that are used to verify the correct functionality of the wallet app.
Test are written in Gherkin syntax with a Given When Then structure. Each LTC is implemented with at least one manual
or automated tests.
### LTC1
#### PID issuance
**Given** user has completed security setup
**When** user authenticates at auth server
**Then** system displays issued attributes to user for verification
**When** user adds attributes
**And** confirms using their PIN
**Then** system displays message that wallet is created
**And** provides a link to the dashboard
---
### LTC2
#### Issuance fails
**Given** user has completed security setup
**And** user authenticates at auth server
**When** issuance fails
**Then** system displays message that issuance failed
**And** provides a link to try again
---
### LTC3
#### Authentication at auth server fails
**Given** user has completed security setup
**And** user authentication at auth server fails
**Then** system displays message that authentication failed
**And** provides a link to try again
---
### LTC4
#### Rejects issued attributes
**Given** user has completed security setup
**And** user authenticates at auth server
**And** system displays issued attributes to user for verification
**When** user rejects issued attributes
**Then** provides a link to try again
---
### LTC5
#### Disclosure based Issuance
**Given** user has completed PID setup and opened the app
**When** user invokes a universal link from a (Q)EAA issuer
**Then** system requests approval for disclosure
**When** user approves with PIN
**Then** system validates PIN and proceeds
**And** system requests approval for attestations
**When** user approves with PIN
**Then** system issues card and displays it to user
**And** provides a link to the dashboard
---
### LTC6
#### Invalid universal link
**Given** user invokes an invalid universal link
**Then** system informs user link is not recognized
---
### LTC7
#### Cross-device generic issuance
**Given** user is on a device with wallet installed
**When** relying party presents a QR code
**And** user scans it with wallet
**Then** system requests approval for disclosure
**When** user approves with PIN
**Then** system validates PIN and proceeds
**And** system requests approval for attestations
**When** user approves with PIN
**Then** system issues card and displays it to user
**And** provides a link to the dashboard
---
### LTC8
#### Reject disclosure of attributes
**Given** user starts card issuance
**When** system asks for disclosure consent
**And** user selects 'stop'
**Then** system confirms cancellation
---
### LTC9
#### No cards to be issued
**Given** user has no cards to be issued available at EAA issuer
**When** user performs disclosure based issuance to retrieve cards
**Then** system displays error message that no cards are available for issuance
---
### LTC10
#### Wallet does not contain requested attributes
**Given** wallet does not contain attributes to fulfill a disclosure request
from an issuer
**When** user invokes a universal link from a (Q)EAA issuer
**Then** System displays an error message with instructions
**When** user selects 'see details'
**Then** system displays a bottom sheet with app information
---
### LTC11
#### Renew card
**Given** user has an EAA card in its wallet
**When** user invokes a universal link from issuer of card
**Then** system requests approval for disclosure
**When** user approves with PIN
**Then** system validates PIN and proceeds
**And** system requests approval card renewal
**When** user approves with PIN
**Then** system renews card
**And** provides a link to the dashboard
**And** merges history of old and new cards
**And** adds a card renewel event to the history
---
### LTC12
#### View introduction
**Given** the app is opened
**And** user has not completed introduction
**When** user navigates through the introduction screens
**Then** system displays set pin screen
---
### LTC13
#### Skip introduction
**Given** the app is opened
**And** user has not completed introduction
**When** user skips the introduction screens
**Then** systems displays the privacy introduction screen
---
### LTC14
#### View app tour
**Given** user has not closed app after obtaining PID
**When** user views the app dashboard
**Then** system displays a non-dismissible banner
**When** user views the menu
**Then** system displays an app tour menu item
**When** user selects app tour
**Then** system displays an app tour overview with a list of video items
**When** user selects a video
**Then** system opens the videoplayer
**And** videoplayer contains correct controls
---
### LTC15
#### Share data
**Given** user has completed PID setup and opened the app
**When** user starts disclosure process at relying party
**Then** system requests user consent
**When** user approves with PIN
**Then** system discloses attributes to relying party
**And** system displays data shared message
---
### LTC16
#### Cross-device share data
**Given** user starts disclosure on a non-mobile device
**When** user scans QR code with wallet
**Then** system validates relying party URL
**When** user confirms to proceed
**And** approves disclosure with PIN
**Then** system completes disclosure
**And** displays a success message
---
### LTC17
#### Decline consent to share data
**Given** user is shown consent screen
**When** user selects 'Stop'
**Then** system confirms cancellation
**When** user confirms
**Then** system displays the stopped screen
**And** provides a link to the dashboard
---
### LTC18
#### RP Login
**Given** user has completed PID setup and opened the app
**When** user starts login process at relying party
**Then** system requests consent to disclose BSN
**When** user approves with PIN
**Then** system discloses BSN to relying party
**And** relying pary displays login success message
---
### LTC19
#### Cross-device login
**Given** user starts login on a non-mobile device
**When** user scans QR code with wallet
**Then** system validates relying party URL
**When** user confirms to continue
**And** approves disclosure with PIN
**Then** login is completed
**And** system displays success message
---
### LTC20
#### Disclosure fails
**Given** user has completed security setup
**When** user starts a disclosure flow
**And** disclosure fails
**And** system displays message disclosure failed
**And** provides a link to try again
---
### LTC21
#### Delete App data
**Given** user has completed PID setup and opened the app
**When** user selects 'Remove data' from the settings menu
**Then** system displays a prompt with 'Cancel' and 'Yes, Delete' options
**When** user selects 'Yes, Delete'
**Then** system displays the introduction screen
---
### LTC22
#### View activity list
**Given** user has completed PID setup and opened the app
**When** user selects 'activities' from settings or dashboard
**Then** system displays list of all usage and management activities
**When** user selects an activity
**Then** system displays details for the selected activity
**When** user navigates back
**And** user selects 'About Organization'
**Then** system displays information about the organization
---
### LTC23
#### View card-specific activity list
**Given** user has completed PID setup and opened the app
**When** user selects 'activities' on card details screen
**Then** system displays list of activities related to the selected card
**When** user selects an activity
**Then** system displays details for the selected activity
**When** user navigates back
**And** user selects 'About Organization'
**Then** system displays organization information
---
### LTC24
#### View all available cards
**Given** user has completed PID setup and unlocked the app
**When** user completes one of the relevant flows (unlock app, obtain PID, or
obtain card)
**Then** system displays all cards currently available in the app
---
### LTC25
#### View Card Details
**Given** dashboard is opened
**When** user selects a card
**Then** system displays the card details
**When** user selects card attributes
**Then** system displays the card attributes
**When** user navigates back
**And** user selects card history
**Then** system displays the card history
**When** user navigates back
**And** user selects organization
**Then** system displays the organization
---
### LTC26
#### Show app menu
**Given** user has completed PID setup and opened the app
**When** user selects 'menu' on the dashboard
**Then** system displays all app menu items
---
### LTC27
#### View settings menu
**Given** app menu is shown
**When** user selects 'Settings'
**Then** system displays settings menu items
**When** user navigates back
**Then** system displays app menu items
---
### LTC28
#### View app information
**Given** user selects app information
**Then** system displays the About App screen
---
### LTC29
#### View privacy statement
**Given** About App screen is shown
**When** user selects 'Privacy Statement'
**Then** system displays the Privacy Statement screen
**When** user navigates back
**Then** system displays the About App screen again
---
### LTC30
#### Select a new language
**Given** system displays language selection screen
**When** user selects a non-active language
**Then** system updates the UI to the selected language
**And** displays the updated language as active
**When** user navigates back
**Then** system displays the settings menu in the selected language
---
### LTC31
#### Get help
**Given** system displays a PIN screen
**When** user selects 'help'
**Then** system displays get help screen
---
### LTC32
#### Open closed app
**Given** the app is installed
**And** wallet is registered
**When** user opens the app
**Then** system displays splash screen
**And** system determines if wallet is registered
**And** system displays the dashboard
---
### LTC33
#### Open app via universal link
**Given** the app is installed
**And** wallet is registered
**When** user opens the app by following a universal link
**Then** system validates the universal link
**And** app is opened
---
### LTC34
#### Open app with unregistered wallet
**Given** the app is installed
**When** user opens the app
**Then** system displays introduction screen
---
### LTC35
#### Invoke universal link when app is not installed
**Given** user invokes a universal link
**And** the app is not installed
**Then** system navigates user to fallback page
**And** system displays message to install the app
---
### LTC36
#### Open universal link via external QR scanner
**Given** user invokes a universal link using an external QR scanner
**Then** system displays message to rescan the QR code using the in-app scanner
---
### LTC37
#### Unlock app with correct PIN
**Given** user has completed setup of remote PIN and biometrics
**When** user opens the app
**Then** system displays PIN screen
**When** user enters correct PIN
**Then** system displays dashboard
---
### LTC38
#### Unlock app with biometric
**Given** user has completed setup of remote PIN and biometrics
**When** user opens the app
**Then** system requests biometric
**When** user enters valid biometric
**Then** system displays dashboard
---
### LTC39
#### Unlock app with invalid biometric
**Given** user has completed setup of remote PIN and biometrics
**When** user opens the app
**Then** system requests biometric
**When** user enters invalid biometric
**Then** device gives option to try again
---
### LTC40
#### Unlock app with invalid PIN
**Given** user has completed setup of remote PIN and biometrics
**When** user opens the app
**Then** system displays PIN screen
**When** user enters invalid PIN
**Then** system handles it according to PIN retry policy
---
### LTC41
#### Recover PIN
**Given** user start PIN recovery
**When** user changes PIN successfully
**Then** user can use new PIN
**And** user can not use old PIN
---
### LTC42
#### App update is available
**Given** the app is installed
**And** an app update is available
**When** user opens the app
**Then** System displays a message on update informing user that an update
is available and offers instructions on how to update
---
### LTC43
#### Current app version is blocked
**Given** the app is installed
**And** an app update is available
**And** current app version is blocked
**When** user opens the app
**Then** System displays a message on update informing user that current app
version is blocked and offers instructions on how to update
---
### LTC44
#### Wallet not created when universal link is invoked
**Given** user invokes a universal link
**And** wallet is not created
**Then** System shows introduction screen
---
### LTC45
#### Change PIN
**When** user changes the PIN code
**Then** the change is successful
**And** old PIN is unusable
**And** new PIN is usable
---
### LTC46
#### PIN is invalid timeout
**Scenario Outline:**
**Given** system allows 4 rounds of 4 attempts each
**And** user enters their PIN invalid for all `` attempts in round
``
**Then** system introduces a timeout of `` for that round
**Examples:**
| round | Z{i} |
| ----- | ---- |
| 1 | 1m |
| 2 | 5m |
| 3 | 60m |
---
### LTC47
#### PIN is invalid Block
**Given** system allows 4 rounds of 4 attempts each
**And** user enters their PIN invalid for all attempts in all 4
rounds
**Then** system blocks access
---
### LTC48
#### PIN entries do not match, try again
**Given** user enters the correct current PIN
**When** user does an invalid confirmation
**Then** system displays a message that the PIN entries are not equal and
offers user to try again
---
### LTC49
#### PIN entries do not match, choose new PIN
**Given** user enters PIN
**When** user does an invalid confirmation
**Then** system displays a message that the PIN entries are not equal and
instructs user to choose a new PIN
---
### LTC50
#### PIN entry does not conform to policy
**Scenario Outline:**
**Given** user enters the correct current PIN
**When** user enters a PIN `` that does not conform to policy
**Then** system displays a message that the PIN entry is not conformant and
instructs user to choose a new PIN
**Examples:**
| pin |
| ------ |
| 111111 |
| 123456 |
| 654321 |
---
### LTC51
#### Setup PIN
**Given** user completed introduction
**When** user enters a valid pin
**And** user confirms pin
**Then** remote pin is configured
---
### LTC52
#### Setup PIN fails device does not pass app and key attestation
**Given** device can not pass app and key attestation
**When** user sets up a remote PIN
**Then** System displays message that device is not supported
---
### LTC53
#### Logout from menu
**Given** user has completed PID setup and opened the app
**When** user selects 'Logout' from the menu
**Then** system logs out user
**And** displays the PIN screen
---
### LTC54
#### Logout due to inactivity
**Given** user is inactive for warning timeout Z
**Then** system displays inactivity prompt
**When** user remains inactive for X - Z minutes
**Then** system logs out user
**And** displays the PIN screen
---
### LTC55
#### Logout due to background timeout
**Given** user puts the app in the background
**When** background timeout Y elapses
**Then** system logs out user
**And** app remains in the background
---
### LTC56
#### Confirm logout on inactivity prompt
**Given** system displays inactivity prompt
**When** user selects 'Log out'
**Then** system logs out user
**And** displays the PIN screen
---
### LTC57
#### Dismiss inactivity prompt
**Given** system displays inactivity prompt
**When** user selects 'Yes, continue'
**Then** prompt is dismissed
**And** system displays the currently active screen
---
### LTC58
#### Skip setting up biometrics
**Given** user has set up pin
**And** device supports biometrics
**When** user skips setting up biometrics
**Then** system displays message wallet is secured by pin
---
### LTC59
#### Device does not support biometrics
**Given** device does not support biometrics
**When** user open apps settings menu
**Then** system does not display biometric configuration option
---
### LTC60
#### Disable biometrics
**Given** user has enabled biometrics
**When** user disables biometrics
**Then** biometrics is disabled
**And** user can not use biometric login
---
### LTC61
#### Setup biometrics in settings
**Given** user has not enabled biometrics
**And** device supports biometrics
**When** user enables biometrics
**Then** system requests pin
**When** user enters pin
**And** user enter biometric
**Then** biometrics is enabled
**And** user can use biometric login
---
### LTC62
#### Transfer wallet
**Given** user has an existing active source wallet
**And** user has completed PID issuance on its destination wallet
**When** user completes wallet transfer
**Then** the destination wallet contains the data of the source wallet
**And** the destination wallet is active
**And** the source wallet does not contain data
**And** the source wallet is inactive
---
### LTC63
#### Stop transfer flow on source device
**Given** user has an existing active source wallet
**And** user has completed PID issuance on its destination wallet
**When** user aborts wallet transfer on the source device
**Then** the source wallet displays the dashboard screen
**And** user is prompted on the destination device to try again
---
### LTC64
#### Stop transfer flow on destination device
**Given** user has an existing active source wallet
**And** user has completed PID issuance on its destination wallet
**When** user aborts wallet transfer on the destination device
**Then** user is prompted on the destination device to try again
**And** the source wallet displays the dashboard screen
---
### LTC65
#### Select another card to be disclosed
**Given** user has multiple cards that can fulfill a disclosure request
**When** user starts disclosure
**Then** system offers user option to select another card
**When** user selects a card
**Then** the requested attributes are disclosed from the previously selected card
---
### LTC66
#### Renew PID
**Given** user has issued PID
**When** user renews PID
**Then** PID is renewed
**And** a card renewal event is added to the history
---
### LTC67
#### Revoke PID
**Given** user has issued PID
**When** PID is revoked
**Then** PID card is displayed as revoked
**And** PID cannot be presented anymore
---
### LTC68
#### Revoke EAA Card
**Given** user has an EAA card in its wallet
**When** EAA card is revoked
**Then** EAA card is displayed as revoked
**And** EAA card cannot be presented anymore
---
### LTC69
#### Universal link is invoked while wallet is not personalized
**Given** user is performing app personalization
**When** user invokes a universal link
**Then** System displays message informing the user that personalization should be completed first
---
### LTC70
#### Receive revocation code
**Given** user has completed remote PIN setup
**Then** system display a revocation code
**And** user has to confirm the revocation code is written to continue
---
### LTC71
#### System sends notifications for card status changes
**Given** a card exists in the wallet
**And** the card
**Then** the system displays an in-app notification at
**And** the system sends a push notification at
**And** the in-app notification contains ""
**And** the push notification contains ""
**When** the user selects the notification
**Then** the system displays the card details screen
Cases:
| card_type | scenario | schedule | in_app_message | push_message |
|-----------|-------------------------------|------------|----------------------------------------------------|---------------------------------------------------------------------------|
| PID | will expire in 14 days | 10:00 AM | In 14 days, your app will not be working | In 14 days, your app will not working. Solve this in the app. |
| PID | has expired | immediate | Attention: your NL Wallet is not working right now | Attention: your NL Wallet does not work right now. Solve this in the app. |
| PID | is revoked by issuer | immediate | Attention: your NL Wallet is not working right now | Attention: your NL Wallet does not work right now. Solve this in the app. |
| EAA | will expire in 14 days | 10:00 AM | {Card} expires in 14 days | {Card} expires in 14 days. Replace this card if you still need it. |
| EAA | has expired | immediate | {Card} expired | {Card} expired. Replace this card if you still need it. |
| EAA | is revoked by issuer | immediate | {Card} withdrawn by issuer | {Card} withdrawn by issuer. Replace this card if you still need it. |
---
### LTC72
#### Configure notifications
**Given** notifications are turned off
**And** OS notifications are not scheduled
**When** user enables notifications
**Then** OS notifications are scheduled
---
### LTC73
#### View revocation code in settings
**Given** user has completed PID setup and opened the app
**When** user selects 'View your deletion code' from the settings menu
**And** use confirms with PIN to view the revocation code
**Then** system displays the revocation code
---
### LTC74
#### Revoke wallet with revocation code
**Given** user visits the revocation portal
**When** user submits the revocation code
**And** user opens the app
**Then** a wallet is deleted message is displayed
---
### LTC75
#### Revoke wallet by wallet id
**When** wallet is revoked by wallet id
**And** user opens the app
**Then** a your wallet is blocked message is displayed
---
### LTC76
#### Revoke wallet by recovery id
**Given** user visits the revocation portal
**When** user submits the revocation code
**And** user opens the app
**Then** a you have been blocked message is displayed
---
### LTC77
#### Revoke wallet solution
**Given** user visits the revocation portal
**When** user submits the revocation code
**And** user opens the app
**Then** a wallet solution is revoked message is displayed