diff --git a/packages/frontend-design-poc/package.json b/packages/frontend-design-poc/package.json
index 50ae4711c..2f8b79b19 100644
--- a/packages/frontend-design-poc/package.json
+++ b/packages/frontend-design-poc/package.json
@@ -16,7 +16,8 @@
"@digdir/design-system-tokens": "^0.12.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
- "react-query": "^3.39.3"
+ "react-query": "^3.39.3",
+ "react-router-dom": "^6.16.0"
},
"devDependencies": {
"@testing-library/react": "^14.1.2",
diff --git a/packages/frontend-design-poc/src/App.tsx b/packages/frontend-design-poc/src/App.tsx
index 7bf21744a..d14215c8a 100644
--- a/packages/frontend-design-poc/src/App.tsx
+++ b/packages/frontend-design-poc/src/App.tsx
@@ -1,15 +1,20 @@
-import { QueryClient, QueryClientProvider } from 'react-query';
-import { HelloWorld } from './components/HelloWorld/HelloWorld.tsx';
-import styles from './app.module.css'
-
-const queryClient = new QueryClient();
+import { Route, Routes } from "react-router-dom";
+import { HelloWorld } from "./components/HelloWorld";
+import { PageNotFound } from "./pages/PageNotFound";
+import { PageLayout } from "./pages/PageLayout";
+import styles from "./app.module.css";
function App() {
- return (
-
- );
+ return (
+
+
+ }>
+ } />
+ } />
+
+
+
+ );
}
export default App;
diff --git a/packages/frontend-design-poc/src/app.spec.tsx b/packages/frontend-design-poc/src/app.spec.tsx
index 11f207b26..3b29c06d3 100644
--- a/packages/frontend-design-poc/src/app.spec.tsx
+++ b/packages/frontend-design-poc/src/app.spec.tsx
@@ -1,11 +1,16 @@
-import { describe, it, expect } from 'vitest';
-import { render } from '@testing-library/react';
-import App from './App.tsx';
+import { beforeAll, describe, expect, it } from "vitest";
+import { customRender } from "../utils/test-utils.tsx";
+import App from "./App.tsx";
+import { server } from "./mocks/node.ts";
-describe('App Smoke Test', () => {
- it('renders without crashing', () => {
- const { getByTestId } = render();
- const appElement = getByTestId('app');
+describe("App Smoke Test", async () => {
+ beforeAll(async () => {
+ server.listen();
+ });
+
+ it("renders without crashing", () => {
+ const { getByRole } = customRender();
+ const appElement = getByRole("main");
expect(appElement).toBeTruthy();
});
});
diff --git a/packages/frontend-design-poc/src/components/HelloWorld/HelloWorld.tsx b/packages/frontend-design-poc/src/components/HelloWorld/HelloWorld.tsx
index c178b1b46..0bf59c474 100644
--- a/packages/frontend-design-poc/src/components/HelloWorld/HelloWorld.tsx
+++ b/packages/frontend-design-poc/src/components/HelloWorld/HelloWorld.tsx
@@ -1,11 +1,12 @@
-import styles from './helloWorld.module.css';
-import { useQuery } from 'react-query';
-import { getUser } from '../../api/queries.ts';
+import styles from "./helloWorld.module.css";
+import { useQuery } from "react-query";
+import { getUser } from "../../api/queries.ts";
export const HelloWorld = () => {
- const { isLoading, data } = useQuery('user', getUser);
-
- return (
+ const { isLoading, data } = useQuery("user", getUser);
+ return (
+
{isLoading ? Loading ... : Hello, {data?.name}!
}
- );
-};
\ No newline at end of file
+
+ );
+};
diff --git a/packages/frontend-design-poc/src/components/HelloWorld/index.ts b/packages/frontend-design-poc/src/components/HelloWorld/index.ts
new file mode 100644
index 000000000..3986fb573
--- /dev/null
+++ b/packages/frontend-design-poc/src/components/HelloWorld/index.ts
@@ -0,0 +1 @@
+export { HelloWorld } from "./HelloWorld.tsx";
diff --git a/packages/frontend-design-poc/src/main.tsx b/packages/frontend-design-poc/src/main.tsx
index 52e20f29f..05659cbd6 100644
--- a/packages/frontend-design-poc/src/main.tsx
+++ b/packages/frontend-design-poc/src/main.tsx
@@ -1,17 +1,27 @@
-import React from 'react';
-import ReactDOM from 'react-dom/client';
-import App from './App.tsx';
+import React from "react";
+import ReactDOM from "react-dom/client";
+import App from "./App.tsx";
+import { QueryClient, QueryClientProvider } from "react-query";
+import { BrowserRouter } from "react-router-dom";
async function enableMocking() {
- if (import.meta.env.MODE === 'development') {
- const { worker } = await import('./mocks/browser');
+ if (import.meta.env.MODE === "development") {
+ const { worker } = await import("./mocks/browser");
return worker.start();
}
}
+const root = ReactDOM.createRoot(document.getElementById("root")!);
+const queryClient = new QueryClient();
+
enableMocking().then(() => {
- ReactDOM.createRoot(document.getElementById('root')!).render(
-
- );
+ root.render(
+
+
+
+
+
+
+ ,
+ );
});
-
diff --git a/packages/frontend-design-poc/src/mocks/node.ts b/packages/frontend-design-poc/src/mocks/node.ts
new file mode 100644
index 000000000..abbedd7eb
--- /dev/null
+++ b/packages/frontend-design-poc/src/mocks/node.ts
@@ -0,0 +1,4 @@
+import { setupServer } from 'msw/node'
+import { handlers } from './handlers'
+
+export const server = setupServer(...handlers)
\ No newline at end of file
diff --git a/packages/frontend-design-poc/src/pages/PageLayout/PageLayout.tsx b/packages/frontend-design-poc/src/pages/PageLayout/PageLayout.tsx
new file mode 100644
index 000000000..69c9839af
--- /dev/null
+++ b/packages/frontend-design-poc/src/pages/PageLayout/PageLayout.tsx
@@ -0,0 +1,10 @@
+import { Outlet } from "react-router-dom";
+
+export const PageLayout = () => {
+ return (
+ <>
+
+
+ >
+ );
+};
diff --git a/packages/frontend-design-poc/src/pages/PageLayout/index.ts b/packages/frontend-design-poc/src/pages/PageLayout/index.ts
new file mode 100644
index 000000000..5d502a22e
--- /dev/null
+++ b/packages/frontend-design-poc/src/pages/PageLayout/index.ts
@@ -0,0 +1 @@
+export { PageLayout } from './PageLayout';
diff --git a/packages/frontend-design-poc/src/pages/PageNotFound/PageNotFound.tsx b/packages/frontend-design-poc/src/pages/PageNotFound/PageNotFound.tsx
new file mode 100644
index 000000000..0c0cda680
--- /dev/null
+++ b/packages/frontend-design-poc/src/pages/PageNotFound/PageNotFound.tsx
@@ -0,0 +1,7 @@
+export const PageNotFound = () => {
+ return (
+
+
Ooops... page not found :(
+
+ );
+};
diff --git a/packages/frontend-design-poc/src/pages/PageNotFound/index.ts b/packages/frontend-design-poc/src/pages/PageNotFound/index.ts
new file mode 100644
index 000000000..1cfb87272
--- /dev/null
+++ b/packages/frontend-design-poc/src/pages/PageNotFound/index.ts
@@ -0,0 +1 @@
+export { PageNotFound } from "./PageNotFound.tsx";
diff --git a/packages/frontend-design-poc/utils/test-utils.tsx b/packages/frontend-design-poc/utils/test-utils.tsx
new file mode 100644
index 000000000..c57fed221
--- /dev/null
+++ b/packages/frontend-design-poc/utils/test-utils.tsx
@@ -0,0 +1,33 @@
+import { QueryClient, QueryClientProvider } from "react-query";
+import { ReactElement } from "react";
+import { MemoryRouter } from "react-router-dom";
+import { render, RenderOptions } from "@testing-library/react";
+
+interface IExtendedRenderOptions extends RenderOptions {
+ initialEntries?: string[];
+}
+
+const queryClient = new QueryClient({
+ defaultOptions: {
+ queries: {
+ retry: false,
+ },
+ },
+});
+
+export const customRender = (
+ ui: ReactElement,
+ options?: Omit,
+) => {
+ const Wrapper = ({ children }: { children: React.ReactNode }) => {
+ return (
+
+
+ {children}
+
+
+ );
+ };
+
+ return render(ui, { wrapper: Wrapper, ...options });
+};
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e3631b549..19820dd74 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -286,6 +286,9 @@ importers:
react-query:
specifier: ^3.39.3
version: 3.39.3(react-dom@18.2.0)(react@18.2.0)
+ react-router-dom:
+ specifier: ^6.16.0
+ version: 6.21.3(react-dom@18.2.0)(react@18.2.0)
devDependencies:
'@testing-library/react':
specifier: ^14.1.2