#!/usr/bin/env bats # tests/test_app.bats — Tests for 'fs5 app' commands (US3) bats_require_minimum_version 1.5.0 SCRIPT="${BATS_TEST_DIRNAME}/../fs5" setup() { export DEVICE_SERIAL="RD51QE202392" export LOG_FILE="/tmp/fs5-test-$$.log" } teardown() { rm -f "${LOG_FILE}" } @test "app list: exits with code 0" { run "${SCRIPT}" app list [ "${status}" -eq 0 ] } @test "app list: output contains package names" { run "${SCRIPT}" app list [ "${status}" -eq 0 ] [[ "${output}" == *"package:"* ]] || [[ "${output}" == *"com."* ]] } @test "app list --all: includes system packages" { run "${SCRIPT}" app list --all [ "${status}" -eq 0 ] # Android system packages always present [[ "${output}" == *"android"* ]] } @test "app list: --json produces valid JSON array" { run "${SCRIPT}" app list --json [ "${status}" -eq 0 ] echo "${output}" | python3 -c "import json,sys; d=json.load(sys.stdin); assert isinstance(d, list)" } @test "app install: fails with exit code 1 when APK not found" { run "${SCRIPT}" app install /nonexistent/app.apk [ "${status}" -eq 1 ] [[ "${output}" == *"not found"* ]] } @test "app uninstall: requires --force flag" { run "${SCRIPT}" app uninstall com.example.nonexistent [ "${status}" -eq 1 ] [[ "${output}" == *"--force"* ]] } @test "app uninstall: exits gracefully when package not installed" { run "${SCRIPT}" app uninstall com.example.nonexistent.xyz --force # Should exit 1 (not found) but not crash [ "${status}" -ne 2 ] }