import { assertEquals } from "@std/assert";
import { Testbed } from "../testbed.ts";
import * as node_path from 'node:path';
import { HandleRequest } from "../../modules/handle_request.ts";
import type { VP_Request } from "../../modules/vp_request.ts";
Testbed('Handling Requests', ({ Setup, Test }) => {
Setup(() => {
Deno.env.set('ENV', 'TEST');
})
Test('When a valid URL is used, we get the expected file contents and a status of 200', async () => {
const test_file_contents = Deno.readTextFileSync(node_path.join(import.meta.dirname!, '../../test_packages/@test_namespace/testpackage/2.1/mod.ts'));
const response = MockRequest('/@test_namespace/testpackage/mod.ts') as Response;
assertEquals(await response.text(), test_file_contents);
assertEquals(response.status, 200);
});
Test('When a valid URL with version number is used, we get the expected file contents and a status of 200', async () => {
const test_file_contents = Deno.readTextFileSync(node_path.join(import.meta.dirname!, '../../test_packages/@test_namespace/testpackage/1.0/mod.ts'));
const response = MockRequest('/@test_namespace/testpackage@1.0/mod.ts') as Response;
assertEquals(await response.text(), test_file_contents);
assertEquals(response.status, 200);
});
Test('When an invalid URL is used, we get a status of 404', () => {
const response = MockRequest('/fakepackage/mod.ts');
assertEquals(response, 404);
});
Test(`When a request doesn't have method "GET", we get a status of 404`, () => {
const response = MockRequest('/@test_namespace/testpackage/mod.ts', { method: 'POST' });
assertEquals(response, 404);
});
})
interface I_MockRequestOptions {
method?: 'GET' | 'POST'
}
const MockRequest = (path: string, { method = 'GET' }: I_MockRequestOptions = {}) => {
return HandleRequest(
{
url: node_path.join('http://mock.viapak.com/', path),
method
} as VP_Request,
{} as Deno.ServeHandlerInfo<Deno.NetAddr>
);
};