diff --git a/src/components/footer/footer.test.tsx b/src/components/footer/footer.test.tsx
new file mode 100644
index 0000000..7203aa7
--- /dev/null
+++ b/src/components/footer/footer.test.tsx
@@ -0,0 +1,26 @@
+import '@testing-library/jest-dom';
+import { render, screen } from '@testing-library/react';
+import React from 'react';
+import Footer from './footer';
+
+describe('Footer', () => {
+ it('should render footer title', () => {
+ render();
+ const footerTitle = screen.getByText('OpenBC', {
+ selector: '.footer__logo',
+ });
+ expect(footerTitle).toBeInTheDocument();
+ });
+
+ it('should render footer subtitle', () => {
+ render();
+
+ const footerLabel = screen.getByText(
+ 'Get the latest updates about OpenBC',
+ {
+ selector: '.footer__label',
+ }
+ );
+ expect(footerLabel).toBeInTheDocument();
+ });
+});
diff --git a/src/components/project-card/project-card.test.tsx b/src/components/project-card/project-card.test.tsx
new file mode 100644
index 0000000..65ff4e9
--- /dev/null
+++ b/src/components/project-card/project-card.test.tsx
@@ -0,0 +1,65 @@
+import Project from '@/components/project-card/project-card';
+import '@testing-library/jest-dom';
+import { render, screen } from '@testing-library/react';
+import React from 'react';
+
+describe('Project', () => {
+ const mockProjectData = {
+ title: 'Test Project',
+ description: 'Test Description',
+ links: [
+ {
+ title: 'GitHub',
+ url: 'https://github.com/example',
+ },
+ ],
+ languages: ['JavaScript', 'TypeScript'],
+ tools: ['React', 'Next.js'],
+ technologies: ['MUI', 'Jest'],
+ programAreas: ['Test Program Areas'],
+ };
+
+ it('should render project card with title and description', () => {
+ render();
+
+ const title = screen.getByText(mockProjectData.title);
+ const description = screen.getByText(mockProjectData.description);
+
+ expect(title).toBeInTheDocument();
+ expect(description).toBeInTheDocument();
+ });
+
+ it('should render languages, tools, technologies, and program areas', () => {
+ render();
+
+ const languages = screen.getByText('Languages');
+ const tools = screen.getByText('Tools');
+ const technologies = screen.getByText('Technologies');
+ const programAreas = screen.getByText('Program Areas');
+
+ expect(languages).toBeInTheDocument();
+ expect(tools).toBeInTheDocument();
+ expect(technologies).toBeInTheDocument();
+ expect(programAreas).toBeInTheDocument();
+ });
+
+ it('should render links with GitHub icon', () => {
+ render();
+
+ const links = screen.getByText('Links');
+ const githubIcon = screen.getByAltText('GitHub');
+
+ expect(links).toBeInTheDocument();
+ expect(githubIcon).toBeInTheDocument();
+ });
+
+ it('should handle missing props gracefully', () => {
+ render();
+
+ const title = screen.getByText('Test Project');
+ const description = screen.queryByText('Test Description');
+
+ expect(title).toBeInTheDocument();
+ expect(description).toBeNull();
+ });
+});