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