test(rules-core): isolate sisyphus deprecation warning assertion
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -10,6 +10,7 @@ import { log } from "../../../src/shared/logger";
|
|||||||
const SISYPHUS_DEPRECATION_MESSAGE = "[rules] .sisyphus/rules is deprecated and will be removed in v4.3.0; migrate to .omo/rules";
|
const SISYPHUS_DEPRECATION_MESSAGE = "[rules] .sisyphus/rules is deprecated and will be removed in v4.3.0; migrate to .omo/rules";
|
||||||
const SISYPHUS_LEGACY_RULE_SOURCES: ReadonlySet<RuleSource> = new Set([".sisyphus/rules", "~/.sisyphus/rules"]);
|
const SISYPHUS_LEGACY_RULE_SOURCES: ReadonlySet<RuleSource> = new Set([".sisyphus/rules", "~/.sisyphus/rules"]);
|
||||||
const warnedSisyphusRuleDirectories = new Set<string>();
|
const warnedSisyphusRuleDirectories = new Set<string>();
|
||||||
|
let logSisyphusRuleDeprecation: typeof log = log;
|
||||||
|
|
||||||
export function findRuleFiles(
|
export function findRuleFiles(
|
||||||
projectRoot: string | null,
|
projectRoot: string | null,
|
||||||
@@ -148,12 +149,21 @@ function warnSisyphusRuleDeprecation(source: RuleSource, path: string): void {
|
|||||||
const warningKey = dirname(path);
|
const warningKey = dirname(path);
|
||||||
if (warnedSisyphusRuleDirectories.has(warningKey)) return;
|
if (warnedSisyphusRuleDirectories.has(warningKey)) return;
|
||||||
warnedSisyphusRuleDirectories.add(warningKey);
|
warnedSisyphusRuleDirectories.add(warningKey);
|
||||||
log(SISYPHUS_DEPRECATION_MESSAGE, {
|
logSisyphusRuleDeprecation(SISYPHUS_DEPRECATION_MESSAGE, {
|
||||||
event: "rules-sisyphus-deprecated",
|
event: "rules-sisyphus-deprecated",
|
||||||
path,
|
path,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function _setSisyphusRuleDeprecationLoggerForTesting(logger: typeof log): void {
|
||||||
|
logSisyphusRuleDeprecation = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function _resetSisyphusRuleDeprecationWarningStateForTesting(): void {
|
||||||
|
warnedSisyphusRuleDirectories.clear();
|
||||||
|
logSisyphusRuleDeprecation = log;
|
||||||
|
}
|
||||||
|
|
||||||
function validFileRealPath(filePath: string): string | null {
|
function validFileRealPath(filePath: string): string | null {
|
||||||
if (!existsSync(filePath)) return null;
|
if (!existsSync(filePath)) return null;
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { mkdirSync, rmSync, writeFileSync } from "node:fs";
|
import { mkdirSync, rmSync, writeFileSync } from "node:fs";
|
||||||
import { tmpdir } from "node:os";
|
import { tmpdir } from "node:os";
|
||||||
import { join } from "node:path";
|
import { join } from "node:path";
|
||||||
import { afterEach, describe, expect, it, mock, spyOn } from "bun:test";
|
import { afterEach, describe, expect, it } from "bun:test";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
clearProjectRootCache,
|
clearProjectRootCache,
|
||||||
@@ -13,7 +13,7 @@ import {
|
|||||||
parseRuleFrontmatter,
|
parseRuleFrontmatter,
|
||||||
shouldApplyRule,
|
shouldApplyRule,
|
||||||
} from "./index";
|
} from "./index";
|
||||||
import * as logger from "../../../src/shared/logger";
|
import { _resetSisyphusRuleDeprecationWarningStateForTesting, _setSisyphusRuleDeprecationLoggerForTesting } from "./finder";
|
||||||
|
|
||||||
let testRoot: string | null = null;
|
let testRoot: string | null = null;
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ function createTestRoot(name: string): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
mock.restore();
|
_resetSisyphusRuleDeprecationWarningStateForTesting();
|
||||||
if (testRoot) {
|
if (testRoot) {
|
||||||
rmSync(testRoot, { recursive: true, force: true });
|
rmSync(testRoot, { recursive: true, force: true });
|
||||||
testRoot = null;
|
testRoot = null;
|
||||||
@@ -97,17 +97,20 @@ describe("rules-core", () => {
|
|||||||
mkdirSync(join(root, ".sisyphus", "rules"), { recursive: true });
|
mkdirSync(join(root, ".sisyphus", "rules"), { recursive: true });
|
||||||
mkdirSync(join(root, "src"), { recursive: true });
|
mkdirSync(join(root, "src"), { recursive: true });
|
||||||
writeFileSync(legacyRulePath, "legacy");
|
writeFileSync(legacyRulePath, "legacy");
|
||||||
const logSpy = spyOn(logger, "log").mockImplementation(() => {});
|
const warnings: Array<{ readonly message: string; readonly data: unknown }> = [];
|
||||||
|
_setSisyphusRuleDeprecationLoggerForTesting((message, data) => {
|
||||||
|
warnings.push({ message, data });
|
||||||
|
});
|
||||||
|
|
||||||
// when
|
// when
|
||||||
findRuleFiles(root, root, join(root, "src", "index.ts"));
|
findRuleFiles(root, root, join(root, "src", "index.ts"));
|
||||||
findRuleFiles(root, root, join(root, "src", "index.ts"));
|
findRuleFiles(root, root, join(root, "src", "index.ts"));
|
||||||
const warnings = logSpy.mock.calls.filter(
|
const deprecationWarnings = warnings.filter(
|
||||||
([message, data]) => message === SISYPHUS_DEPRECATION_MESSAGE && isSisyphusDeprecationData(data, legacyRulePath),
|
({ message, data }) => message === SISYPHUS_DEPRECATION_MESSAGE && isSisyphusDeprecationData(data, legacyRulePath),
|
||||||
);
|
);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
expect(warnings).toHaveLength(1);
|
expect(deprecationWarnings).toHaveLength(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("#given a workspace directory has no project marker (no .git, no package.json, etc.) AND contains .omo/rules/ #when findRuleFiles is called #then the .omo/rules/ files are still discovered", () => {
|
it("#given a workspace directory has no project marker (no .git, no package.json, etc.) AND contains .omo/rules/ #when findRuleFiles is called #then the .omo/rules/ files are still discovered", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user