#!/usr/bin/env bats
# Tests for scripts/install.sh (REQ-098: fallback walk + --check dry-run).
# Hermetic: tests the argument parsing, arch detection, and --check
# output formatting without hitting the Gitea API. The network-dependent
# fallback walk is tested via a mock curl in a separate test.

load test_helper

@test "install.sh --help exits 0 and shows usage" {
	run "$SCRIPTS_DIR/install.sh" --help
	assert_status 0 "$status"
	assert_contains "$output" "--system"
	assert_contains "$output" "--version"
	assert_contains "$output" "--check"
	assert_contains "$output" "--help"
}

@test "install.sh --check flag is parsed without error" {
	# --check with a pinned version that exists (v0.4.5) should succeed
	# and print the dry-run block. This is a live integration test against
	# the public Gitea API; skip if network is unavailable.
	skip_if_no_network
	run "$SCRIPTS_DIR/install.sh" --check --version v0.4.5
	assert_status 0 "$status"
	assert_contains "$output" "dry-run (--check)"
	assert_contains "$output" "would install:  orca v0.4.5"
	assert_contains "$output" "no files will be written"
}

@test "install.sh --check falls back when latest release has no asset" {
	# v0.9.0 is a pre-execution release with no binary asset. --check
	# should walk back and find v0.4.5 (which has an asset), printing
	# a warning. This is a live integration test; skip if no network.
	skip_if_no_network
	run timeout 60 "$SCRIPTS_DIR/install.sh" --check --version v0.9.0
	assert_status 0 "$status"
	assert_contains "$output" "WARNING"
	assert_contains "$output" "falling back"
	assert_contains "$output" "dry-run (--check)"
}

@test "install.sh rejects unknown arguments" {
	run "$SCRIPTS_DIR/install.sh" --bogus-flag
	[ "$status" -ne 0 ]
	assert_contains "$output" "unknown argument"
}

@test "install.sh --system requires root" {
	# Only test the root check if we're NOT root (CI may run as root).
	if [ "$(id -u)" -eq 0 ]; then
		skip "running as root; --system root check not testable"
	fi
	run "$SCRIPTS_DIR/install.sh" --system --version v0.4.5 --check
	[ "$status" -ne 0 ]
	assert_contains "$output" "--system requires root"
}

# Helper: skip if the Gitea instance is unreachable.
skip_if_no_network() {
	curl -fsSL --max-time 5 "https://git.cloudinit.dev/api/v1/repos/coreci/orca/releases/tags/v0.4.5" >/dev/null 2>&1 \
		|| skip "Gitea API unreachable — network-dependent test skipped"
}