diff --git a/app/front-end/__tests__/Footer.test.tsx b/app/front-end/__tests__/Footer.test.tsx
new file mode 100644
index 00000000..ed082b2e
--- /dev/null
+++ b/app/front-end/__tests__/Footer.test.tsx
@@ -0,0 +1,42 @@
+/*
+ * Created on Mon Oct 30 2023
+ * Author: Connor Doman
+ */
+
+import "@testing-library/jest-dom";
+import { render, screen } from "@testing-library/react";
+import { Footer } from "@components/Footer";
+
+describe("Footer", () => {
+ it("matches snapshot", () => {
+ const wrapper = render();
+ expect(wrapper).toMatchSnapshot();
+ });
+
+ it("contains an HTML footer element", () => {
+ render();
+ expect(screen.getByRole("contentinfo")).toBeInTheDocument();
+ });
+
+ it("renders the site logo", () => {
+ render();
+ const logo = screen.getByRole("link", { name: "PrivacyPal logo" });
+ expect(logo).toBeInTheDocument();
+ expect(logo).toHaveAttribute("href", "/");
+ });
+
+ it("renders the site links", () => {
+ render();
+ expect(screen.getByRole("link", { name: "Welcome" })).toBeInTheDocument();
+ expect(screen.getByRole("link", { name: "About Us" })).toBeInTheDocument();
+ expect(screen.getByRole("link", { name: "Sign Up" })).toBeInTheDocument();
+ expect(screen.getByRole("link", { name: "Log in" })).toBeInTheDocument();
+ });
+
+ it("renders social media links", () => {
+ render();
+ expect(screen.getByRole("link", { name: "GitHub logo" })).toBeInTheDocument();
+ expect(screen.getByRole("link", { name: "YouTube logo" })).toBeInTheDocument();
+ expect(screen.getByRole("link", { name: "mail icon" })).toBeInTheDocument();
+ });
+});
diff --git a/app/front-end/__tests__/Header.test.tsx b/app/front-end/__tests__/Header.test.tsx
new file mode 100644
index 00000000..80bbab45
--- /dev/null
+++ b/app/front-end/__tests__/Header.test.tsx
@@ -0,0 +1,30 @@
+/*
+ * Created on Mon Oct 30 2023
+ * Author: Connor Doman
+ */
+
+import "@testing-library/jest-dom";
+import { render, screen } from "@testing-library/react";
+import { Header } from "@components/Header";
+
+describe("Header", () => {
+ it("matches snapshot", () => {
+ const wrapper = render();
+ expect(wrapper).toMatchSnapshot();
+ });
+
+ it("contains an HTML header element", () => {
+ render();
+ expect(screen.getByRole("banner")).toBeInTheDocument();
+ });
+
+ it("renders the header", () => {
+ render();
+ expect(screen.getByRole("heading", { name: "A SOLUTION TO ABSOLUTE PRIVACY." })).toBeInTheDocument();
+ });
+
+ it("renders the header image", () => {
+ render();
+ expect(screen.getByRole("img", { name: "logo" })).toBeInTheDocument();
+ });
+});
diff --git a/app/front-end/__tests__/__snapshots__/Footer.test.tsx.snap b/app/front-end/__tests__/__snapshots__/Footer.test.tsx.snap
new file mode 100644
index 00000000..559da153
--- /dev/null
+++ b/app/front-end/__tests__/__snapshots__/Footer.test.tsx.snap
@@ -0,0 +1,284 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Footer matches snapshot 1`] = `
+{
+ "asFragment": [Function],
+ "baseElement":
+
+
+
+ ,
+ "container":
+
+
,
+ "debug": [Function],
+ "findAllByAltText": [Function],
+ "findAllByDisplayValue": [Function],
+ "findAllByLabelText": [Function],
+ "findAllByPlaceholderText": [Function],
+ "findAllByRole": [Function],
+ "findAllByTestId": [Function],
+ "findAllByText": [Function],
+ "findAllByTitle": [Function],
+ "findByAltText": [Function],
+ "findByDisplayValue": [Function],
+ "findByLabelText": [Function],
+ "findByPlaceholderText": [Function],
+ "findByRole": [Function],
+ "findByTestId": [Function],
+ "findByText": [Function],
+ "findByTitle": [Function],
+ "getAllByAltText": [Function],
+ "getAllByDisplayValue": [Function],
+ "getAllByLabelText": [Function],
+ "getAllByPlaceholderText": [Function],
+ "getAllByRole": [Function],
+ "getAllByTestId": [Function],
+ "getAllByText": [Function],
+ "getAllByTitle": [Function],
+ "getByAltText": [Function],
+ "getByDisplayValue": [Function],
+ "getByLabelText": [Function],
+ "getByPlaceholderText": [Function],
+ "getByRole": [Function],
+ "getByTestId": [Function],
+ "getByText": [Function],
+ "getByTitle": [Function],
+ "queryAllByAltText": [Function],
+ "queryAllByDisplayValue": [Function],
+ "queryAllByLabelText": [Function],
+ "queryAllByPlaceholderText": [Function],
+ "queryAllByRole": [Function],
+ "queryAllByTestId": [Function],
+ "queryAllByText": [Function],
+ "queryAllByTitle": [Function],
+ "queryByAltText": [Function],
+ "queryByDisplayValue": [Function],
+ "queryByLabelText": [Function],
+ "queryByPlaceholderText": [Function],
+ "queryByRole": [Function],
+ "queryByTestId": [Function],
+ "queryByText": [Function],
+ "queryByTitle": [Function],
+ "rerender": [Function],
+ "unmount": [Function],
+}
+`;
diff --git a/app/front-end/__tests__/__snapshots__/Header.test.tsx.snap b/app/front-end/__tests__/__snapshots__/Header.test.tsx.snap
new file mode 100644
index 00000000..d2f5bac5
--- /dev/null
+++ b/app/front-end/__tests__/__snapshots__/Header.test.tsx.snap
@@ -0,0 +1,128 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Header matches snapshot 1`] = `
+{
+ "asFragment": [Function],
+ "baseElement":
+
+
+
+ ,
+ "container":
+
+
,
+ "debug": [Function],
+ "findAllByAltText": [Function],
+ "findAllByDisplayValue": [Function],
+ "findAllByLabelText": [Function],
+ "findAllByPlaceholderText": [Function],
+ "findAllByRole": [Function],
+ "findAllByTestId": [Function],
+ "findAllByText": [Function],
+ "findAllByTitle": [Function],
+ "findByAltText": [Function],
+ "findByDisplayValue": [Function],
+ "findByLabelText": [Function],
+ "findByPlaceholderText": [Function],
+ "findByRole": [Function],
+ "findByTestId": [Function],
+ "findByText": [Function],
+ "findByTitle": [Function],
+ "getAllByAltText": [Function],
+ "getAllByDisplayValue": [Function],
+ "getAllByLabelText": [Function],
+ "getAllByPlaceholderText": [Function],
+ "getAllByRole": [Function],
+ "getAllByTestId": [Function],
+ "getAllByText": [Function],
+ "getAllByTitle": [Function],
+ "getByAltText": [Function],
+ "getByDisplayValue": [Function],
+ "getByLabelText": [Function],
+ "getByPlaceholderText": [Function],
+ "getByRole": [Function],
+ "getByTestId": [Function],
+ "getByText": [Function],
+ "getByTitle": [Function],
+ "queryAllByAltText": [Function],
+ "queryAllByDisplayValue": [Function],
+ "queryAllByLabelText": [Function],
+ "queryAllByPlaceholderText": [Function],
+ "queryAllByRole": [Function],
+ "queryAllByTestId": [Function],
+ "queryAllByText": [Function],
+ "queryAllByTitle": [Function],
+ "queryByAltText": [Function],
+ "queryByDisplayValue": [Function],
+ "queryByLabelText": [Function],
+ "queryByPlaceholderText": [Function],
+ "queryByRole": [Function],
+ "queryByTestId": [Function],
+ "queryByText": [Function],
+ "queryByTitle": [Function],
+ "rerender": [Function],
+ "unmount": [Function],
+}
+`;
diff --git a/app/front-end/__tests__/config.lib.test.ts b/app/front-end/__tests__/config.lib.test.ts
new file mode 100644
index 00000000..6f77a564
--- /dev/null
+++ b/app/front-end/__tests__/config.lib.test.ts
@@ -0,0 +1,21 @@
+/*
+ * Created on Mon Oct 30 2023
+ * Author: Connor Doman
+ */
+
+import { extractUserConfig } from "@lib/config";
+
+describe("Config", () => {
+ it("contains a user config", () => {
+ const config = extractUserConfig();
+ const userArray = config.users;
+ expect(typeof userArray).toEqual("object");
+ expect(userArray.length).toBeGreaterThan(0);
+ });
+
+ it("contains a user config with an email", () => {
+ const config = extractUserConfig();
+ const userArray = config.users;
+ expect(userArray[0].email).toBeDefined();
+ });
+});
diff --git a/app/front-end/__tests__/dummy-authenticator.test.ts b/app/front-end/__tests__/dummy-authenticator.auth.test.ts
similarity index 100%
rename from app/front-end/__tests__/dummy-authenticator.test.ts
rename to app/front-end/__tests__/dummy-authenticator.auth.test.ts
diff --git a/app/front-end/__tests__/time.test.ts b/app/front-end/__tests__/time.lib.test.ts
similarity index 100%
rename from app/front-end/__tests__/time.test.ts
rename to app/front-end/__tests__/time.lib.test.ts
diff --git a/app/front-end/src/app/api/session/route.ts b/app/front-end/src/app/api/session/route.ts
deleted file mode 100644
index a57ef5a1..00000000
--- a/app/front-end/src/app/api/session/route.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Created on Sun Oct 22 2023
- * Author: Connor Doman
- */
-
-import { getServerSession } from "next-auth";
-import { privacyPalAuthOptions } from "@lib/auth";
-import { NextResponse } from "next/server";
-
-export async function GET(req: Request) {
- const session = await getServerSession({ req, ...privacyPalAuthOptions });
-
- return NextResponse.json({
- authenticated: !!session,
- session,
- });
-}
diff --git a/app/front-end/src/app/login/page.tsx b/app/front-end/src/app/login/page.tsx
index 5b77098b..8e020d50 100644
--- a/app/front-end/src/app/login/page.tsx
+++ b/app/front-end/src/app/login/page.tsx
@@ -5,12 +5,7 @@
"use client";
import LoginFlow from "@components/auth/LoginFlow";
-import { PalLoginForm } from "@components/auth/LoginForm";
-import { PalTextInput } from "@components/form/PalTextInput";
-import { Button } from "@patternfly/react-core";
-import { signOut, useSession } from "next-auth/react";
-import Link from "next/link";
-import React, { useState } from "react";
+import React from "react";
export default function LoginPage() {
return (
diff --git a/app/front-end/src/app/page.tsx b/app/front-end/src/app/page.tsx
index 4410d4fa..89924f21 100644
--- a/app/front-end/src/app/page.tsx
+++ b/app/front-end/src/app/page.tsx
@@ -1,6 +1,5 @@
import Link from "next/link";
import styles from "./Home.module.css";
-import { Title } from "@patternfly/react-core";
export default function Home() {
return (
diff --git a/app/front-end/src/app/upload/page.tsx b/app/front-end/src/app/upload/page.tsx
deleted file mode 100644
index 1dc2c7fe..00000000
--- a/app/front-end/src/app/upload/page.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Created on Thu Oct 26 2023
- * Author: Connor Doman
- */
-
-import { TestUploadUI } from "@components/TestUploadUI";
-
-export default function Page() {
- return (
-
-
Upload
-
-
- );
-}
diff --git a/app/front-end/src/components/Footer.tsx b/app/front-end/src/components/Footer.tsx
index 2e435deb..078b2a1c 100644
--- a/app/front-end/src/components/Footer.tsx
+++ b/app/front-end/src/components/Footer.tsx
@@ -16,7 +16,7 @@ export const Footer = () => {