#!/usr/bin/env bash

# Test that user-specified `depends` field in tool options controls install ordering.
# Uses the `needs-dummy` plugin whose install script checks that dummy is already
# installed on disk — simulating a real runtime dependency like pipx:ruff needing python.

# With depends, needs-dummy waits for dummy even though it is listed first.
cat <<EOF >mise.toml
[tools]
needs-dummy = { version = "1.0.0", depends = ["dummy"] }
dummy = "2.0.0"
EOF

rm -rf "$MISE_DATA_DIR/installs/dummy"
rm -rf "$MISE_DATA_DIR/installs/needs-dummy"

assert "MISE_JOBS=1 mise install"

assert_contains "mise ls --installed dummy" "2.0.0"
assert_contains "mise ls --installed needs-dummy" "1.0.0"

# Bracket syntax should populate the same core `depends` option as table syntax.
rm -rf "$MISE_DATA_DIR/installs/dummy"
rm -rf "$MISE_DATA_DIR/installs/needs-dummy"
assert "MISE_JOBS=1 mise install 'needs-dummy[depends=dummy]@1.0.0' dummy@2.0.0"
assert_contains "mise ls --installed dummy" "2.0.0"
assert_contains "mise ls --installed needs-dummy" "1.0.0"

# Unsupported core option forms in bracket syntax should fail clearly instead
# of being silently treated as backend options.
assert_fail "mise install 'needs-dummy[depends={ name = \"dummy\" }]@1.0.0'" "depends must be a string or array"

# Test that circular dependencies are detected
cat <<EOF >mise.toml
[tools]
dummy = { version = "2.0.0", depends = ["needs-dummy"] }
needs-dummy = { version = "1.0.0", depends = ["dummy"] }
EOF

rm -rf "$MISE_DATA_DIR/installs/dummy"
rm -rf "$MISE_DATA_DIR/installs/needs-dummy"

assert_fail "mise install"
