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.
91 lines
2.8 KiB
TypeScript
91 lines
2.8 KiB
TypeScript
/**
|
|
* test:scoped — verifies the TIA selection logic used by `npm run test:scoped`.
|
|
*
|
|
* The shell script (`scripts/quality/test-scoped.sh`) delegates to
|
|
* `select-impacted-tests.mjs` for the actual test selection. This test
|
|
* exercises that selection logic with synthetic inputs so the gate stays
|
|
* correct without running the full shell pipeline.
|
|
*/
|
|
import { test } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { selectImpacted } from "../../scripts/quality/select-impacted-tests.mjs";
|
|
|
|
// Minimal impact map for testing.
|
|
const MAP = {
|
|
sources: {
|
|
"src/app/api/v1/chat/route.ts": [
|
|
"tests/unit/api/chat-route.test.ts",
|
|
"tests/unit/api/cors.test.ts",
|
|
],
|
|
"open-sse/handlers/chatCore.ts": [
|
|
"tests/unit/api/chat-route.test.ts",
|
|
"tests/unit/combo/combo-strategy.test.ts",
|
|
],
|
|
"src/shared/constants/routingStrategies.ts": [
|
|
"tests/unit/combo/combo-strategy.test.ts",
|
|
],
|
|
},
|
|
};
|
|
|
|
test("selectImpacted: returns impacted tests for changed source files", () => {
|
|
const sel = selectImpacted({
|
|
changed: ["src/app/api/v1/chat/route.ts"],
|
|
map: MAP,
|
|
});
|
|
assert.deepEqual(sel, ["tests/unit/api/chat-route.test.ts", "tests/unit/api/cors.test.ts"]);
|
|
});
|
|
|
|
test("selectImpacted: deduplicates tests impacted by multiple changed files", () => {
|
|
const sel = selectImpacted({
|
|
changed: ["src/app/api/v1/chat/route.ts", "open-sse/handlers/chatCore.ts"],
|
|
map: MAP,
|
|
});
|
|
// chat-route.test.ts is impacted by both — must appear once
|
|
assert.deepEqual(sel, [
|
|
"tests/unit/api/chat-route.test.ts",
|
|
"tests/unit/api/cors.test.ts",
|
|
"tests/unit/combo/combo-strategy.test.ts",
|
|
]);
|
|
});
|
|
|
|
test("selectImpacted: returns __RUN_ALL__ when a hub file changes", () => {
|
|
const sel = selectImpacted({
|
|
changed: ["tsconfig.json", "src/app/api/v1/chat/route.ts"],
|
|
map: MAP,
|
|
});
|
|
assert.deepEqual(sel, ["__RUN_ALL__"]);
|
|
});
|
|
|
|
test("selectImpacted: returns __RUN_ALL__ when a source file has no map entry", () => {
|
|
const sel = selectImpacted({
|
|
changed: ["src/lib/new-module.ts"],
|
|
map: MAP,
|
|
});
|
|
assert.deepEqual(sel, ["__RUN_ALL__"]);
|
|
});
|
|
|
|
test("selectImpacted: includes changed test files directly", () => {
|
|
const sel = selectImpacted({
|
|
changed: ["tests/unit/api/chat-route.test.ts"],
|
|
map: MAP,
|
|
});
|
|
assert.deepEqual(sel, ["tests/unit/api/chat-route.test.ts"]);
|
|
});
|
|
|
|
test("selectImpacted: returns empty array when no files impact tests", () => {
|
|
// A non-source, non-test file that isn't a hub
|
|
const sel = selectImpacted({
|
|
changed: ["docs/architecture/ARCHITECTURE.md"],
|
|
map: MAP,
|
|
});
|
|
assert.deepEqual(sel, []);
|
|
});
|
|
|
|
test("selectImpacted: non-source files are ignored (no __RUN_ALL__)", () => {
|
|
const sel = selectImpacted({
|
|
changed: ["README.md", ".gitignore"],
|
|
map: MAP,
|
|
});
|
|
assert.deepEqual(sel, []);
|
|
});
|