import { assertEquals, assertStringIncludes } from "https://deno.land/std@0.224.0/assert/mod.ts"; import { withTestBackend } from "./test_backend.ts"; import { shouldSkipOnCI } from "./cargo_backend.ts"; import { addWorkspace } from "../workspace.ts"; // ============================================================================= // GITSYNC-SETTINGS COMMAND FEATURES // Tests for additional gitsync-settings command functionality // These tests require EE features (private, enterprise) and are skipped in CI // ============================================================================= Deno.test({ name: "GitSync Settings: default mode writes to top-level", ignore: shouldSkipOnCI(), // Requires EE features sanitizeResources: false, sanitizeOps: false, fn: async () => { await withTestBackend(async (backend, tempDir) => { // Set up workspace const testWorkspace = { remote: backend.baseUrl, workspaceId: backend.workspace, name: "default_mode_test", token: backend.token }; await addWorkspace(testWorkspace, { force: true, configDir: backend.testConfigDir }); // Configure backend with specific settings await backend.updateGitSyncConfig!({ git_sync_settings: { repositories: [{ git_repo_resource_path: "u/test/default_repo", script_path: "f/**", group_by_folder: false, use_individual_branch: false, settings: { include_path: ["f/special/**"], include_type: ["script"], exclude_path: ["*.test.ts"], extra_include_path: ["g/**"] } }] } }); // Create initial wmill.yaml with different settings await Deno.writeTextFile(`${tempDir}/wmill.yaml`, `defaultTs: bun includes: - f/** excludes: [] skipVariables: false`); // Pull with default flag const result = await backend.runCLICommand([ 'gitsync-settings', 'pull', '--repository', 'u/test/default_repo', '--default' ], tempDir); assertEquals(result.code, 0, `Default mode pull should succeed: ${result.stderr}`); // Read updated config const updatedConfig = await Deno.readTextFile(`${tempDir}/wmill.yaml`); // Should update top-level settings, not create overrides assertStringIncludes(updatedConfig, "includes:\n - f/special/**"); assertStringIncludes(updatedConfig, "excludes:\n - '*.test.ts'"); assertStringIncludes(updatedConfig, "extraIncludes:\n - g/**"); }); } }); Deno.test({ name: "GitSync Settings: pull shows correct diff output", ignore: shouldSkipOnCI(), // Requires EE features sanitizeResources: false, sanitizeOps: false, fn: async () => { await withTestBackend(async (backend, tempDir) => { // Set up workspace const testWorkspace = { remote: backend.baseUrl, workspaceId: backend.workspace, name: "diff_test", token: backend.token }; await addWorkspace(testWorkspace, { force: true, configDir: backend.testConfigDir }); // Configure backend await backend.updateGitSyncConfig!({ git_sync_settings: { repositories: [{ git_repo_resource_path: "u/test/diff_repo", script_path: "f/**", group_by_folder: false, use_individual_branch: false, settings: { include_path: ["f/**"], include_type: ["script", "flow"], exclude_path: [], extra_include_path: [] } }] } }); // Create wmill.yaml with different settings await Deno.writeTextFile(`${tempDir}/wmill.yaml`, `defaultTs: bun includes: - f/** excludes: [] skipVariables: true skipResources: false`); // Pull with diff flag const result = await backend.runCLICommand([ 'gitsync-settings', 'pull', '--repository', 'u/test/diff_repo', '--diff' ], tempDir); assertEquals(result.code, 0, `Diff mode should succeed: ${result.stderr}`); // Should show differences assertStringIncludes(result.stdout, "Changes that would be applied locally:"); // Should show the change for skipResources (ignoring ANSI color codes) assertStringIncludes(result.stdout, "skipResources:"); }); } }); Deno.test({ name: "GitSync Settings: replace mode overwrites existing config", ignore: shouldSkipOnCI(), // Requires EE features sanitizeResources: false, sanitizeOps: false, fn: async () => { await withTestBackend(async (backend, tempDir) => { // Set up workspace const testWorkspace = { remote: backend.baseUrl, workspaceId: backend.workspace, name: "replace_test", token: backend.token }; await addWorkspace(testWorkspace, { force: true, configDir: backend.testConfigDir }); // Configure backend with specific settings await backend.updateGitSyncConfig!({ git_sync_settings: { repositories: [{ git_repo_resource_path: "u/test/replace_repo", script_path: "f/**", group_by_folder: false, use_individual_branch: false, settings: { include_path: ["f/replaced/**"], include_type: ["script", "flow"], exclude_path: ["*.backup.ts"], extra_include_path: [] } }] } }); // Create initial wmill.yaml with settings that should be replaced await Deno.writeTextFile(`${tempDir}/wmill.yaml`, `defaultTs: bun includes: - f/old/** excludes: - "*.old.ts" skipVariables: true`); // Pull with replace flag const result = await backend.runCLICommand([ 'gitsync-settings', 'pull', '--repository', 'u/test/replace_repo', '--replace' ], tempDir); assertEquals(result.code, 0, `Replace mode pull should succeed: ${result.stderr}`); // Read updated config const updatedConfig = await Deno.readTextFile(`${tempDir}/wmill.yaml`); // Should have replaced settings from backend assertStringIncludes(updatedConfig, "f/replaced/**"); assertStringIncludes(updatedConfig, "*.backup.ts"); }); } });