1.1.2Updated a month ago
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>
  );
};