feat: ProjectCard — add url prop, RichText description, open link in new tab

This commit is contained in:
Ilia Mashkov
2026-05-18 20:45:54 +03:00
parent 2ae5ae3210
commit ac9ee0eb4e
2 changed files with 22 additions and 7 deletions
@@ -6,6 +6,7 @@ const DEFAULT_PROPS = {
year: '2024',
description: 'A cool project description',
tags: ['React', 'Node'],
url: 'https://example.com',
};
describe('ProjectCard', () => {
@@ -33,7 +34,17 @@ describe('ProjectCard', () => {
it('renders the View Project button', () => {
render(<ProjectCard {...DEFAULT_PROPS} />);
expect(screen.getByRole('button', { name: /view project/i })).toBeInTheDocument();
expect(screen.getByRole('link', { name: /view project/i })).toBeInTheDocument();
});
it('View Project link points to the project url', () => {
render(<ProjectCard {...DEFAULT_PROPS} />);
expect(screen.getByRole('link', { name: /view project/i })).toHaveAttribute('href', 'https://example.com');
});
it('View Project link opens in a new tab', () => {
render(<ProjectCard {...DEFAULT_PROPS} />);
expect(screen.getByRole('link', { name: /view project/i })).toHaveAttribute('target', '_blank');
});
});
@@ -51,7 +62,7 @@ describe('ProjectCard', () => {
it('View Project button is inside the sidebar column', () => {
render(<ProjectCard {...DEFAULT_PROPS} />);
const btn = screen.getByRole('button', { name: /view project/i });
const btn = screen.getByRole('link', { name: /view project/i });
expect(btn.closest('.brutal-border-sidebar')).toBeInTheDocument();
});
@@ -86,7 +97,7 @@ describe('ProjectCard', () => {
it('View Project button uses sm size', () => {
render(<ProjectCard {...DEFAULT_PROPS} />);
const btn = screen.getByRole('button', { name: /view project/i });
const btn = screen.getByRole('link', { name: /view project/i });
expect(btn).toHaveClass('px-4', 'py-2', 'text-sm');
});