import { describe, expect, it } from "vitest" ;
import { formatBackupCreateSummary, type BackupCreateResult } from "./backup-create.js" ;
function makeResult(overrides: Partial<BackupCreateResult> = {}): BackupCreateResult {
return {
createdAt: "2026-01-01T00:00:00.000Z" ,
archiveRoot: "openclaw-backup-2026-01-01" ,
archivePath: "/tmp/openclaw-backup.tar.gz" ,
dryRun: false ,
includeWorkspace: true ,
onlyConfig: false ,
verified: false ,
assets: [],
skipped: [],
...overrides,
};
}
describe("formatBackupCreateSummary" , () => {
const backupArchiveLine = "Backup archive: /tmp/openclaw-backup.tar.gz" ;
it.each([
{
name: "formats created archives with included and skipped paths" ,
result: makeResult({
verified: true ,
assets: [
{
kind: "state" ,
sourcePath: "/state" ,
archivePath: "archive/state" ,
displayPath: "~/.openclaw" ,
},
],
skipped: [
{
kind: "workspace" ,
sourcePath: "/workspace" ,
displayPath: "~/Projects/openclaw" ,
reason: "covered" ,
coveredBy: "~/.openclaw" ,
},
],
}),
expected: [
backupArchiveLine,
"Included 1 path:" ,
"- state: ~/.openclaw" ,
"Skipped 1 path:" ,
"- workspace: ~/Projects/openclaw (covered by ~/.openclaw)" ,
"Created /tmp/openclaw-backup.tar.gz" ,
"Archive verification: passed" ,
],
},
{
name: "formats dry runs and pluralized counts" ,
result: makeResult({
dryRun: true ,
assets: [
{
kind: "config" ,
sourcePath: "/config" ,
archivePath: "archive/config" ,
displayPath: "~/.openclaw/config.json" ,
},
{
kind: "credentials" ,
sourcePath: "/oauth" ,
archivePath: "archive/oauth" ,
displayPath: "~/.openclaw/oauth" ,
},
],
}),
expected: [
backupArchiveLine,
"Included 2 paths:" ,
"- config: ~/.openclaw/config.json" ,
"- credentials: ~/.openclaw/oauth" ,
"Dry run only; archive was not written." ,
],
},
])("$name" , ({ result, expected }) => {
expect(formatBackupCreateSummary(result)).toEqual(expected);
});
});
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland