# | Use Case | Steps | Expected Result |
|---|---|---|---|
1.1 | Fresh install — Android | 1. Uninstall any existing version | App installs without errors; splash screen and onboarding are shown |
1.2 | Fresh install — iOS | 1. Uninstall any existing version | App installs without errors; splash screen and onboarding are shown |
1.3 | Fresh install — complete login flow | 1. Fresh install | User is authenticated and lands on Home dashboard |
1.4 | Fresh install — no leftover data | 1. Fresh install after a previous installation existed | No stale data, cached credentials, or broken state from the previous install |
1.5 | Update over existing install — Android | 1. Install the previous release version | App updates successfully; existing session is preserved |
1.6 | Update over existing install — iOS | 1. Install the previous release version via TestFlight or direct install | App updates successfully; existing session is preserved |
1.7 | Session preserved after update | 1. Log in on the old version | User is still logged in after update; no forced re-login unless intentional |
1.8 | Cached data intact after update | 1. Use the app on old version (load projects, work packages) | Previously cached content is still accessible or gracefully refreshed |
1.9 | Settings preserved after update | 1. Change user preferences (e.g., activity order, notification settings) on old version | User preferences are retained after the update |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
2.1 | Launch app (not logged in) | Cold-start the app with no active session | Splash screen appears briefly, then redirects to Sign In page |
2.2 | Sign in with valid credentials | 1. Enter valid server URL | User is authenticated and redirected to Home dashboard |
2.3 | Sign in with wrong password | 1. Enter valid server URL | Error message is shown; user remains on Sign In page |
2.4 | Sign in with no internet connection | 1. Enter valid server URL | Error message is shown |
2.5 | Sign in to a wrong server instance | 1. Enter an invalid URL (i.e. google.com) | Error message is shown; user remains on Sign In page |
2.6 | Instance selection via bottom sheet | 1. On Sign In page, tap the instance selector control | Bottom sheet opens; selected instance URL is applied to the sign-in form |
2.7 | Session persistence after app restart | 1. Log in successfully | User lands directly on Home dashboard without seeing Sign In page |
2.8 | Sign out | 1. Navigate to Account/User section | User is signed out and redirected to Sign In page; session is cleared |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
3.1 | First-time onboarding shown | Install a fresh build and launch the app for the first time | Onboarding carousel is shown before the login screen |
3.2 | Swipe through onboarding pages | Swipe left through all onboarding slides | Each slide advances; progress indicator updates |
3.3 | Skip onboarding | Tap the Skip button on any onboarding page | Onboarding is dismissed; user is taken to Sign In page |
3.4 | Complete onboarding | Advance through all slides to the last one and tap Continue/Get Started | User is taken to Sign In page |
3.5 | Onboarding not shown on second launch | Complete onboarding, close the app, reopen it | Onboarding is not shown again; app goes to Sign In or Home directly |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
4.1 | Dashboard loads with widgets | Log in and navigate to the Home tab | Home dashboard loads; visible widgets display their content without errors |
4.2 | Notifications widget | View the Notifications widget on Home | Widget shows the count of unread notifications |
4.3 | Assigned to Me widget | View the Assigned to Me widget | Widget lists work packages currently assigned to the logged-in user |
4.4 | Recently Edited widget | View the Recently Edited widget | Widget shows recently modified work packages |
4.5 | Favorite Projects widget | View the Favorite Projects widget | Widget shows the user's starred/favorited projects |
4.6 | Time Tracker widget | View the Time Tracker widget | Widget shows weekly tracked time summary |
4.7 | Tap a work package in a widget | Tap any work package listed in a Home widget | App navigates to the Work Package Details screen for that item |
4.8 | Tap a project in Favorite Projects | Tap a project in the Favorite Projects widget | App navigates to that project's overview |
4.9 | Pull to refresh | Pull down on the Home dashboard | Dashboard data refreshes; widgets reload their content |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
5.1 | Projects list loads | Navigate to the Workspaces/Projects tab | List of accessible projects is displayed |
5.2 | Search projects | Tap the search field and type a partial project name | List filters to show matching projects only |
5.3 | Filter by project type | Apply a project type filter | Only projects matching the selected type are shown |
5.4 | Toggle favorites view | Switch between "All Projects" and "Favorites" view | List updates to show only favorited projects or all projects accordingly |
5.5 | Open project overview | Tap on a project in the list | Project Overview page opens showing project details |
5.6 | Project overview tabs | Inside a project, switch between the available tabs (Details, Work Packages, Subprojects, etc.) | Each tab loads its content correctly |
5.7 | Navigate to work packages from project | Inside a project's Work Packages tab, tap a work package | Work Package Details screen opens for that item |
5.8 | Subprojects list | Open a project that has subprojects and view the Subprojects tab | Subprojects are listed under that parent project |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
6.1 | Work packages list loads | Navigate to the Work Packages tab | List of work packages loads correctly |
6.2 | Filter work packages by status | Apply a status filter (e.g., "In Progress") | Only work packages with that status are shown |
6.3 | Filter by assignee | Apply an assignee filter | Only work packages assigned to that person are shown |
6.4 | Search work packages | Type a query in the search field | List filters to work packages matching the query |
6.5 | Pull to refresh | Pull down on the work packages list | List refreshes with latest data from the server |
6.6 | Tap a work package | Tap any item in the list | Work Package Details screen opens |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
6.7 | Details screen loads | Open any work package | Title, type, status, and description are displayed correctly |
6.8 | Switch to Activity tab | In Work Package Details, tap the Activity tab | Activity/comment history is displayed |
6.9 | Switch to Attachments tab | Tap the Attachments tab | Uploaded files are listed (or empty state shown) |
6.10 | Switch to Relations tab | Tap the Relations tab | Related work packages are listed |
6.11 | View a file attachment | Tap an attachment in the Attachments tab | File preview or download opens |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
6.12 | Open create form | Tap the "+" / Create button on the Work Packages screen | Create Work Package form opens |
6.13 | Create with required fields | 1. Select a project | New work package is created; user is navigated to its details or back to the list |
6.14 | Validation on empty title | Leave the subject/title field empty and tap Save | Validation error is shown; work package is not created |
6.15 | Cancel creation | Open the create form and tap Cancel/Back | Form closes; no work package is created |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
6.16 | Edit title | Open work package details, tap Edit, change the title, save | Updated title is reflected in the details view |
6.17 | Change status | In work package details or edit form, change the status field | Status updates and the change appears in the Activity tab |
6.18 | Change assignee | Edit the assignee field and save | New assignee is shown in the details |
6.19 | Edit description | Open the description editor, make a change, save | Updated description is rendered in the details view |
6.20 | Add a comment | In the Activity tab, type a comment and submit | Comment appears in the activity timeline |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
7.1 | Time tracking page loads | Navigate to the Time Tracking tab | Calendar view loads with existing time entries |
7.2 | Navigate calendar dates | Tap previous/next day or week in the calendar | View updates to show entries for the selected period |
7.3 | View daily time entries | Tap a specific date in the calendar | Time entries for that day are displayed below |
7.4 | Weekly hours summary | View the time tracking page for a week | Total hours logged for the week are shown |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
7.5 | Open focus timer | Navigate to the Timer tab within Time Tracking | Focus timer page shows with a circular timer at 00:00 |
7.6 | Start timer | Tap the Start button | Timer begins counting up; Start changes to Pause |
7.7 | Pause and resume timer | Tap Pause, then tap Resume | Timer pauses at the current time; resuming continues from that point |
7.8 | Stop timer | Tap Stop | Timer stops; Create Log Time form opens to finalize the entry |
7.9 | Link work package to timer | Before or during timing, select a work package to link | Timer shows the linked work package name |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
7.10 | Create log time entry | 1. Open Create Log Time form | Time entry is saved and appears in the time tracking calendar |
7.11 | Validation on empty hours | Submit log time form without entering hours | Validation error is shown; entry is not saved |
7.12 | Date selection | Change the date field to a past date and save | Time entry is saved for the selected date |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
8.1 | Open global search | Tap the Search icon in the navigation | Global Search screen opens with Work Packages and Projects tabs |
8.2 | Search for a work package | Type a work package title in the search field (Work Packages tab) | Matching work packages appear in the results list |
8.3 | Search for a project | Switch to the Projects tab and type a project name | Matching projects appear in results |
8.4 | Filter search results | Apply a filter (status, type, etc.) within Work Packages search | Results are narrowed to match the applied filter |
8.5 | Navigate to result | Tap a work package in search results | Work Package Details screen opens for that item |
8.6 | Navigate to project result | Tap a project in search results | Project Overview page opens |
8.7 | Empty state | Search for a string with no matches | Empty state message is shown; no crash |
8.8 | Clear search query | Clear the search input field | Results reset; prior state or empty prompt is shown |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
9.1 | Notifications list loads | Navigate to the Notifications tab | List of notifications is displayed |
9.2 | Notification count badge | Check the Notifications tab icon when there are unread notifications | Badge shows correct unread count |
9.3 | View notification details | Tap a notification in the list | Associated work package details are shown inline or the user is navigated to it |
9.4 | Notification reason | Tap or long-press a notification to see the reason | Bottom sheet or tooltip explains why the user was notified (e.g., "Assigned to you") |
9.5 | Mark as read | Mark a notification as read (if the action is available) | Notification is marked read; unread count decreases |
9.6 | Empty state | View Notifications when there are none | Empty state message is displayed; no crash |
9.7 | Pull to refresh | Pull down on the notifications list | List refreshes with latest notifications |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
10.1 | Open user profile | Navigate to Account/User tab | User profile page shows name, email, and avatar |
10.2 | View account details | Tap on Account Details | Account info page opens with the user's profile data |
10.3 | View another user's profile | Tap a user's avatar or name (e.g., in work package details) | That user's profile view opens with their basic info |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
10.4 | Open notification settings | Go to Settings → User Notifications | Notification preferences screen opens |
10.5 | Toggle a notification preference | Toggle an email notification setting on or off | Setting is saved; toggle reflects the new state after navigating away and back |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
10.6 | Open work package settings | Go to Settings → Work Package Settings | Settings page opens |
10.7 | Change activity sort order | Switch activity order between newest/oldest first | Setting is saved; activity in work packages reflects the chosen order |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
11.1 | Open editor | Edit the description of a work package or add a comment | Rich text editor opens |
11.2 | Bold text | Select text and tap the Bold button | Selected text becomes bold |
11.3 | Italic text | Select text and tap the Italic button | Selected text becomes italic |
11.4 | Bullet list | Tap the unordered list button and type items | Bullet list is created |
11.5 | Numbered list | Tap the ordered list button and type items | Numbered list is created |
11.6 | Add a hyperlink | Tap the link button, enter a URL and display text | Link is inserted and rendered as clickable text |
11.7 | Heading formatting | Select a heading level and type | Text is rendered as a heading |
11.8 | Mention a user | Type @ followed by a username | Autocomplete suggestion appears; selecting it inserts a user mention |
11.9 | Mention a work package | Type # followed by a work package ID or title | Autocomplete suggestion appears; selecting it inserts a work package link |
11.10 | Save edited content | Make changes and tap Save/Done | Changes are persisted and rendered correctly in the details view |
11.11 | Discard changes | Make changes and tap Cancel/Back without saving | Changes are discarded; original content is unchanged |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
12.1 | Share a file from another app | From the device Files app (or another app), share a file and select OpenProject | OpenProject opens the Share page with the file ready to attach |
12.2 | Select a project for attachment | On the Share page, select a target project | Project is selected and work packages for that project are available |
12.3 | Select a work package | Select a work package to attach the file to | Work package is confirmed as the attachment target |
12.4 | Confirm attachment upload | Tap Attach/Confirm | File is uploaded to the selected work package; success state is shown |
12.5 | Cancel sharing | Open the Share page and tap Cancel/Back | App closes the share intent; no file is uploaded |
# | Use Case | Steps | Expected Result |
|---|---|---|---|
13.1 | Bottom navigation tabs | Tap each icon in the bottom navigation bar | Each tab navigates to the correct screen |
13.2 | Back navigation | Navigate into a deep screen and tap the back button/gesture | App navigates back through the screen stack correctly |
13.3 | Deep link to work package | Open a valid deep link to a work package (e.g., from a email) | App opens and navigates directly to the correct work package |
13.4 | App runs without crashes (baseline) | Use the app normally for 5 minutes across multiple screens | No unexpected crashes or ANR (unresponsive) events occur |