1
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
2
/* eslint-disable @typescript-eslint/no-unsafe-call */
3
import { type Router } from "next/router";
4
import type { UrlObject } from "url";
5
import { type LocationMock } from "@jedmao/location";
7
type PartialRouter = Partial<Router>;
9
export const BASE_URL = "https://langfuse.com";
12
* A Router to be used for testing which provides the bare minimum needed
13
* for the useQueryParam(s) hook and NextAdapter to work.
15
export class TestRouter implements PartialRouter {
18
private currentUrl = "";
19
private history: string[] = [];
21
constructor(private locationMock: LocationMock) {}
23
replace = (url: string | UrlObject) => {
24
// eslint-disable-next-line @typescript-eslint/no-base-to-string, @typescript-eslint/restrict-template-expressions
25
this.locationMock.assign(`${BASE_URL}${url}`);
26
this.currentUrl = TestRouter.getURLString(url);
27
this.locationMock.assign(`${BASE_URL}${this.currentUrl}`);
28
return Promise.resolve(true);
31
push = (url: string | UrlObject) => {
32
this.history.push(this.currentUrl);
33
this.currentUrl = TestRouter.getURLString(url);
34
this.locationMock.assign(`${BASE_URL}${this.currentUrl}`);
35
return Promise.resolve(true);
38
setIsReady = (isReady: boolean) => {
39
this.isReady = isReady;
46
static getURLString(url: string | UrlObject): string {
47
if (typeof url === "string") {
50
return `${url.pathname}${url.search}`;
53
getParams(): URLSearchParams {
54
return new URL(`${BASE_URL}${this.currentUrl}`).searchParams;