Add marketplace add command

This commit is contained in:
xli-oai
2026-04-07 18:28:43 -07:00
parent 24c598e8a9
commit a3e9ac4fe2
7 changed files with 644 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
use anyhow::Result;
use codex_core::plugins::marketplace_install_root;
use codex_core::plugins::validate_marketplace_root;
use predicates::str::contains;
use pretty_assertions::assert_eq;
use std::path::Path;
use tempfile::TempDir;
fn codex_command(codex_home: &Path) -> Result<assert_cmd::Command> {
let mut cmd = assert_cmd::Command::new(codex_utils_cargo_bin::cargo_bin("codex")?);
cmd.env("CODEX_HOME", codex_home);
Ok(cmd)
}
#[tokio::test]
async fn marketplace_add_local_directory_installs_valid_marketplace_root() -> Result<()> {
let codex_home = TempDir::new()?;
let source = TempDir::new()?;
std::fs::create_dir_all(source.path().join(".agents/plugins"))?;
std::fs::create_dir_all(source.path().join("plugins/sample/.codex-plugin"))?;
std::fs::write(
source.path().join(".agents/plugins/marketplace.json"),
r#"{
"name": "debug",
"plugins": [
{
"name": "sample",
"source": {
"source": "local",
"path": "./plugins/sample"
}
}
]
}"#,
)?;
std::fs::write(
source
.path()
.join("plugins/sample/.codex-plugin/plugin.json"),
r#"{"name":"sample"}"#,
)?;
let mut add_cmd = codex_command(codex_home.path())?;
add_cmd
.args(["marketplace", "add", source.path().to_str().unwrap()])
.assert()
.success()
.stdout(contains("Added marketplace `debug`"));
let installed_root = marketplace_install_root(codex_home.path()).join("debug");
assert_eq!(validate_marketplace_root(&installed_root)?, "debug");
assert!(
installed_root
.join("plugins/sample/.codex-plugin/plugin.json")
.is_file()
);
Ok(())
}