test {
  parallel = true
}

provider "aws" {
  region  = "us-east-1"
  alias   = "prod"
  profile = "prod"
}

provider "aws" {
  region  = "us-east-1"
  alias   = "dev"
  profile = "dev"
}

provider "aws" {
  region  = "us-east-1"
  alias   = "shared"
  profile = "shared"
}

provider "aws" {
  region  = "us-east-1"
  alias   = "permissions-platform-qa"
  profile = "permissions-platform-qa"
}

provider "aws" {
  region  = "us-east-1"
  alias   = "permissions-platform-prod"
  profile = "permissions-platform-prod"
}

provider "aws" {
  region  = "us-east-1"
  alias   = "sme-grps-dev-us-east-1"
  profile = "sme-grps-dev"
}

provider "aws" {
  region  = "eu-central-1"
  alias   = "sme-grps-dev-eu-central-1"
  profile = "sme-grps-dev"
}

provider "aws" {
  region  = "us-east-1"
  alias   = "sme-grps-prod-us-east-1"
  profile = "sme-grps-prod"
}

provider "aws" {
  region  = "eu-central-1"
  alias   = "sme-grps-prod-eu-central-1"
  profile = "sme-grps-prod"
}

variables {
  available_ip_limit = 0
}

run "prod" {
  state_key = "prod"

  variables {
    environment = "prod"
  }

  providers = {
    aws = aws.prod
  }

  assert {
    condition     = startswith(output.vpc_id, "vpc-")
    error_message = "VPC ID is not as expected"
  }

  assert {
    condition     = length(output.default_private_subnet_ids) == 3
    error_message = "Private subnet count is not as expected"
  }

  assert {
    condition     = length(output.default_public_subnet_ids) == 3
    error_message = "Public subnet count is not as expected"
  }

  assert {
    condition     = output.private_subnet_prefix_list_name == "prod-orcd-private-subnet-prefix-list"
    error_message = "Private subnet prefix list ID is not as expected"
  }

  assert {
    condition     = output.public_subnet_prefix_list_name == "prod-orcd-public-subnet-prefix-list"
    error_message = "Public subnet prefix list ID is not as expected"
  }
}

run "qa" {
  state_key = "qa"

  variables {
    environment = "qa"
  }

  providers = {
    aws = aws.prod
  }

  assert {
    condition     = startswith(output.vpc_id, "vpc-")
    error_message = "VPC ID is not as expected"
  }

  assert {
    condition     = length(output.default_private_subnet_ids) == 4
    error_message = "Private subnet count is not as expected"
  }

  assert {
    condition     = length(output.default_public_subnet_ids) == 3
    error_message = "Public subnet count is not as expected"
  }

  assert {
    condition     = output.private_subnet_prefix_list_name == "qa-orcd-private-subnet-prefix-list"
    error_message = "Private subnet prefix list ID is not as expected"
  }

  assert {
    condition     = output.public_subnet_prefix_list_name == "qa-orcd-public-subnet-prefix-list"
    error_message = "Public subnet prefix list ID is not as expected"
  }
}

run "uat" {
  state_key = "uat"

  variables {
    environment = "uat"
  }

  providers = {
    aws = aws.prod
  }

  assert {
    condition     = startswith(output.vpc_id, "vpc-")
    error_message = "VPC ID is not as expected"
  }

  assert {
    condition     = length(output.default_private_subnet_ids) == 3
    error_message = "Private subnet count is not as expected"
  }

  assert {
    condition     = length(output.default_public_subnet_ids) == 3
    error_message = "Public subnet count is not as expected"
  }

  assert {
    condition     = output.private_subnet_prefix_list_name == "uat-orcd-private-subnet-prefix-list"
    error_message = "Private subnet prefix list ID is not as expected"
  }

  assert {
    condition     = output.public_subnet_prefix_list_name == "uat-orcd-public-subnet-prefix-list"
    error_message = "Public subnet prefix list ID is not as expected"
  }
}

run "dev" {
  state_key = "dev"

  variables {
    environment = "dev"
  }

  providers = {
    aws = aws.dev
  }

  assert {
    condition     = startswith(output.vpc_id, "vpc-")
    error_message = "VPC ID is not as expected"
  }

  assert {
    condition     = length(output.default_private_subnet_ids) == 3
    error_message = "Private subnet count is not as expected"
  }

  assert {
    condition     = length(output.default_public_subnet_ids) == 3
    error_message = "Public subnet count is not as expected"
  }

  assert {
    condition     = output.private_subnet_prefix_list_name == "dev-orcd-private-subnet-prefix-list"
    error_message = "Private subnet prefix list ID is not as expected"
  }

  assert {
    condition     = output.public_subnet_prefix_list_name == "dev-orcd-public-subnet-prefix-list"
    error_message = "Public subnet prefix list ID is not as expected"
  }
}

