aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/organisms/project-overview/project-overview.test.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/organisms/project-overview/project-overview.test.tsx')
-rw-r--r--src/components/organisms/project-overview/project-overview.test.tsx127
1 files changed, 127 insertions, 0 deletions
diff --git a/src/components/organisms/project-overview/project-overview.test.tsx b/src/components/organisms/project-overview/project-overview.test.tsx
new file mode 100644
index 0000000..6234368
--- /dev/null
+++ b/src/components/organisms/project-overview/project-overview.test.tsx
@@ -0,0 +1,127 @@
+import { describe, expect, it } from '@jest/globals';
+import NextImage from 'next/image';
+import { render, screen as rtlScreen } from '../../../../tests/utils';
+import { type ProjectMeta, ProjectOverview } from './project-overview';
+
+describe('ProjectOverview', () => {
+ it('can render a meta for the creation date', () => {
+ const meta = {
+ creationDate: '2023-11-01',
+ } satisfies Partial<ProjectMeta>;
+
+ render(<ProjectOverview meta={meta} name="quo" />);
+
+ expect(rtlScreen.getByRole('term')).toHaveTextContent('Created on:');
+ });
+
+ it('can render a meta for the update date', () => {
+ const meta = {
+ lastUpdateDate: '2023-11-02',
+ } satisfies Partial<ProjectMeta>;
+
+ render(<ProjectOverview meta={meta} name="quo" />);
+
+ expect(rtlScreen.getByRole('term')).toHaveTextContent('Updated on:');
+ });
+
+ it('can render a meta for the license', () => {
+ const meta = {
+ license: 'MIT',
+ } satisfies Partial<ProjectMeta>;
+
+ render(<ProjectOverview meta={meta} name="quo" />);
+
+ expect(rtlScreen.getByRole('term')).toHaveTextContent('License:');
+ expect(rtlScreen.getByRole('definition')).toHaveTextContent(meta.license);
+ });
+
+ it('can render a meta for the popularity', () => {
+ const meta = {
+ popularity: { count: 5 },
+ } satisfies Partial<ProjectMeta>;
+
+ render(<ProjectOverview meta={meta} name="quo" />);
+
+ expect(rtlScreen.getByRole('term')).toHaveTextContent('Popularity:');
+ expect(rtlScreen.getByRole('definition')).toHaveTextContent(
+ `${meta.popularity.count} stars`
+ );
+ });
+
+ it('can render a meta for the popularity with a link', () => {
+ const meta = {
+ popularity: { count: 3, url: '#popularity' },
+ } satisfies Partial<ProjectMeta>;
+
+ render(<ProjectOverview meta={meta} name="quo" />);
+
+ expect(rtlScreen.getByRole('term')).toHaveTextContent('Popularity:');
+ expect(rtlScreen.getByRole('definition')).toHaveTextContent(
+ `${meta.popularity.count} stars`
+ );
+ expect(rtlScreen.getByRole('link')).toHaveAttribute(
+ 'href',
+ meta.popularity.url
+ );
+ });
+
+ it('can render a meta for the technologies', () => {
+ const meta = {
+ technologies: ['Javascript', 'React'],
+ } satisfies Partial<ProjectMeta>;
+
+ render(<ProjectOverview meta={meta} name="quo" />);
+
+ expect(rtlScreen.getByRole('term')).toHaveTextContent('Technologies:');
+ expect(rtlScreen.getAllByRole('definition')).toHaveLength(
+ meta.technologies.length
+ );
+ });
+
+ it('can render a meta for the repositories', () => {
+ const meta = {
+ repositories: [{ id: 'Github', label: 'Github', url: '#github' }],
+ } satisfies Partial<ProjectMeta>;
+
+ render(<ProjectOverview meta={meta} name="quo" />);
+
+ expect(rtlScreen.getByRole('term')).toHaveTextContent('Repositories:');
+ expect(rtlScreen.getAllByRole('definition')).toHaveLength(
+ meta.repositories.length
+ );
+ expect(
+ rtlScreen.getByRole('link', { name: meta.repositories[0].label })
+ ).toHaveAttribute('href', meta.repositories[0].url);
+ });
+
+ it('can render a cover', () => {
+ const altTxt = 'id qui nisi';
+
+ render(
+ <ProjectOverview
+ cover={
+ <NextImage
+ alt={altTxt}
+ height={480}
+ src="https://picsum.photos/640/480"
+ width={640}
+ />
+ }
+ meta={{}}
+ name="qui"
+ />
+ );
+
+ expect(rtlScreen.getByRole('img')).toHaveAccessibleName(altTxt);
+ });
+
+ it('does not render a meta if the key is undefined', () => {
+ const meta = {
+ creationDate: undefined,
+ } satisfies Partial<ProjectMeta>;
+
+ render(<ProjectOverview meta={meta} name="quo" />);
+
+ expect(rtlScreen.queryByRole('term')).not.toBeInTheDocument();
+ });
+});