Add New Diagram command with starter templates
- Archify: New Diagram… (Explorer folder menu, File > New File…, Command Palette) creates a .archify file from a template and opens the diagram - Six YAML templates: architecture, workflow, sequence, dataflow, lifecycle and an everyday plan; connections carry ids, workflows use schema 2 - Title and meta.output follow the file name; template comments are kept - Tests: every template passes archify validate; integration check for the command Closes #2
This commit is contained in:
@@ -97,6 +97,35 @@ export async function run(): Promise<void> {
|
||||
assert.ok(diagnostics[0].range.start.line >= 2, `reported on line ${diagnostics[0].range.start.line + 1}`);
|
||||
});
|
||||
|
||||
await check('New Diagram creates a .archify file from a template and opens the diagram', async () => {
|
||||
const folder = workspaceFile('.');
|
||||
// Stub the template pick and the name prompt; check the name validation on the way.
|
||||
const window = vscode.window as unknown as Record<string, unknown>;
|
||||
const originalPick = window.showQuickPick;
|
||||
const originalInput = window.showInputBox;
|
||||
let existingNameMessage: unknown;
|
||||
window.showQuickPick = async (items: readonly { label: string }[]) => (await items).find((item) => item.label === 'Everyday Plan');
|
||||
window.showInputBox = async (options: vscode.InputBoxOptions) => {
|
||||
existingNameMessage = await options.validateInput?.('web-platform');
|
||||
return 'summer-plan';
|
||||
};
|
||||
try {
|
||||
await vscode.commands.executeCommand('archify.newDiagram', folder);
|
||||
} finally {
|
||||
window.showQuickPick = originalPick;
|
||||
window.showInputBox = originalInput;
|
||||
}
|
||||
assert.match(String(existingNameMessage), /already exists/);
|
||||
const uri = vscode.Uri.joinPath(folder, 'summer-plan.archify');
|
||||
const text = new TextDecoder().decode(await vscode.workspace.fs.readFile(uri));
|
||||
assert.match(text, /^diagram_type: workflow$/m);
|
||||
assert.match(text, /^ {2}title: Summer plan$/m);
|
||||
assert.match(text, /^ {2}output: summer-plan\.html$/m);
|
||||
await waitFor('diagram editor for the new file', () =>
|
||||
webviewTabs('archify.diagram').some((tab) => tab.input instanceof vscode.TabInputCustom && tab.input.uri.toString() === uri.toString()),
|
||||
);
|
||||
});
|
||||
|
||||
await check('opens a live preview beside the source', async () => {
|
||||
await vscode.commands.executeCommand('archify.showPreviewToSide', workspaceFile('production-deployment.architecture.json'));
|
||||
const tabs = await waitFor('preview tab', () => {
|
||||
|
||||
Reference in New Issue
Block a user