Skip to content

Commit

Permalink
test: add test for changes
Browse files Browse the repository at this point in the history
  • Loading branch information
sahsisunny committed Nov 10, 2023
1 parent c24ede7 commit f93eb2c
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 4 deletions.
62 changes: 62 additions & 0 deletions __tests__/pages/[redirect].test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { render, screen, act, fireEvent } from '@testing-library/react';
import Redirect from '../../src/pages/[redirect]/index';
import { useRouter } from 'next/router';

jest.mock('next/router', () => ({
useRouter: jest.fn(),
}));

describe('Redirect Component', () => {
const mockRouterPush = jest.fn();
const mockRouterReplace = jest.fn();
const mockRouter = {
push: mockRouterPush,
replace: mockRouterReplace,
query: { redirect: 'ffdsfds' },
};

beforeEach(() => {
(useRouter as jest.Mock).mockReturnValue(mockRouter);
});

test('renders the Redirect component with countdown and Go button', () => {
render(<Redirect />);
const goButton = screen.getByText('Go');

expect(goButton).toBeInTheDocument();
});

test('redirects to original URL on Go button click', async () => {
render(<Redirect />);
const goButton = screen.getByText('Go');
await act(async () => {
fireEvent.click(goButton);
});
expect(mockRouterPush).toHaveBeenCalled();
});

test('redirects to original URL on Go button click', async () => {
render(<Redirect />);
const goButton = screen.getByText('Go');
await act(async () => {
fireEvent.click(goButton);
});
expect(mockRouterPush).toHaveBeenCalled();
});

test('show tooltip on Go button click', async () => {
render(<Redirect />);
const goButton = screen.getByText('Go');
await act(async () => {
fireEvent.click(goButton);
});
expect(mockRouterPush).toHaveBeenCalled();
});

test('fetchOriginalUrl function returns original URL', async () => {
const mockFetchOriginalUrl = jest.fn();
mockFetchOriginalUrl.mockReturnValue('https://www.google.com');
const originalUrl = await mockFetchOriginalUrl();
expect(originalUrl).toBe('https://www.google.com');
});
});
39 changes: 39 additions & 0 deletions __tests__/utils/fetchOriginalUrl.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import fetchMock from 'jest-fetch-mock';
import fetchOriginalUrl from '../../src/utils/fetchOriginalUrl';
import { act } from 'react-dom/test-utils';

fetchMock.enableMocks();

describe('fetchOriginalUrl', () => {
const shortUrlCode = '442d39ac';
const originalUrl = 'https://github.com/Real-Dev-Squad/tiny-site-frontend/pull/40';

it('fetches and displays the original URL if the response is successful', async () => {
const responseData = { url: { OriginalUrl: originalUrl } };

fetchMock.mockResponse(JSON.stringify(responseData), { status: 200 });

await act(async () => {
const result = await fetchOriginalUrl(shortUrlCode);
expect(result).toEqual(originalUrl);
});
});

it('returns null if the response is not successful', async () => {
fetchMock.mockResponse('', { status: 404 });

await act(async () => {
const result = await fetchOriginalUrl(shortUrlCode);
expect(result).toBeNull();
});
});

it('handles errors gracefully', async () => {
fetchMock.mockReject(new Error('Network error'));

await act(async () => {
const result = await fetchOriginalUrl(shortUrlCode);
expect(result).toBeNull();
});
});
});
4 changes: 2 additions & 2 deletions src/pages/[slug]/index.tsx → src/pages/[redirect]/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import fetchOriginalUrl from '@/utils/fetchOriginalUrl ';
import fetchOriginalUrl from '@/utils/fetchOriginalUrl';
import RedirectIcon from '../../../public/assets/icons/redirect';
import { useState, useEffect } from 'react';
import { useRouter } from 'next/router';
Expand All @@ -7,7 +7,7 @@ import { TINY_SITE } from '@/constants/url';

const Redirect = () => {
const router = useRouter();
const { slug: shortUrlCode } = router.query as { slug: string };
const { redirect: shortUrlCode } = router.query as { redirect: string };
const [originalUrl, setOriginalUrl] = useState('');
const [timer, setTimer] = useState(5);
const [isPremiumUser, setIsPremiumUser] = useState(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ async function fetchOriginalUrl(shortUrlCode: string): Promise<string | null> {
const data = (await response.json()) as UrlResponseTypes;
return data.url.OriginalUrl;
} else {
return null; // Return null if the response is not ok
return null;
}
} catch (error) {
console.error('Error fetching original URL:', error);
return null; // Return null in case of an error
return null;
}
}

Expand Down

0 comments on commit f93eb2c

Please sign in to comment.