test(cli): refresh stale deploy + logs journey assertions
Six journeys asserted against output formats that changed in earlier commits and had been failing regardless of branch: * `pic scripts deploy` prints a `name`/`version`/`action` KvBlock, not a prose "Created X vN" line. The name-override, version-bump, and the editor-can-deploy role check now parse the KvBlock fields (asserting the exact version + created/updated action) via a small `kv_field` helper. * `pic logs` gained a `source` column (now `created_at, source, status, summary`); the success/error-status and summary-truncation checks now index the status at col 2 and the summary at col 3. No production code touched — the deploys/logs always succeeded; only the assertions were stale. Full `--test cli --include-ignored` suite is now green (101 passed, 0 failed). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,16 @@ use predicates::prelude::*;
|
||||
use crate::common;
|
||||
use crate::common::cleanup::AppGuard;
|
||||
|
||||
/// Extract a field value from a `pic` KvBlock (`key<pad>\tvalue` per line).
|
||||
/// `pic scripts deploy` prints `name`/`version`/`action` rows, not a prose
|
||||
/// "Created X vN" line, so version-bump tests assert on these fields.
|
||||
fn kv_field<'a>(stdout: &'a str, key: &str) -> Option<&'a str> {
|
||||
stdout.lines().find_map(|l| {
|
||||
let (k, v) = l.split_once('\t')?;
|
||||
(k.trim() == key).then(|| v.trim())
|
||||
})
|
||||
}
|
||||
|
||||
#[ignore = "needs DATABASE_URL pointing at a running Postgres"]
|
||||
#[test]
|
||||
fn deploy_against_unknown_app_errors() {
|
||||
@@ -48,7 +58,7 @@ fn deploy_with_name_override() {
|
||||
let _guard = AppGuard::new(&env.url, &env.token, &slug);
|
||||
|
||||
let fixture = common::fixture_path("hello.rhai");
|
||||
common::pic_as(&env)
|
||||
let out = common::pic_as(&env)
|
||||
.args([
|
||||
"scripts",
|
||||
"deploy",
|
||||
@@ -58,11 +68,14 @@ fn deploy_with_name_override() {
|
||||
"--name",
|
||||
"custom-name",
|
||||
])
|
||||
.assert()
|
||||
.success()
|
||||
.stdout(predicate::str::contains("Created custom-name v1"));
|
||||
.output()
|
||||
.expect("deploy v1");
|
||||
let v1 = String::from_utf8(out.stdout).unwrap();
|
||||
assert_eq!(kv_field(&v1, "name"), Some("custom-name"), "v1 name: {v1}");
|
||||
assert_eq!(kv_field(&v1, "version"), Some("1"), "v1 version: {v1}");
|
||||
assert_eq!(kv_field(&v1, "action"), Some("created"), "v1 action: {v1}");
|
||||
|
||||
common::pic_as(&env)
|
||||
let out = common::pic_as(&env)
|
||||
.args([
|
||||
"scripts",
|
||||
"deploy",
|
||||
@@ -72,9 +85,11 @@ fn deploy_with_name_override() {
|
||||
"--name",
|
||||
"custom-name",
|
||||
])
|
||||
.assert()
|
||||
.success()
|
||||
.stdout(predicate::str::contains("Updated custom-name v2"));
|
||||
.output()
|
||||
.expect("deploy v2");
|
||||
let v2 = String::from_utf8(out.stdout).unwrap();
|
||||
assert_eq!(kv_field(&v2, "version"), Some("2"), "v2 version: {v2}");
|
||||
assert_eq!(kv_field(&v2, "action"), Some("updated"), "v2 action: {v2}");
|
||||
|
||||
let out = common::pic_as(&env)
|
||||
.args(["scripts", "ls", "--app", &slug])
|
||||
@@ -106,8 +121,8 @@ fn deploy_bumps_version_each_redeploy() {
|
||||
let _guard = AppGuard::new(&env.url, &env.token, &slug);
|
||||
|
||||
let fixture = common::fixture_path("hello.rhai");
|
||||
for expected in ["Created hello v1", "Updated hello v2", "Updated hello v3"] {
|
||||
common::pic_as(&env)
|
||||
for (version, action) in [("1", "created"), ("2", "updated"), ("3", "updated")] {
|
||||
let out = common::pic_as(&env)
|
||||
.args([
|
||||
"scripts",
|
||||
"deploy",
|
||||
@@ -115,9 +130,20 @@ fn deploy_bumps_version_each_redeploy() {
|
||||
"--app",
|
||||
&slug,
|
||||
])
|
||||
.assert()
|
||||
.success()
|
||||
.stdout(predicate::str::contains(expected));
|
||||
.output()
|
||||
.expect("deploy");
|
||||
assert!(out.status.success(), "deploy v{version} failed: {out:?}");
|
||||
let stdout = String::from_utf8(out.stdout).unwrap();
|
||||
assert_eq!(
|
||||
kv_field(&stdout, "version"),
|
||||
Some(version),
|
||||
"version: {stdout}"
|
||||
);
|
||||
assert_eq!(
|
||||
kv_field(&stdout, "action"),
|
||||
Some(action),
|
||||
"action: {stdout}"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user