187
TESTING.md
Normal file
187
TESTING.md
Normal file
@@ -0,0 +1,187 @@
|
||||
# Testing Gotcha
|
||||
|
||||
Use this checklist for every iOS release. Add checks when a new screen or
|
||||
interaction ships so the document remains the release regression suite.
|
||||
|
||||
## Test record
|
||||
|
||||
- Release/build:
|
||||
- Commit:
|
||||
- Date and tester:
|
||||
- Xcode and iOS versions:
|
||||
- Simulator/device:
|
||||
- Gitea server version:
|
||||
- Result and open issues:
|
||||
|
||||
Use a real test account with repositories, open and closed issues, open and
|
||||
closed pull requests, multiple branches, commits, comments, and file changes.
|
||||
Never paste a production token into logs, screenshots, source files, or this
|
||||
document. The app stores entered tokens in the Apple Keychain.
|
||||
|
||||
Run both of these passes:
|
||||
|
||||
- Fresh install on a disposable simulator, including Add Server.
|
||||
- Upgrade/reinstall over the previous build, preserving app data and Keychain.
|
||||
|
||||
## Build gates
|
||||
|
||||
From the repository root, all commands must pass without warnings:
|
||||
|
||||
```sh
|
||||
cargo fmt --all -- --check
|
||||
RUSTFLAGS="-D warnings" cargo check --workspace --all-targets
|
||||
cargo clippy --workspace --all-targets -- -D warnings
|
||||
cargo test --workspace
|
||||
```
|
||||
|
||||
Build and install the simulator app:
|
||||
|
||||
```sh
|
||||
cd ios
|
||||
xcodegen generate
|
||||
|
||||
xcodebuild \
|
||||
-project Gotcha.xcodeproj \
|
||||
-scheme Gotcha \
|
||||
-configuration Debug \
|
||||
-sdk iphonesimulator \
|
||||
-destination 'platform=iOS Simulator,name=iPhone 17 Pro' \
|
||||
ARCHS=arm64 \
|
||||
ONLY_ACTIVE_ARCH=YES \
|
||||
build
|
||||
|
||||
gotcha_build_dir="$(
|
||||
xcodebuild \
|
||||
-project Gotcha.xcodeproj \
|
||||
-scheme Gotcha \
|
||||
-configuration Debug \
|
||||
-sdk iphonesimulator \
|
||||
-destination 'platform=iOS Simulator,name=iPhone 17 Pro' \
|
||||
-showBuildSettings -json \
|
||||
ARCHS=arm64 \
|
||||
ONLY_ACTIVE_ARCH=YES |
|
||||
plutil -extract 0.buildSettings.TARGET_BUILD_DIR raw -o - -
|
||||
)"
|
||||
xcrun simctl install booted "$gotcha_build_dir/Gotcha.app"
|
||||
xcrun simctl launch booted de.rfc1437.gotcha
|
||||
```
|
||||
|
||||
## Add Server and native text editing
|
||||
|
||||
- [ ] With no configured server, Issues and Repos show the Servers screen and
|
||||
its empty state.
|
||||
- [ ] The add button presents Add Server; Cancel dismisses it.
|
||||
- [ ] Name, Server URL, and Access token use native text fields and suitable
|
||||
keyboards; Next advances between fields and Done submits.
|
||||
- [ ] Long-press in every field shows the native loupe, insertion point, and
|
||||
selection handles.
|
||||
- [ ] The standard edit menu offers Cut, Copy, Paste, Select, and Select All as
|
||||
applicable. There is no app-specific editing toolbar.
|
||||
- [ ] Copy text from one field and paste it into another; verify the exact text.
|
||||
- [ ] The token is obscured, remains editable, and does not trigger a password
|
||||
save prompt.
|
||||
- [ ] Empty or invalid values show an error without adding a server.
|
||||
- [ ] Valid credentials add and select the server; all data tabs load.
|
||||
- [ ] Terminate and relaunch the app; the selected server and Keychain token
|
||||
still work without re-entry.
|
||||
- [ ] Open the server picker from a repository list and switch between at least
|
||||
two configured servers; every data tab changes to the selected server.
|
||||
|
||||
## Native interaction and navigation
|
||||
|
||||
- [ ] Every list scrolls with normal drag, momentum, bounce, and scroll-bar
|
||||
behavior. Rows are flat, use system separators, and have no card-shaped
|
||||
rounded backgrounds.
|
||||
- [ ] Pull past the top of Home, repository lists, issue lists, pull lists,
|
||||
commit history, changed files, issue details, pull details, and diffs.
|
||||
The native refresh control appears, reloads data, and disappears.
|
||||
- [ ] Tap a row, scroll its detail, and use both the navigation-bar Back button
|
||||
and the left-edge interactive swipe to return.
|
||||
- [ ] From a list scrolled well away from the top, open a detail and go Back.
|
||||
The same rows and scroll offset remain visible.
|
||||
- [ ] Switch tabs while a tab has a pushed detail and a scrolled list; returning
|
||||
to the tab preserves its navigation stack and position.
|
||||
- [ ] Rapidly change tabs, filters, and branches while content loads. The app
|
||||
neither crashes nor replaces a newer result with a cancelled request.
|
||||
- [ ] Loading and error states remain dismissible and do not leave a refresh
|
||||
indicator or navigation-bar spinner running.
|
||||
|
||||
## Home
|
||||
|
||||
- [ ] Home shows the selected server name, contribution total, 12-month heatmap,
|
||||
and recent activity.
|
||||
- [ ] Activity rows have the correct icon, repository, summary, and date.
|
||||
- [ ] Tap repository, issue, pull-request, and commit activity. Each opens the
|
||||
matching native tab and destination.
|
||||
- [ ] Non-linkable server activity does not navigate or appear tappable.
|
||||
|
||||
## Issues
|
||||
|
||||
- [ ] The repository list shows name, description, language, open count, update
|
||||
date, and current favorite state.
|
||||
- [ ] Toggle a favorite and confirm it remains after refresh and relaunch.
|
||||
- [ ] Open a repository; the issue list defaults to the saved Open/Closed filter.
|
||||
- [ ] Change the native filter menu between Open and Closed; the checkmark,
|
||||
rows, and persisted selection update.
|
||||
- [ ] Open an issue and verify title, state/author metadata, Markdown body, and
|
||||
comments. Links and selectable text use normal iOS interaction.
|
||||
|
||||
## Repositories and commits
|
||||
|
||||
- [ ] The repository list and favorite behavior match the Issues tab.
|
||||
- [ ] Open a repository; commit history initially selects **All**, visibly shows
|
||||
All in the navigation bar, and includes commits from multiple branches.
|
||||
- [ ] Open the branch menu; All is checked. Select a branch and verify the label,
|
||||
checkmark, commits, and graph update, then return to All.
|
||||
- [ ] Commit graph lanes and merge connections align with their rows while
|
||||
scrolling.
|
||||
- [ ] Open a commit and verify Changed Files paths and statuses.
|
||||
- [ ] Open a changed file and verify the diff title, old/new line numbers,
|
||||
monospaced text, addition/removal/hunk colors, vertical scrolling, and
|
||||
horizontal scrolling for long lines.
|
||||
- [ ] Long-press diff text and verify normal selection and copying.
|
||||
|
||||
## Pull requests
|
||||
|
||||
- [ ] The list defaults to the saved Open/Closed filter.
|
||||
- [ ] Change the native filter menu between Open and Closed; the checkmark,
|
||||
rows, and persisted selection update.
|
||||
- [ ] Each row shows repository/number, title, author/update metadata, comment
|
||||
count, and draft/merged state where applicable.
|
||||
- [ ] Open a pull request and verify title, metadata, Markdown body, comments,
|
||||
changed-file reference, file paths, and statuses.
|
||||
- [ ] Open a changed file and run the same diff checks as for a commit.
|
||||
|
||||
## Milestones
|
||||
|
||||
- [ ] Milestones uses the server → repository → milestone flow and includes
|
||||
both open and closed milestones.
|
||||
- [ ] Each milestone shows its title, description, state, due date, issue
|
||||
counts, and a green/amber closed/open progress bar.
|
||||
- [ ] Open a milestone and verify every assigned issue is listed; tapping an
|
||||
issue opens its normal issue detail.
|
||||
- [ ] Repository issue lists and issue details show the assigned milestone with
|
||||
a flag icon instead of a text label.
|
||||
- [ ] Repositories without milestones show the native empty state.
|
||||
|
||||
## Settings, accessibility, and lifecycle
|
||||
|
||||
- [ ] Settings opens from the gear button on Home and is not a tab.
|
||||
- [ ] Appearance changes between Auto, Light, and Dark immediately; Auto follows
|
||||
the simulator system appearance.
|
||||
- [ ] Icon and appearance settings remain selected after relaunch.
|
||||
- [ ] Test Light and Dark appearances for readable text, separators, graph lines,
|
||||
diff colors, menus, selection, loading, empty, and error states.
|
||||
- [ ] Test at the default and at least one larger Dynamic Type size. Text remains
|
||||
readable without hiding required controls.
|
||||
- [ ] VoiceOver announces tabs, navigation controls, filters, favorites, rows,
|
||||
fields, and changed-file statuses meaningfully and in a usable order.
|
||||
- [ ] Rotate, background/foreground, terminate/relaunch, and temporarily disable
|
||||
networking. The app recovers without losing preferences or credentials.
|
||||
|
||||
## Release sign-off
|
||||
|
||||
- [ ] All build gates passed.
|
||||
- [ ] Fresh-install and upgrade passes completed.
|
||||
- [ ] Every supported iOS version and required device class completed.
|
||||
- [ ] Failures are linked in the test record; release blockers are resolved.
|
||||
Reference in New Issue
Block a user