Repo created

This commit is contained in:
Fr4nz D13trich 2025-11-24 18:55:42 +01:00
parent a629de6271
commit 3cef7c5092
2161 changed files with 246605 additions and 2 deletions

30
ui-flows/README.md Normal file
View file

@ -0,0 +1,30 @@
# UI flows
Ui flows are using [Maestro](https://maestro.mobile.dev/), that allows to write UI E2E tests for Android.
The flows are located in the `ui-utils` folder with this structure:
- `custom` - flows that should not be committed to git
- `shared` - flows usable by other flows
- `validate` - flows that assert behavior of the app
## Requirements
- Android Pixel 2 emulator 5.0" screen with 1080x1920 resolution and 420dpi
- API 31
- English as system language
## Install
To be able to run the flows, you need to [install the CLI tools](https://maestro.mobile.dev/getting-started/installing-maestro)
## Run
Ensure a device or emulator is running and execute:
- `maestro test ui-flows/validate/compose_simple_message.yml `
- `maestro test ui-flows/validate/message_details_show_contact_names.yml`
## Write
Have a look at the [documentation](https://maestro.mobile.dev/) on how to write flows.

View file

@ -0,0 +1,158 @@
appId: com.fsck.k9.debug
---
- launchApp:
clearState: true
- assertVisible:
id: "com.fsck.k9.debug:id/welcome_message"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/welcome_screen"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/account_setup_step1_empty"
- tapOn:
id: "com.fsck.k9.debug:id/account_email"
- inputText: "dummy@outlook.com"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/account_setup_step1_sign_in"
- pressKey: "back"
- tapOn:
id: "com.fsck.k9.debug:id/account_email"
- eraseText
- inputText: "user@domain.example"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- tapOn:
id: "com.fsck.k9.debug:id/account_password"
- inputText: "password"
- pressKey: "back"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/account_setup_step1_filled_in"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/account_setup_step2_account_type_selection"
- tapOn:
id: "com.fsck.k9.debug:id/imap"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/account_setup_step3_imap_incoming_server_1"
- scroll
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/account_setup_step3_imap_incoming_server_2"
- scrollUntilVisible:
element:
id: "com.fsck.k9.debug:id/account_server"
direction: UP
- tapOn:
id: "com.fsck.k9.debug:id/account_server"
- eraseText
- inputText: "wrong.host.badssl.com"
- tapOn:
id: "com.fsck.k9.debug:id/account_port"
- eraseText
- inputText: "443"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- assertVisible:
id: "android:id/alertTitle"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/account_setup_step3.6_invalid_certificate"
- tapOn:
id: "android:id/button2"
- tapOn:
id: "com.fsck.k9.debug:id/account_server"
- eraseText
- inputText: "127.0.0.1"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- assertVisible:
id: "android:id/alertTitle"
- pressKey: "back"
- assertVisible:
id: "com.fsck.k9.debug:id/progress"
- takeScreenshot: "user-manual/screenshots/account_setup_step3.5_imap_checking_incoming_server_settings"
- pressKey: "back"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- tapOn:
id: "android:id/button2"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/account_setup_step4_smtp_outgoing_server"
- tapOn:
id: "com.fsck.k9.debug:id/account_server"
- eraseText
- inputText: "127.0.0.1"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- assertVisible:
id: "android:id/alertTitle"
- pressKey: "back"
- assertVisible:
id: "com.fsck.k9.debug:id/progress"
- takeScreenshot: "user-manual/screenshots/account_setup_step4.5_smtp_checking_outgoing_server_settings"
- pressKey: "back"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- tapOn:
id: "android:id/button2"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/account_setup_step5_account_options"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- tapOn:
id: "com.fsck.k9.debug:id/account_description"
- inputText: "My first account"
- tapOn:
id: "com.fsck.k9.debug:id/account_name"
- inputText: "Demo User"
- pressKey: "back"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/account_setup_step6_account_name"
- pressKey: "back"
- pressKey: "back"
- pressKey: "back"
- pressKey: "back"
- tapOn:
id: "com.fsck.k9.debug:id/pop"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/account_setup_step3_pop3_incoming_server"

View file

@ -0,0 +1,121 @@
appId: com.fsck.k9.debug
---
- launchApp:
clearState: true
- tapOn:
id: "com.fsck.k9.debug:id/next"
- tapOn:
id: "com.fsck.k9.debug:id/account_email"
- inputText: "fun@k9mail.example"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- tapOn:
id: "com.fsck.k9.debug:id/account_description"
- inputText: "Personal"
- tapOn:
id: "com.fsck.k9.debug:id/account_name"
- inputText: "Demo User"
- tapOn:
id: "com.fsck.k9.debug:id/done"
- tapOn:
id: "com.android.permissioncontroller:id/permission_allow_button"
- tapOn: "Navigate up"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/drawer_one_account"
- tapOn: "Settings"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/settings_one_account"
- tapOn: "Add account"
- tapOn:
id: "com.fsck.k9.debug:id/account_email"
- inputText: "serious@k9mail.example"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- tapOn:
id: "com.fsck.k9.debug:id/account_description"
- inputText: "Work"
- tapOn:
id: "com.fsck.k9.debug:id/done"
- tapOn: "Navigate up"
- tapOn: "Manage folders"
- tapOn: "Inbox"
- tapOn: "Unify"
- back
- tapOn: "Turing Awards"
- tapOn: "Unify"
- back
- back
- tapOn: "Navigate up"
- tapOn: "Turing Awards"
- swipe:
direction: DOWN
- back
- tapOn:
id: "com.fsck.k9.debug:id/contact_picture"
index: 0
- tapOn:
id: "com.fsck.k9.debug:id/subject"
index: 1
- tapOn:
id: "com.fsck.k9.debug:id/subject"
index: 2
- tapOn:
id: "com.fsck.k9.debug:id/subject"
index: 3
- tapOn:
id: "com.fsck.k9.debug:id/delete"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/unified_inbox"
- tapOn: "Navigate up"
- tapOn:
id: "com.fsck.k9.debug:id/material_drawer_account_header_text_switcher"
- tapOn: "Personal"
- back
- tapOn: "Navigate up"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/drawer_two_accounts"
- tapOn:
id: "com.fsck.k9.debug:id/material_drawer_account_header_text_switcher"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/drawer_account_list"
- tapOn:
id: "com.fsck.k9.debug:id/material_drawer_account_header_text_switcher"
- tapOn: "Settings"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/settings_two_accounts"
- tapOn: "Work"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/account_settings"
- tapOn: "More options"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/account_settings_menu_expanded"

View file

@ -0,0 +1,84 @@
appId: com.fsck.k9.debug
---
- launchApp:
clearState: true
- tapOn:
id: "com.fsck.k9.debug:id/next"
- tapOn:
id: "com.fsck.k9.debug:id/account_email"
- inputText: "fun@k9mail.example"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- tapOn:
id: "com.fsck.k9.debug:id/account_description"
- inputText: "Personal"
- tapOn:
id: "com.fsck.k9.debug:id/account_name"
- inputText: "Demo User"
- tapOn:
id: "com.fsck.k9.debug:id/done"
- tapOn:
id: "com.android.permissioncontroller:id/permission_allow_button"
- tapOn: "Navigate up"
- tapOn: "Settings"
- tapOn: "Add account"
- tapOn:
id: "com.fsck.k9.debug:id/account_email"
- inputText: "serious@k9mail.example"
- tapOn:
id: "com.fsck.k9.debug:id/next"
- tapOn:
id: "com.fsck.k9.debug:id/account_description"
- inputText: "Work"
- tapOn:
id: "com.fsck.k9.debug:id/done"
- tapOn: "Navigate up"
- tapOn: "Turing Awards"
- swipe:
direction: DOWN
- tapOn: "More options"
- tapOn:
id: "com.fsck.k9.debug:id/title"
index: 1
- tapOn:
id: "android:id/button1"
- tapOn:
id: "com.fsck.k9.debug:id/contact_picture"
index: 0
- tapOn:
id: "com.fsck.k9.debug:id/subject"
index: 1
- tapOn: "Mark unread"
- tapOn:
id: "com.fsck.k9.debug:id/subject"
index: 2
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/message_list_multi_select"
- back
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/reading_folder_view"
- scrollUntilVisible:
element:
id: "com.fsck.k9.debug:id/subject"
text: "The Humble Programmer"
direction: DOWN
timeout: 5000
- tapOn: "The Humble Programmer"
- waitForAnimationToEnd
- takeScreenshot: "user-manual/screenshots/reading_email_view"

View file

@ -0,0 +1,23 @@
# use env to provide properties:
# env:
# INDEX: 0
# NAME: Alice
# FIRST_NAME: Alice
appId: com.fsck.k9.debug
---
## Add contact
- tapOn:
id: "com.fsck.k9.debug:id/menu_add_contact"
index: ${INDEX}
- tapOn: ${FIRST_NAME}
- inputText: " from Contacts"
### Save
- tapOn:
id: "com.android.contacts:id/editor_menu_save_button"
### Exit
- tapOn:
id: "com.android.systemui:id/back"

View file

@ -0,0 +1,21 @@
appId: com.fsck.k9.debug
---
## Open settings
- runFlow: open_display_settings.yml
### Scroll to "Show contact names"
- scrollUntilVisible:
element:
id: "android:id/title"
text: "Show contact names"
direction: DOWN
timeout: 10000
### Enable "Show contact names"
- tapOn:
id: "android:id/title"
text: "Show contact names"
### Close settings
- runFlow: close_display_settings.yml

View file

@ -0,0 +1,9 @@
appId: com.fsck.k9.debug
---
- tapOn: "Navigate up"
- tapOn: "Navigate up"
- tapOn: "Navigate up"
- swipe:
direction: LEFT
duration: 200

View file

@ -0,0 +1,29 @@
appId: com.fsck.k9.debug
---
- launchApp:
clearState: true
# Welcome
- tapOn:
id: "com.fsck.k9.debug:id/next"
## Setup new account
- tapOn:
id: "com.fsck.k9.debug:id/account_email"
- inputText: "demo@k9mail.example"
- tapOn:
id: "com.fsck.k9.debug:id/next"
## Account name configuration
- tapOn:
id: "com.fsck.k9.debug:id/account_description"
- inputText: "Demo Account"
- tapOn:
id: "com.fsck.k9.debug:id/account_name"
- inputText: "Demo User"
- tapOn:
id: "com.fsck.k9.debug:id/done"
## Grant access to contacts
- tapOn:
id: "com.android.permissioncontroller:id/permission_allow_button"

View file

@ -0,0 +1,22 @@
appId: com.fsck.k9.debug
---
## Open drawer
- tapOn: "Navigate up"
### Open settings
- tapOn:
id: "com.fsck.k9.debug:id/material_drawer_name"
index: 9
### Open general settings
- tapOn:
id: "com.fsck.k9.debug:id/text"
index: 0
text: "General settings"
### Open display settings
- tapOn:
id: "android:id/title"
index: 0
text: "Display"

View file

@ -0,0 +1,14 @@
appId: com.fsck.k9.debug
---
- tapOn:
id: "com.fsck.k9.debug:id/participants_container"
- swipe:
from:
id: "com.fsck.k9.debug:id/message_details_list"
direction: UP
- swipe:
from:
id: "com.fsck.k9.debug:id/message_details_list"
direction: DOWN
duration: 200

View file

@ -0,0 +1,20 @@
# use env to provide properties:
# env:
# NAME: Alice
appId: com.fsck.k9.debug
---
## Open contact
- tapOn:
id: "com.fsck.k9.debug:id/name"
text: ${NAME}
## Delete contact
- tapOn: "More options"
- tapOn:
id: "android:id/title"
index: 1
- tapOn:
id: "android:id/button1"

View file

@ -0,0 +1,60 @@
appId: com.fsck.k9.debug
---
- runFlow: ../shared/login_demo_account.yml
## Start composing
- tapOn:
id: "com.fsck.k9.debug:id/floating_action_button"
## Compose email
## To
- tapOn:
id: "com.fsck.k9.debug:id/to"
- inputText: "simple_compose@example.com"
## Subject
- tapOn:
id: "com.fsck.k9.debug:id/subject"
- inputText: "Simple compose test"
## Message
- tapOn:
id: "com.fsck.k9.debug:id/message_content"
- inputText: "Lorem ipsum dolor sit amet."
## Send
- tapOn:
id: "com.fsck.k9.debug:id/send"
## Open message
- tapOn:
id: "com.fsck.k9.debug:id/subject"
index: 0
text: "Simple compose test"
## Assert
- assertVisible:
id: "com.fsck.k9.debug:id/subject"
text: "Simple compose test"
- assertVisible:
id: "com.fsck.k9.debug:id/from"
text: "Demo User"
- assertVisible:
id: "com.fsck.k9.debug:id/recipient_names"
text: "to simple_compose@example.com"
- assertVisible: "Lorem ipsum dolor sit amet."
## Delete message
- tapOn:
id: "com.fsck.k9.debug:id/delete"
- assertNotVisible:
id: "com.fsck.k9.debug:id/subject"
text: "Simple compose test"
## Return to inbox
- tapOn: "Navigate up"
- assertNotVisible:
id: "com.fsck.k9.debug:id/subject"
index: 0
text: "Compose test"

View file

@ -0,0 +1,92 @@
appId: com.fsck.k9.debug
---
- runFlow: ../shared/login_demo_account.yml
## Open message
- tapOn:
id: "com.fsck.k9.debug:id/subject"
index: 0
text: "Message details demo"
## Check message
- assertVisible:
id: "com.fsck.k9.debug:id/from"
text: "Alice"
- assertVisible:
id: "com.fsck.k9.debug:id/recipient_names"
text: "to User 1.*"
### Open message details
- runFlow: ../shared/open_message_details.yml
## Check message details
- assertVisible:
id: "com.fsck.k9.debug:id/name"
text: "Alice"
- assertVisible:
id: "com.fsck.k9.debug:id/name"
text: "User 1"
## Add contacts
- runFlow:
file: ../shared/add_contact.yml
env:
INDEX: 0
NAME: Alice
FIRST_NAME: Alice
- runFlow:
file: ../shared/add_contact.yml
env:
INDEX: 4
NAME: User 1
FIRST_NAME: User
## Close message
- tapOn:
id: "com.android.systemui:id/back"
- tapOn:
id: "com.android.systemui:id/back"
## Change settings
- runFlow: ../shared/change_display_settings_show_contact_names.yml
## Open message
- tapOn:
id: "com.fsck.k9.debug:id/subject"
index: 0
text: "Message details demo"
## Check message
- assertVisible:
id: "com.fsck.k9.debug:id/from"
text: "Alice from Contacts"
- assertVisible:
id: "com.fsck.k9.debug:id/recipient_names"
text: "to User from Contacts.*"
### Open message details
- runFlow: ../shared/open_message_details.yml
## Check message details
- assertVisible:
id: "com.fsck.k9.debug:id/name"
text: "Alice from Contacts"
- assertVisible:
id: "com.fsck.k9.debug:id/name"
text: "User from Contacts 1"
## Remove contacts
- runFlow:
file: ../shared/remove_contact.yml
env:
NAME: Alice from Contacts
- runFlow:
file: ../shared/remove_contact.yml
env:
NAME: User from Contacts 1
## Close message
- tapOn:
id: "com.android.systemui:id/back"
- tapOn: "Navigate up"