Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(cli/fetch): response constructor default properties #6650

Merged
merged 1 commit into from Jul 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 3 additions & 3 deletions cli/js/web/fetch.ts
Expand Up @@ -34,14 +34,14 @@ export class Response extends Body.Body implements domTypes.Response {
const extraInit = responseData.get(init) || {};
let { type = "default", url = "" } = extraInit;

let status = (Number(init.status) || 0) ?? 200;
let status = init.status === undefined ? 200 : Number(init.status || 0);
let statusText = init.statusText ?? "";
let headers =
init.headers instanceof Headers
? init.headers
: new Headers(init.headers);

if (init.status && (status < 200 || status > 599)) {
if (init.status !== undefined && (status < 200 || status > 599)) {
throw new RangeError(
`The status provided (${init.status}) is outside the range [200, 599]`
);
Expand Down Expand Up @@ -117,7 +117,7 @@ export class Response extends Body.Body implements domTypes.Response {
this.statusText = statusText;
this.status = extraInit.status || status;
this.headers = headers;
this.redirected = extraInit.redirected;
this.redirected = extraInit.redirected || false;
this.type = type;
}

Expand Down
74 changes: 41 additions & 33 deletions cli/tests/unit/fetch_test.ts
Expand Up @@ -851,42 +851,50 @@ unitTest(
}
);

unitTest(
{ perms: { net: true } },
function fetchResponseConstructorNullBody(): void {
const nullBodyStatus = [204, 205, 304];
unitTest(function fetchResponseConstructorNullBody(): void {
const nullBodyStatus = [204, 205, 304];

for (const status of nullBodyStatus) {
try {
new Response("deno", { status });
fail("Response with null body status cannot have body");
} catch (e) {
assert(e instanceof TypeError);
assertEquals(
e.message,
"Response with null body status cannot have body"
);
}
for (const status of nullBodyStatus) {
try {
new Response("deno", { status });
fail("Response with null body status cannot have body");
} catch (e) {
assert(e instanceof TypeError);
assertEquals(
e.message,
"Response with null body status cannot have body"
);
}
}
);
});

unitTest(
{ perms: { net: true } },
function fetchResponseConstructorInvalidStatus(): void {
const invalidStatus = [101, 600, 199];

for (const status of invalidStatus) {
try {
new Response("deno", { status });
fail("Invalid status");
} catch (e) {
assert(e instanceof RangeError);
assertEquals(
e.message,
`The status provided (${status}) is outside the range [200, 599]`
);
}
unitTest(function fetchResponseConstructorInvalidStatus(): void {
const invalidStatus = [101, 600, 199, null, "", NaN];

for (const status of invalidStatus) {
try {
// deno-lint-ignore ban-ts-comment
// @ts-ignore
new Response("deno", { status });
fail(`Invalid status: ${status}`);
} catch (e) {
assert(e instanceof RangeError);
assertEquals(
e.message,
`The status provided (${status}) is outside the range [200, 599]`
);
}
}
);
});

unitTest(function fetchResponseEmptyConstructor(): void {
const response = new Response();
assertEquals(response.status, 200);
assertEquals(response.body, null);
assertEquals(response.type, "default");
assertEquals(response.url, "");
assertEquals(response.redirected, false);
assertEquals(response.ok, true);
assertEquals(response.bodyUsed, false);
assertEquals([...response.headers], []);
});