docs(qa-261): ajoute documents conformité et scripts QA pour release Android
- Ajoute privacy-policy-v1.md et release-compliance-checklist.md - Ajoute documents QA gates #238-#243 - Ajoute scripts de validation repo-only et device runbooks - Prépare checklists exécutables avant upload Play fermé Ticket #261
This commit is contained in:
138
tool/qa_device_health_connect.sh
Executable file
138
tool/qa_device_health_connect.sh
Executable file
@ -0,0 +1,138 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
PROJECT_ROOT="/home/anthony/Documents/Projects/GameTime"
|
||||
ARTIFACT_BASE="${ARTIFACT_BASE:-$PROJECT_ROOT/.ideai/artifacts/qa-device}"
|
||||
PHONE_SERIAL="${PHONE_SERIAL:-}"
|
||||
PACKAGE_NAME="${PACKAGE_NAME:-com.idea.gametime}"
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage:
|
||||
./tool/qa_device_health_connect.sh start
|
||||
./tool/qa_device_health_connect.sh stop <artifact_dir>
|
||||
|
||||
Environment:
|
||||
PHONE_SERIAL Optional adb serial for the phone under test
|
||||
ARTIFACT_BASE Optional artifact root
|
||||
PACKAGE_NAME Optional Android package name (default: com.idea.gametime)
|
||||
EOF
|
||||
}
|
||||
|
||||
adb_cmd() {
|
||||
if [[ -n "$PHONE_SERIAL" ]]; then
|
||||
adb -s "$PHONE_SERIAL" "$@"
|
||||
else
|
||||
adb "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
require_adb() {
|
||||
command -v adb >/dev/null 2>&1 || {
|
||||
echo "adb not found in PATH." >&2
|
||||
exit 1
|
||||
}
|
||||
adb start-server >/dev/null
|
||||
adb_cmd get-state >/dev/null 2>&1 || {
|
||||
echo "No adb device available. Connect the phone or set PHONE_SERIAL." >&2
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
timestamp() {
|
||||
date -u +"%Y%m%dT%H%M%SZ"
|
||||
}
|
||||
|
||||
start_capture() {
|
||||
require_adb
|
||||
local dir="$ARTIFACT_BASE/health-connect-$(timestamp)"
|
||||
mkdir -p "$dir"
|
||||
|
||||
adb devices -l >"$dir/adb-devices.txt"
|
||||
adb_cmd shell getprop ro.build.fingerprint >"$dir/phone-build-fingerprint.txt"
|
||||
adb_cmd shell dumpsys package "$PACKAGE_NAME" >"$dir/package-dumpsys-before.txt" || true
|
||||
adb_cmd logcat -c
|
||||
adb_cmd logcat -v threadtime >"$dir/logcat.txt" 2>&1 &
|
||||
local pid=$!
|
||||
echo "$pid" >"$dir/logcat.pid"
|
||||
|
||||
cat >"$dir/steps.md" <<EOF
|
||||
# Health Connect manual QA
|
||||
|
||||
Date: $(date -u +"%Y-%m-%d %H:%M:%SZ")
|
||||
Package: $PACKAGE_NAME
|
||||
|
||||
## Preconditions
|
||||
- Fresh GameTime phone build installed on the connected Android device.
|
||||
- Health Connect available on device.
|
||||
- Device unlocked.
|
||||
|
||||
## Manual flow
|
||||
1. Open GameTime.
|
||||
2. Go to Paramètres > Intégrations > Health Connect.
|
||||
3. Validate the visible initial status.
|
||||
4. Tap "Autoriser l'accès" or "Gérer les autorisations".
|
||||
5. Validate the expected path:
|
||||
- permission sheet opens, or
|
||||
- settings fallback opens cleanly.
|
||||
6. Grant or deny permissions according to the scenario under test.
|
||||
7. Return to GameTime and validate the refreshed status.
|
||||
8. Start and finish a workout if export-after-workout must be checked.
|
||||
9. Confirm the final Health Connect export outcome shown by the app.
|
||||
|
||||
## Evidence to collect
|
||||
- Screenshot(s) of the visible status before and after permission handling.
|
||||
- Screenshot(s) of Health Connect permission/settings UI if opened.
|
||||
- Notes on whether the path used the permission contract or settings fallback.
|
||||
- Result of export-after-workout if exercised.
|
||||
EOF
|
||||
|
||||
echo "$dir"
|
||||
}
|
||||
|
||||
stop_capture() {
|
||||
local dir="${1:-}"
|
||||
[[ -n "$dir" ]] || {
|
||||
usage >&2
|
||||
exit 2
|
||||
}
|
||||
require_adb
|
||||
[[ -d "$dir" ]] || {
|
||||
echo "Artifact directory not found: $dir" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [[ -f "$dir/logcat.pid" ]]; then
|
||||
kill "$(cat "$dir/logcat.pid")" >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
adb_cmd shell dumpsys package "$PACKAGE_NAME" >"$dir/package-dumpsys-after.txt" || true
|
||||
adb_cmd shell settings list secure >"$dir/settings-secure.txt" || true
|
||||
|
||||
cat <<EOF
|
||||
Health Connect manual QA artifacts finalized in:
|
||||
$dir
|
||||
|
||||
Archive expected:
|
||||
- adb-devices.txt
|
||||
- phone-build-fingerprint.txt
|
||||
- package-dumpsys-before.txt
|
||||
- package-dumpsys-after.txt
|
||||
- logcat.txt
|
||||
- steps.md
|
||||
EOF
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
start)
|
||||
start_capture
|
||||
;;
|
||||
stop)
|
||||
shift
|
||||
stop_capture "${1:-}"
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
129
tool/qa_device_import_export_real.sh
Executable file
129
tool/qa_device_import_export_real.sh
Executable file
@ -0,0 +1,129 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
PROJECT_ROOT="/home/anthony/Documents/Projects/GameTime"
|
||||
ARTIFACT_BASE="${ARTIFACT_BASE:-$PROJECT_ROOT/.ideai/artifacts/qa-device}"
|
||||
PHONE_SERIAL="${PHONE_SERIAL:-}"
|
||||
PACKAGE_NAME="${PACKAGE_NAME:-com.idea.gametime}"
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage:
|
||||
./tool/qa_device_import_export_real.sh start
|
||||
./tool/qa_device_import_export_real.sh stop <artifact_dir>
|
||||
|
||||
Environment:
|
||||
PHONE_SERIAL Optional adb serial for the phone under test
|
||||
ARTIFACT_BASE Optional artifact root
|
||||
PACKAGE_NAME Optional Android package name (default: com.idea.gametime)
|
||||
EOF
|
||||
}
|
||||
|
||||
adb_cmd() {
|
||||
if [[ -n "$PHONE_SERIAL" ]]; then
|
||||
adb -s "$PHONE_SERIAL" "$@"
|
||||
else
|
||||
adb "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
require_adb() {
|
||||
command -v adb >/dev/null 2>&1 || {
|
||||
echo "adb not found in PATH." >&2
|
||||
exit 1
|
||||
}
|
||||
adb start-server >/dev/null
|
||||
adb_cmd get-state >/dev/null 2>&1 || {
|
||||
echo "No adb device available. Connect the phone or set PHONE_SERIAL." >&2
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
timestamp() {
|
||||
date -u +"%Y%m%dT%H%M%SZ"
|
||||
}
|
||||
|
||||
start_capture() {
|
||||
require_adb
|
||||
local dir="$ARTIFACT_BASE/import-export-real-$(timestamp)"
|
||||
mkdir -p "$dir"
|
||||
|
||||
adb devices -l >"$dir/adb-devices.txt"
|
||||
adb_cmd shell getprop ro.build.fingerprint >"$dir/phone-build-fingerprint.txt"
|
||||
adb_cmd shell dumpsys package "$PACKAGE_NAME" >"$dir/package-dumpsys-before.txt" || true
|
||||
adb_cmd logcat -c
|
||||
adb_cmd logcat -v threadtime >"$dir/logcat.txt" 2>&1 &
|
||||
echo "$!" >"$dir/logcat.pid"
|
||||
|
||||
cat >"$dir/steps.md" <<EOF
|
||||
# Import / export real-device QA
|
||||
|
||||
Date: $(date -u +"%Y-%m-%d %H:%M:%SZ")
|
||||
Package: $PACKAGE_NAME
|
||||
|
||||
## Preconditions
|
||||
- Fresh GameTime phone build installed on the connected Android device.
|
||||
- At least one exercise, one program and one workout template available locally.
|
||||
- File picker available on device.
|
||||
|
||||
## Manual flow
|
||||
1. Open GameTime.
|
||||
2. Go to the profile/settings surface exposing import/export.
|
||||
3. Export local data and confirm a file is produced.
|
||||
4. Record the exported filename and storage location.
|
||||
5. Re-import the same file in merge mode and validate the expected result.
|
||||
6. Re-import in replace-all mode only on a disposable dataset.
|
||||
7. If relevant, try importing while an active workout exists and validate the expected refusal.
|
||||
|
||||
## Evidence to collect
|
||||
- Screenshot(s) before export and after export confirmation.
|
||||
- Exported filename and location.
|
||||
- Screenshot(s) after merge import and replace-all import.
|
||||
- Notes on any refusal caused by active workout protection.
|
||||
EOF
|
||||
|
||||
echo "$dir"
|
||||
}
|
||||
|
||||
stop_capture() {
|
||||
local dir="${1:-}"
|
||||
[[ -n "$dir" ]] || {
|
||||
usage >&2
|
||||
exit 2
|
||||
}
|
||||
require_adb
|
||||
[[ -d "$dir" ]] || {
|
||||
echo "Artifact directory not found: $dir" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
[[ -f "$dir/logcat.pid" ]] && kill "$(cat "$dir/logcat.pid")" >/dev/null 2>&1 || true
|
||||
adb_cmd shell dumpsys package "$PACKAGE_NAME" >"$dir/package-dumpsys-after.txt" || true
|
||||
|
||||
cat <<EOF
|
||||
Import/export manual QA artifacts finalized in:
|
||||
$dir
|
||||
|
||||
Archive expected:
|
||||
- adb-devices.txt
|
||||
- phone-build-fingerprint.txt
|
||||
- package-dumpsys-before.txt
|
||||
- package-dumpsys-after.txt
|
||||
- logcat.txt
|
||||
- steps.md
|
||||
EOF
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
start)
|
||||
start_capture
|
||||
;;
|
||||
stop)
|
||||
shift
|
||||
stop_capture "${1:-}"
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
154
tool/qa_device_watch_companion.sh
Executable file
154
tool/qa_device_watch_companion.sh
Executable file
@ -0,0 +1,154 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
PROJECT_ROOT="/home/anthony/Documents/Projects/GameTime"
|
||||
ARTIFACT_BASE="${ARTIFACT_BASE:-$PROJECT_ROOT/.ideai/artifacts/qa-device}"
|
||||
PHONE_SERIAL="${PHONE_SERIAL:-}"
|
||||
WATCH_SERIAL="${WATCH_SERIAL:-}"
|
||||
PACKAGE_NAME="${PACKAGE_NAME:-com.idea.gametime}"
|
||||
WATCH_PACKAGE_NAME="${WATCH_PACKAGE_NAME:-com.idea.gametime}"
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage:
|
||||
./tool/qa_device_watch_companion.sh start
|
||||
./tool/qa_device_watch_companion.sh stop <artifact_dir>
|
||||
|
||||
Environment:
|
||||
PHONE_SERIAL Optional adb serial for the phone under test
|
||||
WATCH_SERIAL Optional adb serial for the Wear device under test
|
||||
ARTIFACT_BASE Optional artifact root
|
||||
PACKAGE_NAME Optional phone package name
|
||||
WATCH_PACKAGE_NAME Optional watch package name
|
||||
EOF
|
||||
}
|
||||
|
||||
adb_phone() {
|
||||
if [[ -n "$PHONE_SERIAL" ]]; then
|
||||
adb -s "$PHONE_SERIAL" "$@"
|
||||
else
|
||||
adb "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
adb_watch() {
|
||||
[[ -n "$WATCH_SERIAL" ]] || {
|
||||
echo "WATCH_SERIAL is required for watch companion QA." >&2
|
||||
exit 1
|
||||
}
|
||||
adb -s "$WATCH_SERIAL" "$@"
|
||||
}
|
||||
|
||||
require_adb() {
|
||||
command -v adb >/dev/null 2>&1 || {
|
||||
echo "adb not found in PATH." >&2
|
||||
exit 1
|
||||
}
|
||||
adb start-server >/dev/null
|
||||
adb_phone get-state >/dev/null 2>&1 || {
|
||||
echo "No phone adb device available." >&2
|
||||
exit 1
|
||||
}
|
||||
adb_watch get-state >/dev/null 2>&1 || {
|
||||
echo "No watch adb device available." >&2
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
timestamp() {
|
||||
date -u +"%Y%m%dT%H%M%SZ"
|
||||
}
|
||||
|
||||
start_capture() {
|
||||
require_adb
|
||||
local dir="$ARTIFACT_BASE/watch-companion-$(timestamp)"
|
||||
mkdir -p "$dir"
|
||||
|
||||
adb devices -l >"$dir/adb-devices.txt"
|
||||
adb_phone shell getprop ro.build.fingerprint >"$dir/phone-build-fingerprint.txt"
|
||||
adb_watch shell getprop ro.build.fingerprint >"$dir/watch-build-fingerprint.txt"
|
||||
adb_phone shell dumpsys package "$PACKAGE_NAME" >"$dir/phone-package-dumpsys-before.txt" || true
|
||||
adb_watch shell dumpsys package "$WATCH_PACKAGE_NAME" >"$dir/watch-package-dumpsys-before.txt" || true
|
||||
adb_phone logcat -c
|
||||
adb_watch logcat -c
|
||||
adb_phone logcat -v threadtime >"$dir/phone-logcat.txt" 2>&1 &
|
||||
echo "$!" >"$dir/phone-logcat.pid"
|
||||
adb_watch logcat -v threadtime >"$dir/watch-logcat.txt" 2>&1 &
|
||||
echo "$!" >"$dir/watch-logcat.pid"
|
||||
|
||||
cat >"$dir/steps.md" <<EOF
|
||||
# Watch companion manual QA
|
||||
|
||||
Date: $(date -u +"%Y-%m-%d %H:%M:%SZ")
|
||||
Phone package: $PACKAGE_NAME
|
||||
Watch package: $WATCH_PACKAGE_NAME
|
||||
|
||||
## Preconditions
|
||||
- Phone and watch connected through adb.
|
||||
- Same GameTime app version installed on both.
|
||||
- Watch paired to the phone and reachable.
|
||||
|
||||
## Manual flow
|
||||
1. Launch GameTime on the phone.
|
||||
2. Start a workout from the phone.
|
||||
3. Validate that the active session is projected to the watch.
|
||||
4. Validate visible metrics on watch, including steps if available.
|
||||
5. Trigger at least one action from the watch that must affect the phone session.
|
||||
6. Validate phone UI updates correctly after the watch action.
|
||||
7. Finish the workout and validate the watch teardown / final state.
|
||||
|
||||
## Evidence to collect
|
||||
- Screenshot(s) on phone and watch while a session is active.
|
||||
- Notes on connection status and any visible lag.
|
||||
- Notes on step visibility if data is present.
|
||||
- Final verdict on session projection and round-trip actions.
|
||||
EOF
|
||||
|
||||
echo "$dir"
|
||||
}
|
||||
|
||||
stop_capture() {
|
||||
local dir="${1:-}"
|
||||
[[ -n "$dir" ]] || {
|
||||
usage >&2
|
||||
exit 2
|
||||
}
|
||||
require_adb
|
||||
[[ -d "$dir" ]] || {
|
||||
echo "Artifact directory not found: $dir" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
[[ -f "$dir/phone-logcat.pid" ]] && kill "$(cat "$dir/phone-logcat.pid")" >/dev/null 2>&1 || true
|
||||
[[ -f "$dir/watch-logcat.pid" ]] && kill "$(cat "$dir/watch-logcat.pid")" >/dev/null 2>&1 || true
|
||||
|
||||
adb_phone shell dumpsys package "$PACKAGE_NAME" >"$dir/phone-package-dumpsys-after.txt" || true
|
||||
adb_watch shell dumpsys package "$WATCH_PACKAGE_NAME" >"$dir/watch-package-dumpsys-after.txt" || true
|
||||
|
||||
cat <<EOF
|
||||
Watch companion manual QA artifacts finalized in:
|
||||
$dir
|
||||
|
||||
Archive expected:
|
||||
- adb-devices.txt
|
||||
- phone-build-fingerprint.txt
|
||||
- watch-build-fingerprint.txt
|
||||
- phone-logcat.txt
|
||||
- watch-logcat.txt
|
||||
- steps.md
|
||||
EOF
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
start)
|
||||
start_capture
|
||||
;;
|
||||
stop)
|
||||
shift
|
||||
stop_capture "${1:-}"
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
17
tool/qa_gate_241_critical_screens_smoke.sh
Executable file
17
tool/qa_gate_241_critical_screens_smoke.sh
Executable file
@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
export HOME=/tmp
|
||||
export XDG_CONFIG_HOME=/tmp
|
||||
export FLUTTER_SUPPRESS_ANALYTICS=true
|
||||
export DART_SUPPRESS_ANALYTICS=true
|
||||
|
||||
exec ./.ideai/flutter-sdk-1785572580/bin/flutter test \
|
||||
test/presentation/home_screen_test.dart \
|
||||
test/presentation/exercise_library_screen_test.dart \
|
||||
test/presentation/program_screen_test.dart \
|
||||
test/presentation/workout_template_screen_test.dart \
|
||||
test/presentation/workout_execution_screen_test.dart \
|
||||
test/presentation/history_screen_test.dart \
|
||||
test/presentation/progression_screen_test.dart \
|
||||
test/presentation/profile_screen_test.dart
|
||||
14
tool/qa_gate_242_monetization_partial.sh
Executable file
14
tool/qa_gate_242_monetization_partial.sh
Executable file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
export HOME=/tmp
|
||||
export XDG_CONFIG_HOME=/tmp
|
||||
export FLUTTER_SUPPRESS_ANALYTICS=true
|
||||
export DART_SUPPRESS_ANALYTICS=true
|
||||
|
||||
exec ./.ideai/flutter-sdk-1785572580/bin/flutter test \
|
||||
test/presentation/profile_screen_test.dart \
|
||||
test/presentation/share_inbox_screen_test.dart \
|
||||
test/presentation/settings_screen_test.dart \
|
||||
test/application/health_connect_use_cases_test.dart \
|
||||
test/application/watch_companion_projection_test.dart
|
||||
Reference in New Issue
Block a user