mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-11-13 12:13:42 +01:00
84 lines
2.7 KiB
TypeScript
84 lines
2.7 KiB
TypeScript
import type { HttpRequest, HttpResponse, HttpResponseEvent } from "@yaakapp-internal/models";
|
|
import { describe, expect, test } from "vite-plus/test";
|
|
import { cookieHeadersFromEvents, httpRequestToView, httpResponseToView } from "./httpViews";
|
|
|
|
function event(e: HttpResponseEvent["event"]): HttpResponseEvent {
|
|
return { event: e } as HttpResponseEvent;
|
|
}
|
|
|
|
describe("httpRequestToView", () => {
|
|
test("maps the request and reads its content type from the headers", () => {
|
|
const request = {
|
|
id: "rq_1",
|
|
method: "POST",
|
|
url: "https://yaak.app",
|
|
headers: [{ name: "content-type", value: "application/json", enabled: true }],
|
|
urlParameters: [{ name: "a", value: "1", enabled: true }],
|
|
bodyType: "application/json",
|
|
body: { text: "{}" },
|
|
} as unknown as HttpRequest;
|
|
|
|
expect(httpRequestToView(request)).toEqual({
|
|
id: "rq_1",
|
|
method: "POST",
|
|
url: "https://yaak.app",
|
|
headers: request.headers,
|
|
urlParameters: request.urlParameters,
|
|
bodyType: "application/json",
|
|
body: { text: "{}" },
|
|
contentType: "application/json",
|
|
auth: null,
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("httpResponseToView", () => {
|
|
test("keys state to the request and puts the stored time in UTC", () => {
|
|
const response = {
|
|
id: "rs_1",
|
|
requestId: "rq_1",
|
|
state: "closed",
|
|
status: 200,
|
|
statusReason: "OK",
|
|
url: "https://yaak.app",
|
|
headers: [{ name: "Content-Type", value: "text/plain" }],
|
|
requestHeaders: [],
|
|
contentLength: 10,
|
|
contentLengthCompressed: 4,
|
|
requestContentLength: 0,
|
|
createdAt: "2026-11-04T22:10:00.123",
|
|
elapsed: 30,
|
|
elapsedHeaders: 20,
|
|
elapsedDns: 5,
|
|
error: null,
|
|
remoteAddr: null,
|
|
version: "HTTP/1.1",
|
|
} as unknown as HttpResponse;
|
|
|
|
expect(httpResponseToView(response, undefined)).toMatchObject({
|
|
id: "rs_1",
|
|
ownerId: "rq_1",
|
|
contentType: "text/plain",
|
|
startedAt: "2026-11-04T22:10:00.123Z",
|
|
elapsedMs: 30,
|
|
elapsedHeadersMs: 20,
|
|
elapsedDnsMs: 5,
|
|
contentLengthCompressed: 4,
|
|
cookieHeaders: { sent: [], received: [] },
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("cookieHeadersFromEvents", () => {
|
|
test("collects Cookie headers sent and Set-Cookie headers received", () => {
|
|
const events = [
|
|
event({ type: "header_up", name: "Cookie", value: "a=1" }),
|
|
event({ type: "header_up", name: "Accept", value: "*/*" }),
|
|
event({ type: "header_down", name: "set-cookie", value: "b=2" }),
|
|
event({ type: "header_down", name: "Content-Type", value: "text/plain" }),
|
|
];
|
|
expect(cookieHeadersFromEvents(events)).toEqual({ sent: ["a=1"], received: ["b=2"] });
|
|
expect(cookieHeadersFromEvents(undefined)).toEqual({ sent: [], received: [] });
|
|
});
|
|
});
|