#!/usr/bin/env bash
export MISE_EXPERIMENTAL=1
mkdir -p "$MISE_CONFIG_DIR" project
cat >"$MISE_CONFIG_DIR/config.toml" <<'TOML'
[daemon_providers.local-postgres]
preset = "postgres"
version = "18"
port = "auto"
TOML
cd project
printf '[env]\nCONSUMER_ONLY = "never-export"\n' >mise.toml
assert_contains 'mise daemons providers ls --json' '"ownership": "provider"'
assert_contains 'mise daemons providers ls --json' '"name": "local-postgres"'
assert "test ! -d '$MISE_STATE_DIR/daemon-providers'"
assert_fail 'mise daemons providers start nonexistent'
assert_fail 'mise daemons providers stop'
# PostgreSQL refuses root, so root is told before anything is installed.
if [[ $(id -u) == 0 ]]; then
  assert_fail_contains 'mise daemons providers start local-postgres 2>&1' 'daemon provider local-postgres cannot run as root'
  assert "test ! -d '$MISE_DATA_DIR/installs/postgres'"
  assert "test ! -d '$MISE_STATE_DIR/daemon-providers/local-postgres'"
fi
# A damaged saved definition still lists, and does not block the others.
mkdir -p "$MISE_STATE_DIR/daemon-providers/damaged"
echo 'not json' >"$MISE_STATE_DIR/daemon-providers/damaged/definition.json"
assert_contains 'mise daemons providers ls --json' '"name": "damaged"'
assert_contains 'mise daemons providers ls --json' '"name": "local-postgres"'
cat >"$MISE_CONFIG_DIR/config.local.toml" <<'TOML'
[daemon_providers.local-postgres]
preset = "postgres"
version = "18"
port = 54321
TOML
assert_contains 'mise daemons providers ls --json' '"port": 54321'
cat >"$MISE_CONFIG_DIR/config.local.toml" <<'TOML'
[daemon_providers.local-postgres]
preset = "postgres"
version = "{{ env.CONSUMER_VERSION }}"
TOML
assert_contains 'mise daemons providers ls 2>&1 || true' 'must be literal'
rm "$MISE_CONFIG_DIR/config.local.toml"
cat >>mise.toml <<'TOML'
[daemon_providers.untrusted]
preset = "postgres"
version = "18"
TOML
assert_contains 'mise daemons providers ls 2>&1 || true' 'belongs in global mise configuration'
