test(modelSync,antigravity): align with post-merge route behavior

After merging PRs #2221 (ModelSync shared loopback readiness gate + IPv4 force)
and #2219 (Antigravity loadCodeAssist bootstrap + fetchAvailableModels fallback)
into release/v3.8.0, two test suites needed updates to match the new routing:

- tests/unit/model-sync-route.test.ts:
  * resetStorage() now calls __resetLoopbackReadinessForTests() so the
    module-level __loopbackReadyPromise cache does not leak between tests.
  * Every fetch mock now answers the /__readiness_probe__/ URL with 404 so
    the gate opens immediately (any HTTP response satisfies the probe).
  * Self-fetch target URL assertions updated from http://localhost/...
    to http://127.0.0.1:20128/... per PR #2221's IPv4-force.
- tests/unit/provider-models-route.test.ts:
  * The Antigravity discovery-retry test now treats loadCodeAssist calls as
    non-fatal failures so the discovery path is still exercised.
  * The expected discovery URL sequence is updated to the new
    fetchAvailableModels-first order introduced by PR #2219.
This commit is contained in:
diegosouzapw
2026-05-14 00:40:18 -03:00
parent 30130d6c2c
commit 22f2c033da
2 changed files with 57 additions and 20 deletions

View File

@@ -24,6 +24,14 @@ const originalFetch = globalThis.fetch;
async function resetStorage() {
delete process.env.INITIAL_PASSWORD;
globalThis.fetch = originalFetch;
// Reset the shared loopback readiness gate between tests so the cached
// promise from a previous test doesn't poison this one (PR #2221 adds
// an __loopbackReadyPromise module-level cache that, once resolved, is
// reused for the rest of the process). Without this reset, the very
// first test's mock-fetch resolution (or rejection) leaks into every
// subsequent test, causing the route to use in-process fallback instead
// of the test's mocked self-fetch.
modelSyncRoute.__resetLoopbackReadinessForTests();
core.resetDbInstance();
apiKeysDb.resetApiKeyState();
fs.rmSync(TEST_DATA_DIR, { recursive: true, force: true });
@@ -63,9 +71,10 @@ test("model sync route skips success log when fetched models do not change store
const originalFetch = globalThis.fetch;
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return Response.json({
models: [{ id: "custom-model-1", name: "Custom Model 1" }],
@@ -107,9 +116,10 @@ test("model sync route stores the real provider while keeping the account label"
const originalFetch = globalThis.fetch;
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return Response.json({
models: [{ id: "custom-model-2", name: "Custom Model 2" }],
@@ -191,9 +201,10 @@ test("model sync route propagates upstream failures and records an error log ent
});
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return Response.json({ error: "Provider upstream unavailable" }, { status: 502 });
};
@@ -227,9 +238,10 @@ test("model sync route falls back to the upstream HTTP status when the models pa
});
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return Response.json({}, { status: 429 });
};
@@ -262,9 +274,10 @@ test("model sync route reports invalid JSON /models responses without losing ups
});
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return new Response("<html>bad gateway</html>", {
status: 200,
@@ -309,9 +322,10 @@ test("model sync route preserves previously synced models when the upstream omit
]);
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return Response.json({});
};
@@ -352,9 +366,10 @@ test("model sync route writes synced available models for Gemini connections", a
});
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return Response.json({
models: [
@@ -415,9 +430,10 @@ test("model sync route writes synced available models for non-Gemini providers t
});
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return Response.json({
models: [
@@ -470,9 +486,10 @@ test("model sync route import mode merges discovered models without deleting man
await localDb.setModelAlias("manual-only", "openrouter/manual-only");
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return Response.json({
models: [{ id: "router-v4", name: "Router V4" }],
@@ -535,9 +552,10 @@ test("model sync route import mode ignores supported endpoint ordering changes",
]);
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return Response.json({
models: [
@@ -598,9 +616,10 @@ test("model sync route import mode reports updates without counting them as new
]);
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return Response.json({
models: [
@@ -671,9 +690,10 @@ test("model sync route records added, removed, and updated model diffs with fall
]);
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return Response.json({
models: [
@@ -749,9 +769,10 @@ test("model sync route forwards cookies, filters built-ins, and syncs aliases fo
await localDb.setModelAlias("router-v2", "other-provider/router-v2");
globalThis.fetch = async (url, init = {}) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
assert.equal(init.headers.cookie, "session=test-cookie");
assert.equal(
@@ -813,9 +834,10 @@ test("model sync route reports synced managed models separately from preserved m
await modelsDb.addCustomModel("openrouter", "router-v4", "Manual Router V4", "manual");
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return Response.json({
models: [{ id: "router-v4", name: "Router V4" }],
@@ -877,9 +899,10 @@ test("model sync route uses provider-node prefixes when syncing compatible-provi
await localDb.setModelAlias("sonnet-4-6", "some-other-provider/sonnet-4-6");
globalThis.fetch = async (url) => {
if (String(url).includes("__readiness_probe__")) return new Response(null, { status: 404 });
assert.equal(
String(url),
`http://localhost/api/providers/${connection.id}/models?refresh=true`
`http://127.0.0.1:20128/api/providers/${connection.id}/models?refresh=true`
);
return Response.json({
models: [{ id: "sonnet-4-6", name: "Sonnet 4.6" }],

View File

@@ -645,11 +645,18 @@ test("provider models route retries Antigravity discovery endpoints before retur
accessToken: "ag-access",
apiKey: null,
});
const seenUrls = [];
const seenUrls: string[] = [];
antigravityVersion.seedAntigravityVersionCache("1.22.2");
globalThis.fetch = async (url, init = {}) => {
seenUrls.push(String(url));
const urlString = String(url);
// After PR #2219, the discovery flow calls loadCodeAssist first as a project
// bootstrap; treat all bootstrap calls as non-fatal failures so the test
// exercises the discovery retry path.
if (urlString.includes("/v1internal:loadCodeAssist")) {
return new Response("nope", { status: 503 });
}
seenUrls.push(urlString);
if (seenUrls.length === 1) {
return new Response("unavailable", { status: 503 });
}
@@ -664,13 +671,20 @@ test("provider models route retries Antigravity discovery endpoints before retur
const response = await callRoute(connection.id);
const body = (await response.json()) as any;
const discoveryUrls = seenUrls.filter((url) => url.includes("/v1internal:models"));
// After PR #2219, the route tries `:fetchAvailableModels` URLs before
// `:models` URLs. The test mock returns 503 on the first call and success
// on the second, so only the first two `:fetchAvailableModels` URLs are
// hit — `:models` URLs are never reached. Assert on the actual discovery
// sequence the route follows.
const discoveryUrls = seenUrls.filter(
(url) => url.includes("/v1internal:fetchAvailableModels") || url.includes("/v1internal:models")
);
assert.equal(response.status, 200);
assert.equal(body.source, "api");
assert.deepEqual(discoveryUrls, [
"https://daily-cloudcode-pa.sandbox.googleapis.com/v1internal:models",
"https://daily-cloudcode-pa.googleapis.com/v1internal:models",
"https://daily-cloudcode-pa.sandbox.googleapis.com/v1internal:fetchAvailableModels",
"https://daily-cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels",
]);
assert.deepEqual(body.models, [{ id: "gemini-3-flash-preview", name: "Gemini 3 Flash" }]);
});