diff --git a/frontend/public/politica-de-privacidade-candidate.pdf b/frontend/public/politica-de-privacidade-candidate.pdf
new file mode 100644
index 0000000..a3e1719
Binary files /dev/null and b/frontend/public/politica-de-privacidade-candidate.pdf differ
diff --git a/frontend/public/termos-de-uso-candidate.pdf b/frontend/public/termos-de-uso-candidate.pdf
new file mode 100644
index 0000000..e04464a
Binary files /dev/null and b/frontend/public/termos-de-uso-candidate.pdf differ
diff --git a/frontend/src/app/AppRoutes.tsx b/frontend/src/app/AppRoutes.tsx
index 9a7e28d..23d0db0 100644
--- a/frontend/src/app/AppRoutes.tsx
+++ b/frontend/src/app/AppRoutes.tsx
@@ -4,6 +4,8 @@ import AuthCallbackPage from "@/domains/auth/presentation/pages/AuthCallbackPage
import LoginPage from "@/domains/auth/presentation/pages/LoginPage";
import RegisterPage from "@/domains/auth/presentation/pages/RegisterPage";
import LandingPage from "@/domains/marketing/presentation/pages/LandingPage";
+import PrivacyPolicyPage from "@/domains/marketing/presentation/pages/PrivacyPolicyPage";
+import TermsOfUsePage from "@/domains/marketing/presentation/pages/TermsOfUsePage";
import NewDashboardPage from "@/domains/new_dashboard/NewDashboardPage";
import NewDashboardLayout from "@/domains/new_dashboard/layout";
import Loading from "@/shared/ui/Loading";
@@ -65,6 +67,11 @@ export function AppRoutes() {
}
/>
} />
+ }
+ />
+ } />
}
diff --git a/frontend/src/domains/marketing/presentation/components/Footer.tsx b/frontend/src/domains/marketing/presentation/components/Footer.tsx
index 4b48414..127af8f 100644
--- a/frontend/src/domains/marketing/presentation/components/Footer.tsx
+++ b/frontend/src/domains/marketing/presentation/components/Footer.tsx
@@ -1,6 +1,7 @@
import { Github } from "lucide-react";
import LogoWhite from "@/shared/assets/logo-painel-vagas.svg";
import LogoBlack from "@/shared/assets/black.svg";
+import { Link } from "react-router-dom";
export function Footer() {
return (
@@ -79,20 +80,20 @@ export function Footer() {
diff --git a/frontend/src/domains/marketing/presentation/components/LegalDocumentPage.tsx b/frontend/src/domains/marketing/presentation/components/LegalDocumentPage.tsx
new file mode 100644
index 0000000..d67df10
--- /dev/null
+++ b/frontend/src/domains/marketing/presentation/components/LegalDocumentPage.tsx
@@ -0,0 +1,87 @@
+import { ExternalLink, FileText } from "lucide-react";
+import { Link } from "react-router-dom";
+import { Footer } from "./Footer";
+import { Navbar } from "./Navbar";
+
+type LegalDocumentPageProps = {
+ title: string;
+ description: string;
+ documentUrl: string;
+};
+
+export function LegalDocumentPage({
+ title,
+ description,
+ documentUrl,
+}: LegalDocumentPageProps) {
+ return (
+
+ );
+}
diff --git a/frontend/src/domains/marketing/presentation/pages/PrivacyPolicyPage.tsx b/frontend/src/domains/marketing/presentation/pages/PrivacyPolicyPage.tsx
new file mode 100644
index 0000000..68e7fd2
--- /dev/null
+++ b/frontend/src/domains/marketing/presentation/pages/PrivacyPolicyPage.tsx
@@ -0,0 +1,13 @@
+import { LegalDocumentPage } from "@/domains/marketing/presentation/components/LegalDocumentPage";
+
+const privacyPolicyUrl = "/politica-de-privacidade-candidate.pdf";
+
+export default function PrivacyPolicyPage() {
+ return (
+
+ );
+}
diff --git a/frontend/src/domains/marketing/presentation/pages/TermsOfUsePage.tsx b/frontend/src/domains/marketing/presentation/pages/TermsOfUsePage.tsx
new file mode 100644
index 0000000..d8304a4
--- /dev/null
+++ b/frontend/src/domains/marketing/presentation/pages/TermsOfUsePage.tsx
@@ -0,0 +1,13 @@
+import { LegalDocumentPage } from "@/domains/marketing/presentation/components/LegalDocumentPage";
+
+const termsOfUseUrl = "/termos-de-uso-candidate.pdf";
+
+export default function TermsOfUsePage() {
+ return (
+
+ );
+}
diff --git a/frontend/tests/unit/components/Footer.test.tsx b/frontend/tests/unit/components/Footer.test.tsx
index bbfa1de..e10ce7e 100644
--- a/frontend/tests/unit/components/Footer.test.tsx
+++ b/frontend/tests/unit/components/Footer.test.tsx
@@ -1,27 +1,38 @@
import { render, screen } from "@testing-library/react";
+import { MemoryRouter } from "react-router-dom";
import { describe, expect, it } from "vitest";
import { Footer } from "../../../src/domains/marketing/presentation/components/Footer";
describe("Footer", () => {
+ function renderFooter() {
+ return render(
+
+
+ ,
+ );
+ }
+
it("não exibe o link inativo de Contato", () => {
- render();
+ renderFooter();
expect(screen.queryByRole("link", { name: "Contato" })).toBeNull();
});
it("mantém os demais links da seção Legal", () => {
- render();
+ renderFooter();
- expect(
- screen.getByRole("link", { name: "Termos de Uso" }),
- ).toBeInTheDocument();
- expect(
- screen.getByRole("link", { name: "Privacidade" }),
- ).toBeInTheDocument();
+ expect(screen.getByRole("link", { name: "Termos de Uso" })).toHaveAttribute(
+ "href",
+ "/termos-de-uso",
+ );
+ expect(screen.getByRole("link", { name: "Privacidade" })).toHaveAttribute(
+ "href",
+ "/politica-de-privacidade",
+ );
});
it("direciona o ícone do GitHub para o repositório do projeto", () => {
- render();
+ renderFooter();
expect(
screen.getByRole("link", { name: /repositório do projeto no github/i }),