70bf21e064
Deploy (to testing) and Test Playground Preview Worker / Deploy Playground Preview Worker (testing) (push) Has been skipped
Deploy Workers Shared Staging / Deploy Workers Shared Staging (push) Failing after 0s
Prerelease / build (push) Has been skipped
Handle Changesets / Handle Changesets (push) Has been cancelled
Semgrep OSS scan / semgrep-oss (push) Has been cancelled
67 lines
2.2 KiB
TypeScript
67 lines
2.2 KiB
TypeScript
import Worker, {
|
|
AssetWorkerInner,
|
|
} from "@cloudflare/workers-shared/asset-worker";
|
|
import { normalizeConfiguration } from "@cloudflare/workers-shared/asset-worker/src/configuration";
|
|
import { getAssetWithMetadataFromKV } from "@cloudflare/workers-shared/asset-worker/src/utils/kv";
|
|
import { SELF } from "cloudflare:test";
|
|
import { afterEach, beforeEach, describe, it, vi } from "vitest";
|
|
import type { AssetMetadata } from "@cloudflare/workers-shared/asset-worker/src/utils/kv";
|
|
|
|
const IncomingRequest = Request<unknown, IncomingRequestCfProperties>;
|
|
|
|
vi.mock("@cloudflare/workers-shared/asset-worker/src/utils/kv.ts");
|
|
vi.mock("@cloudflare/workers-shared/asset-worker/src/configuration");
|
|
|
|
describe("[Asset Worker] loopback", () => {
|
|
beforeEach(async () => {
|
|
vi.mocked(getAssetWithMetadataFromKV).mockImplementation(
|
|
() =>
|
|
Promise.resolve({
|
|
value: "no-op",
|
|
metadata: {
|
|
contentType: "application/octet-stream",
|
|
},
|
|
}) as unknown as Promise<
|
|
KVNamespaceGetWithMetadataResult<ReadableStream, AssetMetadata>
|
|
>
|
|
);
|
|
|
|
const originalNormalizeConfiguration = (
|
|
await vi.importActual<
|
|
typeof import("@cloudflare/workers-shared/asset-worker/src/configuration")
|
|
>("@cloudflare/workers-shared/asset-worker/src/configuration")
|
|
).normalizeConfiguration;
|
|
|
|
vi.mocked(normalizeConfiguration).mockImplementation(() => ({
|
|
...originalNormalizeConfiguration({}),
|
|
html_handling: "none",
|
|
not_found_handling: "none",
|
|
}));
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.restoreAllMocks();
|
|
});
|
|
|
|
it("uses AssetWorkerInner for fetch path resolution", async ({ expect }) => {
|
|
const outerExists = vi
|
|
.spyOn(Worker.prototype, "unstable_exists")
|
|
.mockResolvedValue(null);
|
|
const innerExists = vi
|
|
.spyOn(AssetWorkerInner.prototype, "unstable_exists")
|
|
.mockResolvedValue("/file.bin");
|
|
|
|
const request = new IncomingRequest("http://example.com/file.bin");
|
|
const response = await SELF.fetch(request);
|
|
|
|
expect(response.status).toBe(200);
|
|
expect(outerExists).not.toHaveBeenCalled();
|
|
expect(innerExists).toHaveBeenCalledTimes(1);
|
|
expect(getAssetWithMetadataFromKV).toHaveBeenCalledTimes(1);
|
|
expect(getAssetWithMetadataFromKV).toHaveBeenCalledWith(
|
|
undefined,
|
|
"/file.bin"
|
|
);
|
|
});
|
|
});
|