## Description New Copilot-CLI Module using AgentAPI Need to test once AgentAPI Changes are pushed. ## Type of Change - [X] New module - [ ] Bug fix - [ ] Feature/enhancement - [ ] Documentation - [ ] Other ## Module Information **Path:** `registry/coder-labs/modules/copilot-cli` **New version:** `v0.1.0` **Breaking change:** [ ] Yes [ ] No ## Testing & Validation - [X] Tests pass (`bun test`) - [X] Code formatted (`bun run fmt`) - [ ] Changes tested locally ## Related Issues <!-- Link related issues or write "None" if not applicable --> --------- Co-authored-by: Atif Ali <atif@coder.com>
237 lines
6.0 KiB
HCL
237 lines
6.0 KiB
HCL
run "defaults_are_correct" {
|
|
command = plan
|
|
|
|
variables {
|
|
agent_id = "test-agent"
|
|
workdir = "/home/coder"
|
|
}
|
|
|
|
assert {
|
|
condition = var.copilot_model == "claude-sonnet-4.5"
|
|
error_message = "Default model should be 'claude-sonnet-4.5'"
|
|
}
|
|
|
|
assert {
|
|
condition = var.report_tasks == true
|
|
error_message = "Task reporting should be enabled by default"
|
|
}
|
|
|
|
assert {
|
|
condition = var.resume_session == true
|
|
error_message = "Session resumption should be enabled by default"
|
|
}
|
|
|
|
assert {
|
|
condition = var.allow_all_tools == false
|
|
error_message = "allow_all_tools should be disabled by default"
|
|
}
|
|
|
|
assert {
|
|
condition = resource.coder_env.mcp_app_status_slug.name == "CODER_MCP_APP_STATUS_SLUG"
|
|
error_message = "Status slug env var should be created"
|
|
}
|
|
|
|
assert {
|
|
condition = resource.coder_env.mcp_app_status_slug.value == "copilot"
|
|
error_message = "Status slug value should be 'copilot'"
|
|
}
|
|
}
|
|
|
|
run "github_token_creates_env_var" {
|
|
command = plan
|
|
|
|
variables {
|
|
agent_id = "test-agent"
|
|
workdir = "/home/coder"
|
|
github_token = "test_github_token_abc123"
|
|
}
|
|
|
|
assert {
|
|
condition = length(resource.coder_env.github_token) == 1
|
|
error_message = "github_token env var should be created when token is provided"
|
|
}
|
|
|
|
assert {
|
|
condition = resource.coder_env.github_token[0].name == "GITHUB_TOKEN"
|
|
error_message = "github_token env var name should be 'GITHUB_TOKEN'"
|
|
}
|
|
|
|
assert {
|
|
condition = resource.coder_env.github_token[0].value == "test_github_token_abc123"
|
|
error_message = "github_token env var value should match input"
|
|
}
|
|
}
|
|
|
|
run "github_token_not_created_when_empty" {
|
|
command = plan
|
|
|
|
variables {
|
|
agent_id = "test-agent"
|
|
workdir = "/home/coder"
|
|
github_token = ""
|
|
}
|
|
|
|
assert {
|
|
condition = length(resource.coder_env.github_token) == 0
|
|
error_message = "github_token env var should not be created when empty"
|
|
}
|
|
}
|
|
|
|
run "copilot_model_env_var_for_non_default" {
|
|
command = plan
|
|
|
|
variables {
|
|
agent_id = "test-agent"
|
|
workdir = "/home/coder"
|
|
copilot_model = "claude-sonnet-4"
|
|
}
|
|
|
|
assert {
|
|
condition = length(resource.coder_env.copilot_model) == 1
|
|
error_message = "copilot_model env var should be created for non-default model"
|
|
}
|
|
|
|
assert {
|
|
condition = resource.coder_env.copilot_model[0].name == "COPILOT_MODEL"
|
|
error_message = "copilot_model env var name should be 'COPILOT_MODEL'"
|
|
}
|
|
|
|
assert {
|
|
condition = resource.coder_env.copilot_model[0].value == "claude-sonnet-4"
|
|
error_message = "copilot_model env var value should match input"
|
|
}
|
|
}
|
|
|
|
run "copilot_model_not_created_for_default" {
|
|
command = plan
|
|
|
|
variables {
|
|
agent_id = "test-agent"
|
|
workdir = "/home/coder"
|
|
copilot_model = "claude-sonnet-4.5"
|
|
}
|
|
|
|
assert {
|
|
condition = length(resource.coder_env.copilot_model) == 0
|
|
error_message = "copilot_model env var should not be created for default model"
|
|
}
|
|
}
|
|
|
|
run "model_validation_accepts_valid_models" {
|
|
command = plan
|
|
|
|
variables {
|
|
agent_id = "test-agent"
|
|
workdir = "/home/coder"
|
|
copilot_model = "gpt-5"
|
|
}
|
|
|
|
assert {
|
|
condition = contains(["claude-sonnet-4", "claude-sonnet-4.5", "gpt-5"], var.copilot_model)
|
|
error_message = "Model should be one of the valid options"
|
|
}
|
|
}
|
|
|
|
run "copilot_config_merges_with_trusted_directories" {
|
|
command = plan
|
|
|
|
variables {
|
|
agent_id = "test-agent"
|
|
workdir = "/home/coder/project"
|
|
trusted_directories = ["/workspace", "/data"]
|
|
}
|
|
|
|
assert {
|
|
condition = length(local.final_copilot_config) > 0
|
|
error_message = "final_copilot_config should be computed"
|
|
}
|
|
|
|
# Verify workdir is trimmed of trailing slash
|
|
assert {
|
|
condition = local.workdir == "/home/coder/project"
|
|
error_message = "workdir should be trimmed of trailing slash"
|
|
}
|
|
}
|
|
|
|
run "custom_copilot_config_overrides_default" {
|
|
command = plan
|
|
|
|
variables {
|
|
agent_id = "test-agent"
|
|
workdir = "/home/coder"
|
|
copilot_config = jsonencode({
|
|
banner = "always"
|
|
theme = "dark"
|
|
})
|
|
}
|
|
|
|
assert {
|
|
condition = var.copilot_config != ""
|
|
error_message = "Custom copilot config should be set"
|
|
}
|
|
|
|
assert {
|
|
condition = jsondecode(local.final_copilot_config).banner == "always"
|
|
error_message = "Custom banner setting should be applied"
|
|
}
|
|
|
|
assert {
|
|
condition = jsondecode(local.final_copilot_config).theme == "dark"
|
|
error_message = "Custom theme setting should be applied"
|
|
}
|
|
}
|
|
|
|
run "trusted_directories_merged_with_custom_config" {
|
|
command = plan
|
|
|
|
variables {
|
|
agent_id = "test-agent"
|
|
workdir = "/home/coder/project"
|
|
copilot_config = jsonencode({
|
|
banner = "always"
|
|
theme = "dark"
|
|
trusted_folders = ["/custom"]
|
|
})
|
|
trusted_directories = ["/workspace", "/data"]
|
|
}
|
|
|
|
assert {
|
|
condition = contains(jsondecode(local.final_copilot_config).trusted_folders, "/custom")
|
|
error_message = "Custom trusted folder should be included"
|
|
}
|
|
|
|
assert {
|
|
condition = contains(jsondecode(local.final_copilot_config).trusted_folders, "/home/coder/project")
|
|
error_message = "Workdir should be included in trusted folders"
|
|
}
|
|
|
|
assert {
|
|
condition = contains(jsondecode(local.final_copilot_config).trusted_folders, "/workspace")
|
|
error_message = "trusted_directories should be merged into config"
|
|
}
|
|
|
|
assert {
|
|
condition = contains(jsondecode(local.final_copilot_config).trusted_folders, "/data")
|
|
error_message = "All trusted_directories should be merged into config"
|
|
}
|
|
}
|
|
|
|
run "app_slug_is_consistent" {
|
|
command = plan
|
|
|
|
variables {
|
|
agent_id = "test-agent"
|
|
workdir = "/home/coder"
|
|
}
|
|
|
|
assert {
|
|
condition = local.app_slug == "copilot"
|
|
error_message = "app_slug should be 'copilot'"
|
|
}
|
|
|
|
assert {
|
|
condition = local.module_dir_name == ".copilot-module"
|
|
error_message = "module_dir_name should be '.copilot-module'"
|
|
}
|
|
}
|