# Testscript for exercising adding packages

#### Part 1: Adding with a single platform or exclude-platform

exec devbox install
! exec rg --version
! exec vim --version

# First, add a --platform, and verify that the []string packages
# becomes a map[string]any packages
exec devbox add ripgrep --platform x86_64-darwin
json.superset devbox.json expected_devbox1.json

# Second, add another platform: verify that it adds to the platforms array
exec devbox add ripgrep --platform x86_64-linux
# Third, add an excluded-platform too
exec devbox add vim --exclude-platform x86_64-linux

json.superset devbox.json expected_devbox2.json

#### Part 2: Adding with multiple platforms or exclude-platforms

exec devbox add hello --platform x86_64-darwin,x86_64-linux --platform aarch64-darwin
json.superset devbox.json expected_devbox3.json

exec devbox add cowsay --exclude-platform x86_64-darwin,x86_64-linux --exclude-platform aarch64-darwin
json.superset devbox.json expected_devbox4.json

### Part 3: Ensure we error to prevent inconsistent state

! exec devbox add cowsay --platform x86_64-darwin
stderr 'Error: cannot add any platform for package cowsay@latest because it already has `excluded_platforms` defined'

! exec devbox add hello --exclude-platform x86_64-darwin
stderr 'Error: cannot exclude any platform for package hello@latest because it already has `platforms` defined'

-- devbox.json --
{
  "packages": [
    "hello",
    "cowsay@latest"
  ]
}

-- expected_devbox1.json --
{
  "packages": {
    "hello": "",
    "cowsay": "latest",
    "ripgrep": {
      "version": "latest",
      "platforms": ["x86_64-darwin"]
    }
  }
}

-- expected_devbox2.json --
{
  "packages": {
    "hello": "",
    "cowsay": "latest",
    "ripgrep": {
      "version": "latest",
      "platforms": ["x86_64-darwin", "x86_64-linux"]
    },
    "vim": {
      "version": "latest",
      "excluded_platforms": ["x86_64-linux"]
    }
  }
}

-- expected_devbox3.json --

{
  "packages": {
    "hello": "",
    "cowsay": "latest",
    "ripgrep": {
      "version": "latest",
      "platforms": ["x86_64-darwin", "x86_64-linux"]
    },
    "vim": {
      "version": "latest",
      "excluded_platforms": ["x86_64-linux"]
    },
    "hello": {
        "version": "latest",
        "platforms": ["x86_64-darwin", "x86_64-linux", "aarch64-darwin"]
    }
  }
}

-- expected_devbox4.json --

{
  "packages": {
    "hello": "",
    "cowsay": {
      "version": "latest",
      "excluded_platforms": ["x86_64-darwin", "x86_64-linux", "aarch64-darwin"]
    },
    "ripgrep": {
      "version": "latest",
      "platforms": ["x86_64-darwin", "x86_64-linux"]
    },
    "vim": {
      "version": "latest",
      "excluded_platforms": ["x86_64-linux"]
    },
    "hello": {
        "version": "latest",
        "platforms": ["x86_64-darwin", "x86_64-linux", "aarch64-darwin"]
    }
  }
}
