#!/usr/bin/env bash

# A graph-locked npm install lives in `<version>~aube~<digest>`. Resolving
# `latest` against installed versions must yield the npm version, never that
# private directory name, or `mise lock` asks aube for a nonexistent version.
cat >mise.toml <<'MISE_TOML'
[tools]
node = "20.11.1"
"npm:inflight" = "latest"
MISE_TOML
MISE_LOCKFILE=1 mise install
# `latest` is whatever npm publishes; take the version from the install dir.
install_dir="$(find "$MISE_DATA_DIR/installs/npm-inflight" -mindepth 1 -maxdepth 1 -name '*~aube~*' -printf '%f\n')"
[[ -n $install_dir ]] || fail "no ~aube~ install directory for npm:inflight"
version="${install_dir%%"~aube~"*}"

rm -rf mise.lock .mise
assert_contains "mise lock npm:inflight 2>&1" "npm:inflight@$version"
assert_not_contains "cat mise.lock" "~aube~"
assert_contains "cat mise.lock" "version = \"$version\""
assert_contains "cat mise.lock" "path = \".mise/locks/npm-inflight/$version\""

# A full lock resolves the same way, and a fresh locked install replays its graph.
mise lock
assert_not_contains "cat mise.lock" "~aube~"
rm -rf "$MISE_DATA_DIR/installs/npm-inflight"
assert_succeed "MISE_LOCKFILE=1 mise install --locked"
assert_succeed "find '$MISE_DATA_DIR/installs/npm-inflight' -maxdepth 1 -name '$version~aube~*' | grep -q ."
assert_contains "mise ls npm:inflight" "$version"
