chore: initialize from frontend template 4dc033c
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
import { createRuntimeAdapters } from "../../../../src/bootstrap/runtime-adapters.ts";
|
||||
|
||||
export const bootstrapFactory = createRuntimeAdapters;
|
||||
@@ -0,0 +1,3 @@
|
||||
import { createApplication } from "../../../../src/application/create-application.ts";
|
||||
|
||||
export const applicationFactory = createApplication;
|
||||
@@ -0,0 +1,7 @@
|
||||
import { createApplication } from "../../../../src/application/create-application.ts";
|
||||
|
||||
export const applicationFactory = createApplication;
|
||||
|
||||
export function AllowedPresentationFixture() {
|
||||
return <p>allowed</p>;
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
import type { Value } from "../domain/value.ts";
|
||||
|
||||
export function readValue(): Value {
|
||||
return { id: "fixture-value" };
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export type Value = {
|
||||
readonly id: string;
|
||||
};
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
import { readValue } from "../application/read-value.ts";
|
||||
|
||||
export function ValueView() {
|
||||
return <p>{readValue().id}</p>;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
import { second } from "./second.ts";
|
||||
|
||||
export const first = `first:${second}`;
|
||||
@@ -0,0 +1,3 @@
|
||||
import { first } from "./first.ts";
|
||||
|
||||
export const second = `second:${first}`;
|
||||
@@ -0,0 +1 @@
|
||||
export const runtimeName = "forbidden-runtime";
|
||||
@@ -0,0 +1,3 @@
|
||||
import { runtimeName } from "../adapters/runtime.ts";
|
||||
|
||||
export const selectedRuntime = runtimeName;
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
const modulePath = "../domain/value.ts";
|
||||
|
||||
export async function loadValue() {
|
||||
return import(modulePath);
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import "/definitely-missing-architecture-fixture.ts";
|
||||
import "architecture-fixture-package-that-does-not-exist";
|
||||
import "file:///definitely-missing-architecture-fixture.ts";
|
||||
import type { Value } from "../domain/missing-value.ts";
|
||||
|
||||
export function readValue(value: Value) {
|
||||
return value;
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
const modulePath = "../domain/value.ts";
|
||||
|
||||
export function requireValue() {
|
||||
return require(modulePath);
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
import { createHttpClient } from "../../../../src/adapters/http/client.ts";
|
||||
|
||||
export const leakedHttpFactory = createHttpClient;
|
||||
@@ -0,0 +1,3 @@
|
||||
import { QueryClient } from "@tanstack/react-query";
|
||||
|
||||
export const invalidClient = new QueryClient();
|
||||
@@ -0,0 +1,3 @@
|
||||
import React from "react";
|
||||
|
||||
export const invalidDomainValue = React.createElement("div");
|
||||
@@ -0,0 +1,4 @@
|
||||
export function DirectFetchPage() {
|
||||
void fetch("/api/forbidden");
|
||||
return <p>forbidden</p>;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
import "../../../../src/adapters/http/client.ts";
|
||||
|
||||
export const invalidEdge = true;
|
||||
@@ -0,0 +1,5 @@
|
||||
import "../../../../src/adapters/http/client.ts";
|
||||
|
||||
export function InvalidPresentationFixture() {
|
||||
return <p>invalid</p>;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
import type { ApplicationOutputPorts } from "../../../../src/application/ports/out/application-output-ports.ts";
|
||||
|
||||
export function OutputPortLeak(_props: ApplicationOutputPorts) {
|
||||
return <p>forbidden</p>;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
import { useQuery } from "@tanstack/react-query";
|
||||
|
||||
export const leakedQueryHook = useQuery;
|
||||
@@ -0,0 +1,5 @@
|
||||
import type { ApplicationApi } from "../../../../src/application/ports/in/application-api.ts";
|
||||
|
||||
export function ForbiddenTemplate(_props: { application: ApplicationApi }) {
|
||||
return <main>Template must not select an application use case.</main>;
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
export function createOwnedBrowserStorageCapabilities() {
|
||||
return {
|
||||
local: localStorage,
|
||||
session: sessionStorage,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
export function createOwnedCrossContextCapabilities() {
|
||||
return {
|
||||
channel: new BroadcastChannel("owned-cross-context-fixture"),
|
||||
storage: localStorage,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import type { BrowserStoragePolicy } from "../../../../src/application/ports/browser-file-storage/shared.ts";
|
||||
|
||||
export const POLICY: BrowserStoragePolicy = {
|
||||
owner: "fixture-owner",
|
||||
namespace: "fixture",
|
||||
classification: "INTERNAL",
|
||||
authority: "RECONSTRUCTABLE",
|
||||
accountScope: "OPAQUE_PARTITION",
|
||||
retention: { kind: "TTL", maxAgeMs: 1_000 },
|
||||
softBudgetBytes: 1_000,
|
||||
hardBudgetBytes: 2_000,
|
||||
evictionPriority: "RECONSTRUCTABLE",
|
||||
logoutAction: "EXPORT_THEN_PURGE",
|
||||
accountDeletionAction: "PURGE_PARTITION",
|
||||
pressureAction: "RETAIN",
|
||||
unavailableFallback: "ONLINE_ONLY",
|
||||
};
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
export function bypassThroughAlias() {
|
||||
const browser = globalThis;
|
||||
return browser.indexedDB.open("forbidden");
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
class BrowserRootHolder {
|
||||
readonly root = globalThis;
|
||||
}
|
||||
|
||||
new BrowserRootHolder().root.indexedDB.open("forbidden");
|
||||
@@ -0,0 +1,4 @@
|
||||
export function bypassThroughComputedAlias() {
|
||||
const browser = globalThis;
|
||||
return browser["caches"].open("forbidden");
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
class BrowserRootBox {
|
||||
constructor(readonly root: typeof globalThis) {}
|
||||
}
|
||||
|
||||
new BrowserRootBox(globalThis).root.indexedDB.open("forbidden");
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export function bypassThroughDefault(browser = globalThis) {
|
||||
return browser.indexedDB.open("forbidden");
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export function constructBlobOutsideOwnedAdapter() {
|
||||
return new Blob(["forbidden"]);
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export function openBroadcastChannelDirectly() {
|
||||
return new BroadcastChannel("forbidden");
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export function openCacheDirectly() {
|
||||
return caches.open("forbidden");
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export function openDatabaseDirectly() {
|
||||
return indexedDB.open("forbidden");
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export function writeLocalStorageDirectly() {
|
||||
localStorage.setItem("forbidden", "value");
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export function openOpfsDirectly() {
|
||||
return navigator.storage.getDirectory();
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export function writeSessionStorageDirectly() {
|
||||
sessionStorage.setItem("forbidden", "value");
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
export function bypassThroughDynamicCapabilityKey() {
|
||||
const browser = globalThis;
|
||||
const capability = "indexedDB";
|
||||
return browser[capability].open("forbidden");
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
export function bypassThroughObjectContainer() {
|
||||
const holder = { browser: globalThis };
|
||||
return holder.browser.indexedDB.open("forbidden");
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export function bypassThroughGlobalThis() {
|
||||
return globalThis.indexedDB.open("forbidden");
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
function identity<Value>(value: Value): Value {
|
||||
return value;
|
||||
}
|
||||
|
||||
export function bypassThroughIdentityWrapper() {
|
||||
return identity(globalThis).indexedDB.open("forbidden");
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
const holder: { root?: typeof globalThis } = {};
|
||||
|
||||
holder.root = globalThis;
|
||||
holder.root.indexedDB.open("forbidden");
|
||||
@@ -0,0 +1,3 @@
|
||||
export function allocateObjectUrlDirectly(value: never) {
|
||||
return URL.createObjectURL(value);
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
export function bypassThroughPropertyDescriptor() {
|
||||
const descriptor = Object.getOwnPropertyDescriptor(
|
||||
globalThis,
|
||||
"indexedDB",
|
||||
);
|
||||
return (descriptor?.value as IDBFactory).open("forbidden");
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export function bypassThroughReflection() {
|
||||
return Reflect.get(globalThis, "indexedDB");
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"providerAdapter": ".gitea/workflows/quality-gates.yml",
|
||||
"commands": [],
|
||||
"artifactSchemas": [{ "id": "text", "kind": "text", "maxBytes": 1024 }],
|
||||
"artifacts": [{ "id": "log", "path": "artifacts/gate.txt", "schemaId": "text", "production": "runner-generated" }],
|
||||
"gates": [
|
||||
{ "id": "FE-GATE-001", "name": "one", "commandIds": ["command"], "logArtifactId": "log", "evidenceArtifactIds": ["log"], "retentionClassId": "merge" },
|
||||
{ "id": "FE-GATE-001", "name": "duplicate", "commandIds": ["command"], "logArtifactId": "log", "evidenceArtifactIds": ["log"], "retentionClassId": "merge" }
|
||||
],
|
||||
"stages": [],
|
||||
"jobs": [],
|
||||
"retention": { "durationStatus": "UNSUPPORTED", "classes": [{ "id": "merge", "policy": "one cycle" }] }
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"jobId": "merge_gate",
|
||||
"needs": ["release_gate"]
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"providerAdapter": ".gitea/workflows/quality-gates.yml",
|
||||
"commands": [],
|
||||
"artifactSchemas": [],
|
||||
"artifacts": [{ "id": "log", "path": "artifacts/gate.txt", "schemaId": "missing", "production": "runner-generated" }],
|
||||
"gates": [],
|
||||
"stages": [],
|
||||
"jobs": [],
|
||||
"retention": { "durationStatus": "UNSUPPORTED", "classes": [] }
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"jobId": "release_gate",
|
||||
"addGateId": "FE-GATE-001"
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"providerAdapter": ".gitea/workflows/quality-gates.yml",
|
||||
"commands": [],
|
||||
"artifactSchemas": [],
|
||||
"artifacts": [],
|
||||
"gates": [],
|
||||
"stages": [],
|
||||
"jobs": [],
|
||||
"retention": { "durationStatus": "UNSUPPORTED", "classes": [] },
|
||||
"unexpected": true
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"jobId": "merge_gate",
|
||||
"needs": ["missing"]
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"jobId": "merge_gate",
|
||||
"removeGateId": "FE-GATE-001"
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"total": {
|
||||
"lines": { "pct": 0 },
|
||||
"statements": { "pct": 0 },
|
||||
"functions": { "pct": 0 },
|
||||
"branches": { "pct": 0 }
|
||||
},
|
||||
"src/adapters/http/http-execution-v3.ts": {
|
||||
"lines": { "pct": 0 },
|
||||
"statements": { "pct": 0 },
|
||||
"functions": { "pct": 0 },
|
||||
"branches": { "pct": 0 }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"total": {
|
||||
"lines": { "total": 14, "covered": 14, "skipped": 0, "pct": 100 },
|
||||
"statements": { "total": 14, "covered": 14, "skipped": 0, "pct": 100 },
|
||||
"functions": { "total": 14, "covered": 14, "skipped": 0, "pct": 100 },
|
||||
"branches": { "total": 14, "covered": 14, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/adapters/http/bounded-body-reader.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/adapters/http/bounded-json.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/adapters/http/http-execution-v3.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/adapters/http/request-builder.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/adapters/http/retry-policy.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/adapters/query-cache/server-state-scope-runtime.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/adapters/service-worker/service-worker-lifecycle.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/adapters/storage/browser-storage-adapter.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/adapters/telemetry/best-effort-telemetry.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/application/create-application.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/application/policies/compatibility.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/application/policies/performance-budgets.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/application/policies/promotion-readiness.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
},
|
||||
"src/application/use-cases/decide-chunk-recovery.ts": {
|
||||
"lines": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "statements": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "functions": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }, "branches": { "total": 1, "covered": 1, "skipped": 0, "pct": 100 }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
import { Button } from "../../../../src/presentation/design-system/primitives/core.tsx";
|
||||
|
||||
export const DeepImport = Button;
|
||||
@@ -0,0 +1,3 @@
|
||||
import { Menu } from "lucide-react";
|
||||
|
||||
export const DirectIcon = Menu;
|
||||
@@ -0,0 +1,3 @@
|
||||
export function RawPalette() {
|
||||
return <div style={{ color: "#ff0000" }}>raw palette</div>;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export const TOOLTIP_ONLY_REQUIRED_INFORMATION = "Required approval details";
|
||||
@@ -0,0 +1,3 @@
|
||||
export function leakToConsole(token: string) {
|
||||
console.error("UNKNOWN_DIAGNOSTIC_EVENT", token);
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
export function leakSensitiveContext(telemetry: {
|
||||
emit(eventName: string, context: Record<string, unknown>): void;
|
||||
}) {
|
||||
telemetry.emit("api.request.failed", {
|
||||
authorization: "Bearer secret",
|
||||
request_body: { email: "private@example.test" },
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
export function UnsafeBackendFailure({
|
||||
failure,
|
||||
}: Readonly<{ failure: { message: string } }>) {
|
||||
return <p>{failure.message}</p>;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export function HardcodedCommonAction() {
|
||||
return <button type="button">다시 시도</button>;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export function UnsafeTranslatedMarkup({ value }: Readonly<{ value: string }>) {
|
||||
return <p dangerouslySetInnerHTML={{ __html: value }} />;
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export function persistCredential(token: string) {
|
||||
localStorage.setItem("authToken", token);
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
import { OPTIONAL_RECIPE_RUNTIME_SENTINEL } from "../../../../../../recipes/frontend-capabilities/index.ts";
|
||||
|
||||
export const recipeInProduction = OPTIONAL_RECIPE_RUNTIME_SENTINEL;
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
import { createIndexedDbRepository } from "../../../adapters/storage/indexeddb/indexeddb-repository.ts";
|
||||
|
||||
export const composedWithoutProjectSelection = createIndexedDbRepository;
|
||||
@@ -0,0 +1,3 @@
|
||||
export const store = createStore({
|
||||
serverState: [{ id: "copied-from-query-cache" }],
|
||||
});
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
import { initialize } from "@launchdarkly/client-sdk";
|
||||
|
||||
export const leakedVendor = initialize;
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export function createOwnedWebSocket(endpoint: string): WebSocket {
|
||||
return new WebSocket(endpoint, "realtime.v1");
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
export async function readOwnedPushSubscription(
|
||||
registration: ServiceWorkerRegistration,
|
||||
): Promise<PushSubscription | null> {
|
||||
return registration.pushManager.getSubscription();
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
import { createWebSocketConnection } from "../../../adapters/realtime/websocket/websocket-connection.ts";
|
||||
|
||||
export const incorrectlyComposed = createWebSocketConnection;
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
export function createRouteOwnedSocket(endpoint: string): WebSocket {
|
||||
setInterval(() => undefined, 1_000);
|
||||
return new WebSocket(endpoint);
|
||||
}
|
||||
@@ -0,0 +1,225 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"cases": [
|
||||
{
|
||||
"id": "ordering-only",
|
||||
"expected": "none",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": {
|
||||
"A": { "path": "/a", "tags": ["one", "two"] },
|
||||
"B": { "path": "/b", "tags": ["three"] }
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"registries": [
|
||||
{
|
||||
"rows": {
|
||||
"B": { "tags": ["three"], "path": "/b" },
|
||||
"A": { "tags": ["two", "one"], "path": "/a" }
|
||||
},
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"registryId": "FE-REG-TEST"
|
||||
}
|
||||
],
|
||||
"schemaVersion": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "row-addition",
|
||||
"expected": "additive",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/a" } }
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": {
|
||||
"A": { "path": "/a" },
|
||||
"B": { "path": "/b" }
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "behavior-change",
|
||||
"expected": "behavior-change",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/a", "owner": "one" } }
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/a", "owner": "two" } }
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "row-removal",
|
||||
"expected": "breaking",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": {
|
||||
"A": { "path": "/a" },
|
||||
"B": { "path": "/b" }
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/a" } }
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "field-type-narrowing",
|
||||
"expected": "breaking",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "limit": 10 } }
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "limit": "10" } }
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "route-path-change",
|
||||
"expected": "breaking",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/before" } }
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/after" } }
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "registry-contract-narrowing",
|
||||
"expected": "breaking",
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": {
|
||||
"breakingFields": ["path"],
|
||||
"allowedValues": { "kind": ["one", "two"] }
|
||||
},
|
||||
"rows": { "A": { "path": "/a", "kind": "one" } }
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": {
|
||||
"breakingFields": ["path"],
|
||||
"allowedValues": { "kind": ["one"] }
|
||||
},
|
||||
"rows": { "A": { "path": "/a", "kind": "one" } }
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"breakingEvidence": {
|
||||
"before": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/before" } }
|
||||
}
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"schemaVersion": 2,
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FE-REG-TEST",
|
||||
"contract": { "breakingFields": ["path"] },
|
||||
"rows": { "A": { "path": "/after" } }
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"tamperedApproval": {
|
||||
"snapshot": {
|
||||
"schemaVersion": 2,
|
||||
"registries": []
|
||||
},
|
||||
"approval": {
|
||||
"schemaVersion": 1,
|
||||
"snapshotDigest": "tampered",
|
||||
"owner": "fixture-owner",
|
||||
"approvedAt": "2026-07-26T00:00:00.000Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"snapshotDigest": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"owner": "negative-fixture",
|
||||
"approvedAt": "2026-07-26T00:00:00.000Z"
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"sourceDirectories": [],
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FIXTURE-SOURCE",
|
||||
"path": "tests/fixtures/registry/forbidden/invalid-registry.ts",
|
||||
"exportName": "INVALID_REGISTRY",
|
||||
"owner": "fixture",
|
||||
"requiredFields": ["id", "target"],
|
||||
"uniqueFields": ["id"],
|
||||
"references": [
|
||||
{
|
||||
"field": "target",
|
||||
"registryId": "FIXTURE-TARGET",
|
||||
"targetField": "id"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"registryId": "FIXTURE-TARGET",
|
||||
"path": "tests/fixtures/registry/forbidden/invalid-registry.ts",
|
||||
"exportName": "TARGET_REGISTRY",
|
||||
"owner": "fixture",
|
||||
"requiredFields": ["id"],
|
||||
"uniqueFields": ["id"]
|
||||
}
|
||||
],
|
||||
"compatibilityImpact": {
|
||||
"allowed": ["none", "additive", "behavior-change", "breaking"],
|
||||
"current": "breaking"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
type InvalidRow = Readonly<{
|
||||
id: string;
|
||||
target?: string;
|
||||
}>;
|
||||
|
||||
export const INVALID_REGISTRY: Record<string, InvalidRow> = {
|
||||
FIRST: { id: "duplicate", target: "missing" },
|
||||
SECOND: { id: "duplicate" },
|
||||
};
|
||||
|
||||
export const TARGET_REGISTRY = {
|
||||
KNOWN: { id: "known" },
|
||||
} as const;
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"sourceDirectories": [],
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FIXTURE-DUPLICATE-INVALIDATION-EDGES",
|
||||
"path": "tests/fixtures/registry/invalidation/registries.ts",
|
||||
"exportName": "DUPLICATE_INVALIDATION_REGISTRY",
|
||||
"rowsPath": "edges",
|
||||
"rowKeyFields": [
|
||||
"topicId",
|
||||
"namespace.namespaceId",
|
||||
"namespace.namespaceVersion"
|
||||
],
|
||||
"owner": "fixture",
|
||||
"requiredFields": [
|
||||
"topicId",
|
||||
"namespace.namespaceId",
|
||||
"namespace.namespaceVersion"
|
||||
],
|
||||
"fieldTypes": {
|
||||
"topicId": "string",
|
||||
"namespace.namespaceId": "string",
|
||||
"namespace.namespaceVersion": "integer"
|
||||
},
|
||||
"uniqueFieldSets": [
|
||||
[
|
||||
"topicId",
|
||||
"namespace.namespaceId",
|
||||
"namespace.namespaceVersion"
|
||||
]
|
||||
],
|
||||
"breakingFields": [
|
||||
"topicId",
|
||||
"namespace.namespaceId",
|
||||
"namespace.namespaceVersion"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"sourceDirectories": [],
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "FIXTURE-INVALIDATION-EDGES",
|
||||
"path": "tests/fixtures/registry/invalidation/registries.ts",
|
||||
"exportName": "INVALIDATION_REGISTRY",
|
||||
"rowsPath": "edges",
|
||||
"rowKeyFields": [
|
||||
"topicId",
|
||||
"namespace.namespaceId",
|
||||
"namespace.namespaceVersion"
|
||||
],
|
||||
"owner": "fixture",
|
||||
"requiredFields": [
|
||||
"topicId",
|
||||
"namespace.namespaceId",
|
||||
"namespace.namespaceVersion"
|
||||
],
|
||||
"fieldTypes": {
|
||||
"topicId": "string",
|
||||
"namespace.namespaceId": "string",
|
||||
"namespace.namespaceVersion": "integer"
|
||||
},
|
||||
"uniqueFieldSets": [
|
||||
[
|
||||
"topicId",
|
||||
"namespace.namespaceId",
|
||||
"namespace.namespaceVersion"
|
||||
]
|
||||
],
|
||||
"snapshotProjection": {
|
||||
"singletonRowKey": "invalidation-graph",
|
||||
"canonicalArrayKeyFields": {
|
||||
"topics": ["$value"],
|
||||
"namespaces": ["namespaceId", "namespaceVersion"],
|
||||
"edges": [
|
||||
"topicId",
|
||||
"namespace.namespaceId",
|
||||
"namespace.namespaceVersion"
|
||||
]
|
||||
}
|
||||
},
|
||||
"breakingFields": ["topics", "namespaces", "edges"]
|
||||
},
|
||||
{
|
||||
"registryId": "FIXTURE-INVALIDATION-VERSIONS",
|
||||
"path": "tests/fixtures/registry/invalidation/registries.ts",
|
||||
"exportName": "INVALIDATION_TOPIC_VERSIONS",
|
||||
"rowKeyFields": ["topicId"],
|
||||
"owner": "fixture",
|
||||
"requiredFields": ["topicId", "topicVersion"],
|
||||
"fieldTypes": {
|
||||
"topicId": "string",
|
||||
"topicVersion": "integer"
|
||||
},
|
||||
"uniqueFields": ["topicId"],
|
||||
"breakingFields": ["topicId", "topicVersion"]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
const namespace = Object.freeze({
|
||||
namespaceId: "orders",
|
||||
namespaceVersion: 1,
|
||||
});
|
||||
const reverseNamespace = Object.freeze({
|
||||
namespaceId: "qinv.fixture.changed",
|
||||
namespaceVersion: 1,
|
||||
});
|
||||
|
||||
export const INVALIDATION_REGISTRY = Object.freeze({
|
||||
topics: Object.freeze(["qinv.fixture.changed", "orders"]),
|
||||
namespaces: Object.freeze([namespace, reverseNamespace]),
|
||||
edges: Object.freeze([
|
||||
Object.freeze({
|
||||
topicId: "qinv.fixture.changed",
|
||||
namespace,
|
||||
}),
|
||||
Object.freeze({
|
||||
topicId: "orders",
|
||||
namespace: reverseNamespace,
|
||||
}),
|
||||
]),
|
||||
});
|
||||
|
||||
export const INVALIDATION_TOPIC_VERSIONS = Object.freeze([
|
||||
Object.freeze({
|
||||
topicId: "qinv.fixture.changed",
|
||||
topicVersion: 1,
|
||||
}),
|
||||
Object.freeze({
|
||||
topicId: "orders",
|
||||
topicVersion: 1,
|
||||
}),
|
||||
]);
|
||||
|
||||
export const DUPLICATE_INVALIDATION_REGISTRY = Object.freeze({
|
||||
topics: INVALIDATION_REGISTRY.topics,
|
||||
namespaces: INVALIDATION_REGISTRY.namespaces,
|
||||
edges: Object.freeze([
|
||||
INVALIDATION_REGISTRY.edges[0],
|
||||
Object.freeze({
|
||||
topicId: "qinv.fixture.changed",
|
||||
namespace: Object.freeze({
|
||||
namespaceId: "orders",
|
||||
namespaceVersion: 1,
|
||||
}),
|
||||
}),
|
||||
]),
|
||||
});
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"sourceDirectories": [],
|
||||
"registries": [
|
||||
{
|
||||
"registryId": "ROUTES",
|
||||
"path": "tests/fixtures/registry/routes/invalid-routes.ts",
|
||||
"exportName": "INVALID_ROUTES",
|
||||
"owner": "fixture",
|
||||
"requiredFields": [
|
||||
"routeId",
|
||||
"path",
|
||||
"paramsSchema",
|
||||
"searchSchema",
|
||||
"loadingSurface",
|
||||
"errorSurface",
|
||||
"chunkId"
|
||||
],
|
||||
"uniqueFields": ["routeId", "path", "chunkId"],
|
||||
"allowedValues": {
|
||||
"paramsSchema": [null],
|
||||
"searchSchema": [null],
|
||||
"loadingSurface": ["app-shell"],
|
||||
"errorSurface": ["route-boundary"],
|
||||
"chunkId": ["route-home"]
|
||||
},
|
||||
"references": [
|
||||
{
|
||||
"field": "routeId",
|
||||
"registryId": "RUNTIME",
|
||||
"targetField": "routeId"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"registryId": "RUNTIME",
|
||||
"path": "tests/fixtures/registry/routes/invalid-routes.ts",
|
||||
"exportName": "INVALID_RUNTIME",
|
||||
"owner": "fixture",
|
||||
"requiredFields": ["routeId", "moduleId", "paramsCodec", "searchCodec"],
|
||||
"allowedValues": {
|
||||
"moduleId": ["home-page"],
|
||||
"paramsCodec": ["none"],
|
||||
"searchCodec": ["none"]
|
||||
},
|
||||
"references": [
|
||||
{
|
||||
"field": "routeId",
|
||||
"registryId": "ROUTES",
|
||||
"targetField": "routeId"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"compatibilityImpact": {
|
||||
"allowed": ["none", "additive", "behavior-change", "breaking"],
|
||||
"current": "breaking"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
export const INVALID_ROUTES = {
|
||||
FIRST: {
|
||||
routeId: "DUPLICATE",
|
||||
path: "/duplicate",
|
||||
paramsSchema: "UnknownParams",
|
||||
searchSchema: "UnknownSearch",
|
||||
loadingSurface: "unknown-loading",
|
||||
errorSurface: "unknown-error",
|
||||
chunkId: "unknown-chunk",
|
||||
},
|
||||
SECOND: {
|
||||
routeId: "DUPLICATE",
|
||||
path: "/duplicate",
|
||||
paramsSchema: null,
|
||||
searchSchema: null,
|
||||
loadingSurface: "app-shell",
|
||||
errorSurface: "route-boundary",
|
||||
chunkId: "route-home",
|
||||
},
|
||||
};
|
||||
|
||||
export const INVALID_RUNTIME = {
|
||||
ORPHAN: {
|
||||
routeId: "ORPHAN",
|
||||
moduleId: "unknown-module",
|
||||
paramsCodec: "none",
|
||||
searchCodec: "none",
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,3 @@
|
||||
export function Fixture({ value }: { value: string }) {
|
||||
return <span>{value}</span>;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export function SafeTextFixture({ value }: Readonly<{ value: string }>) {
|
||||
return <p>{value}</p>;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
export function attachScript(source: string) {
|
||||
const script = document.createElement("script");
|
||||
script.src = source;
|
||||
document.head.append(script);
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
export const execute = (source: string) => eval(source);
|
||||
@@ -0,0 +1,3 @@
|
||||
export function RawHtml({ value }: { value: string }) {
|
||||
return <div dangerouslySetInnerHTML={{ __html: value }} />;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export function UnsafeHtmlFixture({ value }: Readonly<{ value: string }>) {
|
||||
return <div dangerouslySetInnerHTML={{ __html: value }} />;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export const client_secret = "fixture-only-secret-value";
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"trackedRoots": [
|
||||
"tests/fixtures/security/secret-detection/forbidden"
|
||||
],
|
||||
"generatedRoots": [],
|
||||
"includedPaths": [
|
||||
"tests/fixtures/security/secret-detection/forbidden"
|
||||
],
|
||||
"excludedPaths": [],
|
||||
"allowlist": []
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"client_secret": "synthetic-forbidden-secret"
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
(globalThis as typeof globalThis & { password: string }).password =
|
||||
"synthetic-built-secret";
|
||||
@@ -0,0 +1 @@
|
||||
export const leaked = "AKIAABCDEFGHIJKLMNOP";
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"trackedRoots": [
|
||||
"tests/fixtures/security/secret-detection/forbidden"
|
||||
],
|
||||
"generatedRoots": [],
|
||||
"includedPaths": [
|
||||
"tests/fixtures/security/secret-detection/misspelled"
|
||||
],
|
||||
"excludedPaths": [],
|
||||
"allowlist": []
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
test("false visual pass", async ({ page }) => {
|
||||
await expect(page).toHaveScreenshot({
|
||||
mask: [page.locator("body")]
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1 @@
|
||||
test.skip("unowned indefinite quarantine", async () => {});
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"HTTP_SCENARIO_EXPECTATIONS": [
|
||||
{
|
||||
"executionId": "FIXTURE_OPERATION::declared-and-executed",
|
||||
"operationId": "FIXTURE_OPERATION",
|
||||
"scenarioId": "declared-and-executed",
|
||||
"expected": {
|
||||
"status": { "attempts": [200], "final": 200 },
|
||||
"outcome": { "kind": "SUCCESS", "detail": null },
|
||||
"effect": { "outcome": "NOT_APPLICABLE", "observer": "NOT_APPLICABLE" },
|
||||
"retry": { "count": 0, "reasons": [] },
|
||||
"fetch": { "count": 1, "observerAttempts": 1, "agrees": true },
|
||||
"media": { "attempts": ["application/json"], "final": "application/json" },
|
||||
"body": { "attempts": [{ "disposition": "FULLY_READ_WITHIN_BOUND", "pulledBytes": 2, "ceiling": 16 }] },
|
||||
"scope": { "start": "CURRENT", "end": "CURRENT", "signal": "ACTIVE", "cancellationOwner": "NONE" }
|
||||
},
|
||||
"testDeadlineOverrideMs": null
|
||||
},
|
||||
{
|
||||
"executionId": "FIXTURE_OPERATION::declared-but-unexecuted",
|
||||
"operationId": "FIXTURE_OPERATION",
|
||||
"scenarioId": "declared-but-unexecuted",
|
||||
"expected": {
|
||||
"status": { "attempts": [503], "final": 503 },
|
||||
"outcome": { "kind": "PROBLEM", "detail": "503" },
|
||||
"effect": { "outcome": "NOT_APPLIED", "observer": "NOT_STARTED" },
|
||||
"retry": { "count": 0, "reasons": [] },
|
||||
"fetch": { "count": 1, "observerAttempts": 1, "agrees": true },
|
||||
"media": { "attempts": ["application/json"], "final": "application/json" },
|
||||
"body": { "attempts": [{ "disposition": "FULLY_READ_WITHIN_BOUND", "pulledBytes": 64, "ceiling": 65536 }] },
|
||||
"scope": { "start": "CURRENT", "end": "CURRENT", "signal": "ACTIVE", "cancellationOwner": "NONE" }
|
||||
},
|
||||
"testDeadlineOverrideMs": null
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"scenarioCatalogs": [
|
||||
{
|
||||
"owner": "fixture-owner",
|
||||
"path": "tests/fixtures/test-evidence/scenarios/catalog.json",
|
||||
"expectationExport": "HTTP_SCENARIO_EXPECTATIONS",
|
||||
"receiptPath": "tests/fixtures/test-evidence/scenarios/receipt.json",
|
||||
"receiptSchemaVersion": 1
|
||||
}
|
||||
],
|
||||
"sourceContracts": []
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"catalogDigest": "sha256:87779c47f0042025edf18e148f86c29e5d219f7010cf7effeb69d29059420841",
|
||||
"catalogTotal": 2,
|
||||
"executedIds": [
|
||||
"FIXTURE_OPERATION::declared-and-executed",
|
||||
"FIXTURE_OPERATION::declared-but-unexecuted"
|
||||
],
|
||||
"rows": [
|
||||
{
|
||||
"executionId": "FIXTURE_OPERATION::declared-and-executed",
|
||||
"expected": {
|
||||
"status": { "attempts": [200], "final": 200 },
|
||||
"outcome": { "kind": "SUCCESS", "detail": null },
|
||||
"effect": { "outcome": "NOT_APPLICABLE", "observer": "NOT_APPLICABLE" },
|
||||
"retry": { "count": 1, "reasons": ["HTTP_503"] },
|
||||
"fetch": { "count": 1, "observerAttempts": 1, "agrees": false },
|
||||
"media": { "attempts": ["application/json"], "final": "application/json" },
|
||||
"body": { "attempts": [{ "disposition": "FULLY_READ_WITHIN_BOUND", "pulledBytes": 2, "ceiling": 16 }] },
|
||||
"scope": { "start": "CURRENT", "end": "CURRENT", "signal": "ACTIVE", "cancellationOwner": "NONE" }
|
||||
},
|
||||
"observed": {
|
||||
"status": { "attempts": [200], "final": 200 },
|
||||
"outcome": { "kind": "SUCCESS", "detail": null },
|
||||
"effect": { "outcome": "NOT_APPLICABLE", "observer": "NOT_APPLICABLE" },
|
||||
"retry": { "count": 1, "reasons": ["HTTP_503"] },
|
||||
"fetch": { "count": 1, "observerAttempts": 1, "agrees": false },
|
||||
"media": { "attempts": ["application/json"], "final": "application/json" },
|
||||
"body": { "attempts": [{ "disposition": "FULLY_READ_WITHIN_BOUND", "pulledBytes": 2, "ceiling": 16 }] },
|
||||
"scope": { "start": "CURRENT", "end": "CURRENT", "signal": "ACTIVE", "cancellationOwner": "NONE" }
|
||||
},
|
||||
"testDeadlineOverrideMs": null
|
||||
},
|
||||
{
|
||||
"executionId": "FIXTURE_OPERATION::declared-but-unexecuted",
|
||||
"expected": {
|
||||
"status": { "attempts": [503], "final": 503 },
|
||||
"outcome": { "kind": "PROBLEM", "detail": "503" },
|
||||
"effect": { "outcome": "NOT_APPLIED", "observer": "NOT_STARTED" },
|
||||
"retry": { "count": 0, "reasons": [] },
|
||||
"fetch": { "count": 1, "observerAttempts": 1, "agrees": true },
|
||||
"media": { "attempts": ["application/json"], "final": "application/json" },
|
||||
"body": { "attempts": [{ "disposition": "FULLY_READ_WITHIN_BOUND", "pulledBytes": 64, "ceiling": 65536 }] },
|
||||
"scope": { "start": "CURRENT", "end": "CURRENT", "signal": "ACTIVE", "cancellationOwner": "NONE" }
|
||||
},
|
||||
"observed": {
|
||||
"status": { "attempts": [503], "final": 503 },
|
||||
"outcome": { "kind": "PROBLEM", "detail": "503" },
|
||||
"effect": { "outcome": "NOT_APPLIED", "observer": "NOT_STARTED" },
|
||||
"retry": { "count": 0, "reasons": [] },
|
||||
"fetch": { "count": 1, "observerAttempts": 1, "agrees": true },
|
||||
"media": { "attempts": ["application/json"], "final": "application/json" },
|
||||
"body": { "attempts": [{ "disposition": "FULLY_READ_WITHIN_BOUND", "pulledBytes": 64, "ceiling": 65536 }] },
|
||||
"scope": { "start": "CURRENT", "end": "CURRENT", "signal": "ACTIVE", "cancellationOwner": "NONE" }
|
||||
},
|
||||
"testDeadlineOverrideMs": null
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"catalogDigest": "sha256:87779c47f0042025edf18e148f86c29e5d219f7010cf7effeb69d29059420841",
|
||||
"catalogTotal": 2,
|
||||
"executedIds": ["FIXTURE_OPERATION::declared-and-executed"],
|
||||
"rows": [
|
||||
{
|
||||
"executionId": "FIXTURE_OPERATION::declared-and-executed",
|
||||
"expected": {
|
||||
"status": { "attempts": [200], "final": 200 },
|
||||
"outcome": { "kind": "SUCCESS", "detail": null },
|
||||
"effect": { "outcome": "NOT_APPLICABLE", "observer": "NOT_APPLICABLE" },
|
||||
"retry": { "count": 0, "reasons": [] },
|
||||
"fetch": { "count": 1, "observerAttempts": 1, "agrees": true },
|
||||
"media": { "attempts": ["application/json"], "final": "application/json" },
|
||||
"body": { "attempts": [{ "disposition": "FULLY_READ_WITHIN_BOUND", "pulledBytes": 2, "ceiling": 16 }] },
|
||||
"scope": { "start": "CURRENT", "end": "CURRENT", "signal": "ACTIVE", "cancellationOwner": "NONE" }
|
||||
},
|
||||
"observed": {
|
||||
"status": { "attempts": [200], "final": 200 },
|
||||
"outcome": { "kind": "SUCCESS", "detail": null },
|
||||
"effect": { "outcome": "NOT_APPLICABLE", "observer": "NOT_APPLICABLE" },
|
||||
"retry": { "count": 0, "reasons": [] },
|
||||
"fetch": { "count": 1, "observerAttempts": 1, "agrees": true },
|
||||
"media": { "attempts": ["application/json"], "final": "application/json" },
|
||||
"body": { "attempts": [{ "disposition": "FULLY_READ_WITHIN_BOUND", "pulledBytes": 2, "ceiling": 16 }] },
|
||||
"scope": { "start": "CURRENT", "end": "CURRENT", "signal": "ACTIVE", "cancellationOwner": "NONE" }
|
||||
},
|
||||
"testDeadlineOverrideMs": null
|
||||
}
|
||||
]
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user