mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-13 18:32:12 +03:00
Landed with the design call resolved per the owner's pick — **option 1**: the synced store is now endpoint-agnostic (persistDiscoveredModels and managedModelImport no longer drop non-chat models at write time), and chat selectability moved to read time (auto-pool expansion in autoStrategy applies filterChatSelectableModels; the models-route projection already had its chatOnly filter). Your discovery test now passes end-to-end (3/3): /api/show capabilities persist per connection and image/embedding requests route through the advertising host. Reconciliation notes: conflicted areas merged onto the current tip (adobe discovery import, requestedModel preflight signature, resolvedProvider fast-path coexists with the synced-route override — explicit resolution wins); carried base-red drains (#10055 memoization, #11071 test variants) dropped as already-landed; the managed-model-import exclusion test was propagated to the new contract (image/video models persist; the read filter still hides them from chat pickers — pinned by a new assertion). Full battery: 205/206 focused (the one red is a confirmed periodic-timer timing flake on the loaded devbox — 20/20 isolated), autoCombo vitest 30/30, combo suites 46/46, gates + typecheck clean. Thank you @yourspraveen — the capability probe + routing design was right; it just needed the store contract opened up. Fixes #11087.
94 lines
3.1 KiB
TypeScript
94 lines
3.1 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import fs from "node:fs";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import test from "node:test";
|
|
|
|
import { analyzeForgottenSiblingTests } from "../../scripts/check/check-forgotten-sibling-tests.mjs";
|
|
|
|
function fixture(files: Record<string, string>) {
|
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), "forgotten-sibling-"));
|
|
for (const [file, contents] of Object.entries(files)) {
|
|
const absolute = path.join(root, file);
|
|
fs.mkdirSync(path.dirname(absolute), { recursive: true });
|
|
fs.writeFileSync(absolute, contents);
|
|
}
|
|
return root;
|
|
}
|
|
|
|
test("detects a missing sibling test for a static consumer", () => {
|
|
const root = fixture({
|
|
"src/lib/value.ts": "export const value = 1;\n",
|
|
"src/lib/consumer.ts": 'import { value } from "./value";\nexport const doubled = value * 2;\n',
|
|
"tests/unit/consumer.test.ts": 'import "../../src/lib/consumer";\n',
|
|
});
|
|
|
|
const result = analyzeForgottenSiblingTests({
|
|
root,
|
|
changedEntries: [{ status: "M", file: "src/lib/value.ts" }],
|
|
impactMap: { sources: { "src/lib/consumer.ts": ["tests/unit/consumer.test.ts"] } },
|
|
allowlist: [],
|
|
});
|
|
|
|
assert.deepEqual(result.findings, [
|
|
{
|
|
changedModule: "src/lib/value.ts",
|
|
changedSymbols: [],
|
|
consumer: "src/lib/consumer.ts",
|
|
candidateTest: "tests/unit/consumer.test.ts",
|
|
reason: "candidate sibling test is absent from the PR diff",
|
|
},
|
|
]);
|
|
});
|
|
|
|
test("updating the candidate sibling test clears the finding", () => {
|
|
const root = fixture({
|
|
"src/lib/value.ts": "export const value = 1;\n",
|
|
"src/lib/consumer.ts": 'import { value } from "./value";\n',
|
|
"tests/unit/consumer.test.ts": 'import "../../src/lib/consumer";\n',
|
|
});
|
|
|
|
const result = analyzeForgottenSiblingTests({
|
|
root,
|
|
changedEntries: [
|
|
{ status: "M", file: "src/lib/value.ts" },
|
|
{ status: "M", file: "tests/unit/consumer.test.ts" },
|
|
],
|
|
impactMap: { sources: { "src/lib/consumer.ts": ["tests/unit/consumer.test.ts"] } },
|
|
allowlist: [],
|
|
});
|
|
|
|
assert.equal(result.findings.length, 0);
|
|
});
|
|
|
|
test("barrel and dynamic-import consumers remain advisory diagnostics", () => {
|
|
const root = fixture({
|
|
"src/lib/value.ts": "export const value = 1;\n",
|
|
"src/lib/index.ts": 'export { value } from "./value";\n',
|
|
"src/lib/lazy.ts": 'export const load = () => import("./value");\n',
|
|
"tests/unit/index.test.ts": 'import "../../src/lib/index";\n',
|
|
"tests/unit/lazy.test.ts": 'import "../../src/lib/lazy";\n',
|
|
});
|
|
|
|
const result = analyzeForgottenSiblingTests({
|
|
root,
|
|
changedEntries: [{ status: "M", file: "src/lib/value.ts" }],
|
|
impactMap: {
|
|
sources: {
|
|
"src/lib/index.ts": ["tests/unit/index.test.ts"],
|
|
"src/lib/lazy.ts": ["tests/unit/lazy.test.ts"],
|
|
},
|
|
},
|
|
allowlist: [],
|
|
});
|
|
|
|
assert.equal(result.findings.length, 0);
|
|
assert.deepEqual(
|
|
result.diagnostics.map(({ consumer, kind }) => ({ consumer, kind })),
|
|
[
|
|
{ consumer: "src/lib/index.ts", kind: "barrel" },
|
|
{ consumer: "src/lib/lazy.ts", kind: "dynamic-import" },
|
|
]
|
|
);
|
|
});
|