gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/support-us/support-us.test.tsx · nightly
Source
1 7a20f06 Mardin 2y ago import { render, screen, fireEvent } from '@testing-library/react';
2 7a20f06 Mardin 2y ago import { describe, it, expect, vi } from 'vitest';
3 4cebd65 Mardin 2y ago import { SupportUs } from "@marzneshin/features/support-us";
4 7a20f06 Mardin 2y ago import { useSupportUs as originalUseSupportUs } from './use-support-us';
5 7a20f06 Mardin 2y ago import '@testing-library/jest-dom';
6 7a20f06 Mardin 2y ago
7 7a20f06 Mardin 2y ago vi.mock('./use-support-us', () => ({
8 7a20f06 Mardin 2y ago useSupportUs: vi.fn(),
9 7a20f06 Mardin 2y ago }));
10 7a20f06 Mardin 2y ago
11 7a20f06 Mardin 2y ago const useSupportUs = originalUseSupportUs as unknown as ReturnType<typeof vi.fn>;
12 7a20f06 Mardin 2y ago
13 7a20f06 Mardin 2y ago describe('SupportUs Component', () => {
14 bef7670 Mardin 2y ago const donationLink = "https://localhost.com/donation";
15 bef7670 Mardin 2y ago
16 7a20f06 Mardin 2y ago it('renders the SupportUs component when localStorage is true', () => {
17 7a20f06 Mardin 2y ago useSupportUs.mockReturnValue([true, vi.fn()]);
18 7a20f06 Mardin 2y ago
19 bef7670 Mardin 2y ago render(<SupportUs donationLink={donationLink} variant="local-storage" />);
20 7a20f06 Mardin 2y ago
21 7a20f06 Mardin 2y ago expect(screen.getByText(/support-us.title/i)).toBeInTheDocument();
22 7a20f06 Mardin 2y ago expect(screen.getByText(/support-us.desc/i)).toBeInTheDocument();
23 7a20f06 Mardin 2y ago expect(screen.getByRole('button', { name: /Close/i })).toBeInTheDocument();
24 7a20f06 Mardin 2y ago });
25 7a20f06 Mardin 2y ago
26 7a20f06 Mardin 2y ago it('does not render the SupportUs component when localStorage is false', () => {
27 7a20f06 Mardin 2y ago useSupportUs.mockReturnValue([false, vi.fn()]);
28 7a20f06 Mardin 2y ago
29 bef7670 Mardin 2y ago render(<SupportUs donationLink={donationLink} variant="status" />);
30 7a20f06 Mardin 2y ago
31 7a20f06 Mardin 2y ago expect(screen.queryByText(/support-us.title/i)).not.toBeInTheDocument();
32 7a20f06 Mardin 2y ago });
33 7a20f06 Mardin 2y ago
34 7a20f06 Mardin 2y ago it('closes the SupportUs card when the close button is clicked in local-storage mode', () => {
35 7a20f06 Mardin 2y ago const setSupportUsOpen = vi.fn();
36 7a20f06 Mardin 2y ago useSupportUs.mockReturnValue([true, setSupportUsOpen]);
37 7a20f06 Mardin 2y ago
38 bef7670 Mardin 2y ago render(<SupportUs donationLink={donationLink} variant="local-storage" />);
39 7a20f06 Mardin 2y ago
40 7a20f06 Mardin 2y ago const closeButton = screen.getByRole('button', { name: /Close/i });
41 7a20f06 Mardin 2y ago fireEvent.mouseDown(closeButton);
42 7a20f06 Mardin 2y ago
43 7a20f06 Mardin 2y ago expect(setSupportUsOpen).toHaveBeenCalledWith(false);
44 7a20f06 Mardin 2y ago });
45 7a20f06 Mardin 2y ago
46 7a20f06 Mardin 2y ago it('renders the SupportUs component in view mode without close button', () => {
47 bef7670 Mardin 2y ago render(<SupportUs donationLink={donationLink} variant="view" />);
48 7a20f06 Mardin 2y ago
49 7a20f06 Mardin 2y ago expect(screen.getByText(/support-us.title/i)).toBeInTheDocument();
50 7a20f06 Mardin 2y ago expect(screen.queryByRole('button', { name: /Close/i })).not.toBeInTheDocument();
51 7a20f06 Mardin 2y ago });
52 7a20f06 Mardin 2y ago
53 7a20f06 Mardin 2y ago it('redirects to the donation link when the donation button is clicked', () => {
54 7a20f06 Mardin 2y ago useSupportUs.mockReturnValue([true, vi.fn()]);
55 7a20f06 Mardin 2y ago
56 bef7670 Mardin 2y ago render(<SupportUs donationLink={donationLink} variant="local-storage" />);
57 7a20f06 Mardin 2y ago
58 bef7670 Mardin 2y ago const donationLinkButton = screen.getByRole('link', { name: /support-us.donate/i });
59 bef7670 Mardin 2y ago expect(donationLinkButton).toHaveAttribute('href', donationLink);
60 7a20f06 Mardin 2y ago });
61 7a20f06 Mardin 2y ago });