run "shared" {
  state_key = "shared"

  variables {
    environment = "shared"
  }

  providers = {
    aws = aws.shared
  }

  assert {
    condition     = startswith(output.vpc_id, "vpc-")
    error_message = "VPC ID is not as expected"
  }

  assert {
    condition     = length(output.default_private_subnet_ids) == 3
    error_message = "Private subnet count is not as expected"
  }

  assert {
    condition     = length(output.default_public_subnet_ids) == 3
    error_message = "Public subnet count is not as expected"
  }

  assert {
    condition     = output.private_subnet_prefix_list_name == "shared-orcd-private-subnet-prefix-list"
    error_message = "Private subnet prefix list ID is not as expected"
  }

  assert {
    condition     = output.public_subnet_prefix_list_name == "shared-orcd-public-subnet-prefix-list"
    error_message = "Public subnet prefix list ID is not as expected"
  }
}

run "permissions-platform-qa" {
  state_key = "permissions-platform-qa"

  variables {
    environment = "qa"
  }

  providers = {
    aws = aws.permissions-platform-qa
  }

  assert {
    condition     = startswith(output.vpc_id, "vpc-")
    error_message = "VPC ID is not as expected"
  }

  assert {
    condition     = length(output.default_private_subnet_ids) == 3
    error_message = "Private subnet count is not as expected"
  }

  assert {
    condition     = length(output.default_public_subnet_ids) == 3
    error_message = "Public subnet count is not as expected"
  }

  assert {
    condition     = output.private_subnet_prefix_list_name == "qa-permissions-platform-private-subnet-prefix-list"
    error_message = "Private subnet prefix list ID is not as expected"
  }

  assert {
    condition     = output.public_subnet_prefix_list_name == "qa-permissions-platform-public-subnet-prefix-list"
    error_message = "Public subnet prefix list ID is not as expected"
  }
}

run "permissions-platform-prod" {
  state_key = "permissions-platform-prod"

  variables {
    environment = "prod"
  }

  providers = {
    aws = aws.permissions-platform-prod
  }

  assert {
    condition     = startswith(output.vpc_id, "vpc-")
    error_message = "VPC ID is not as expected"
  }

  assert {
    condition     = length(output.default_private_subnet_ids) == 3
    error_message = "Private subnet count is not as expected"
  }

  assert {
    condition     = length(output.default_public_subnet_ids) == 3
    error_message = "Public subnet count is not as expected"
  }

  assert {
    condition     = output.private_subnet_prefix_list_name == "prod-permissions-platform-private-subnet-prefix-list"
    error_message = "Private subnet prefix list ID is not as expected"
  }

  assert {
    condition     = output.public_subnet_prefix_list_name == "prod-permissions-platform-public-subnet-prefix-list"
    error_message = "Public subnet prefix list ID is not as expected"
  }
}

run "sme-grps-dev-us-east-1" {
  state_key = "sme-grps-dev"

  variables {
    environment = "dev"
  }

  providers = {
    aws = aws.sme-grps-dev-us-east-1
  }

  assert {
    condition     = startswith(output.vpc_id, "vpc-")
    error_message = "VPC ID is not as expected"
  }

  assert {
    condition     = length(output.default_private_subnet_ids) > 0
    error_message = "No private subnets were found"
  }

  assert {
    condition     = length(output.default_public_subnet_ids) > 0
    error_message = "No public subnets were found"
  }
}

run "sme-grps-dev-eu-central-1" {
  state_key = "sme-grps-dev"

  variables {
    environment = "dev"
  }

  providers = {
    aws = aws.sme-grps-dev-eu-central-1
  }

  assert {
    condition     = startswith(output.vpc_id, "vpc-")
    error_message = "VPC ID is not as expected"
  }

  assert {
    condition     = length(output.default_private_subnet_ids) > 0
    error_message = "No private subnets were found"
  }

  assert {
    condition     = length(output.default_public_subnet_ids) > 0
    error_message = "No public subnets were found"
  }
}

run "sme-grps-prod-us-east-1" {
  state_key = "sme-grps-prod"

  variables {
    environment = "prod"
  }

  providers = {
    aws = aws.sme-grps-prod-us-east-1
  }

  assert {
    condition     = startswith(output.vpc_id, "vpc-")
    error_message = "VPC ID is not as expected"
  }

  assert {
    condition     = length(output.default_private_subnet_ids) > 0
    error_message = "No private subnets were found"
  }

  assert {
    condition     = length(output.default_public_subnet_ids) > 0
    error_message = "No public subnets were found"
  }
}

run "sme-grps-prod-eu-central-1" {
  state_key = "sme-grps-prod"

  variables {
    environment = "prod"
  }

  providers = {
    aws = aws.sme-grps-prod-eu-central-1
  }

  assert {
    condition     = startswith(output.vpc_id, "vpc-")
    error_message = "VPC ID is not as expected"
  }

  assert {
    condition     = length(output.default_private_subnet_ids) > 0
    error_message = "No private subnets were found"
  }

  assert {
    condition     = length(output.default_public_subnet_ids) > 0
    error_message = "No public subnets were found"
  }
}
