| 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 |
7a20f06 |
Mardin |
2y ago |
it('renders the SupportUs component when localStorage is true', () => { |
| 15 |
7a20f06 |
Mardin |
2y ago |
useSupportUs.mockReturnValue([true, vi.fn()]); |
| 16 |
7a20f06 |
Mardin |
2y ago |
|
| 17 |
7a20f06 |
Mardin |
2y ago |
render(<SupportUs variant="local-storage" />); |
| 18 |
7a20f06 |
Mardin |
2y ago |
|
| 19 |
7a20f06 |
Mardin |
2y ago |
expect(screen.getByText(/support-us.title/i)).toBeInTheDocument(); |
| 20 |
7a20f06 |
Mardin |
2y ago |
expect(screen.getByText(/support-us.desc/i)).toBeInTheDocument(); |
| 21 |
7a20f06 |
Mardin |
2y ago |
expect(screen.getByRole('button', { name: /Close/i })).toBeInTheDocument(); |
| 22 |
7a20f06 |
Mardin |
2y ago |
}); |
| 23 |
7a20f06 |
Mardin |
2y ago |
|
| 24 |
7a20f06 |
Mardin |
2y ago |
it('does not render the SupportUs component when localStorage is false', () => { |
| 25 |
7a20f06 |
Mardin |
2y ago |
useSupportUs.mockReturnValue([false, vi.fn()]); |
| 26 |
7a20f06 |
Mardin |
2y ago |
|
| 27 |
7a20f06 |
Mardin |
2y ago |
render(<SupportUs variant="status" />); |
| 28 |
7a20f06 |
Mardin |
2y ago |
|
| 29 |
7a20f06 |
Mardin |
2y ago |
expect(screen.queryByText(/support-us.title/i)).not.toBeInTheDocument(); |
| 30 |
7a20f06 |
Mardin |
2y ago |
}); |
| 31 |
7a20f06 |
Mardin |
2y ago |
|
| 32 |
7a20f06 |
Mardin |
2y ago |
it('closes the SupportUs card when the close button is clicked in local-storage mode', () => { |
| 33 |
7a20f06 |
Mardin |
2y ago |
const setSupportUsOpen = vi.fn(); |
| 34 |
7a20f06 |
Mardin |
2y ago |
useSupportUs.mockReturnValue([true, setSupportUsOpen]); |
| 35 |
7a20f06 |
Mardin |
2y ago |
|
| 36 |
7a20f06 |
Mardin |
2y ago |
render(<SupportUs variant="local-storage" />); |
| 37 |
7a20f06 |
Mardin |
2y ago |
|
| 38 |
7a20f06 |
Mardin |
2y ago |
const closeButton = screen.getByRole('button', { name: /Close/i }); |
| 39 |
7a20f06 |
Mardin |
2y ago |
fireEvent.mouseDown(closeButton); |
| 40 |
7a20f06 |
Mardin |
2y ago |
|
| 41 |
7a20f06 |
Mardin |
2y ago |
expect(setSupportUsOpen).toHaveBeenCalledWith(false); |
| 42 |
7a20f06 |
Mardin |
2y ago |
}); |
| 43 |
7a20f06 |
Mardin |
2y ago |
|
| 44 |
7a20f06 |
Mardin |
2y ago |
it('renders the SupportUs component in view mode without close button', () => { |
| 45 |
7a20f06 |
Mardin |
2y ago |
render(<SupportUs variant="view" />); |
| 46 |
7a20f06 |
Mardin |
2y ago |
|
| 47 |
7a20f06 |
Mardin |
2y ago |
expect(screen.getByText(/support-us.title/i)).toBeInTheDocument(); |
| 48 |
7a20f06 |
Mardin |
2y ago |
expect(screen.queryByRole('button', { name: /Close/i })).not.toBeInTheDocument(); |
| 49 |
7a20f06 |
Mardin |
2y ago |
}); |
| 50 |
7a20f06 |
Mardin |
2y ago |
|
| 51 |
7a20f06 |
Mardin |
2y ago |
it('redirects to the donation link when the donation button is clicked', () => { |
| 52 |
7a20f06 |
Mardin |
2y ago |
useSupportUs.mockReturnValue([true, vi.fn()]); |
| 53 |
7a20f06 |
Mardin |
2y ago |
|
| 54 |
7a20f06 |
Mardin |
2y ago |
render(<SupportUs variant="local-storage" />); |
| 55 |
7a20f06 |
Mardin |
2y ago |
|
| 56 |
7a20f06 |
Mardin |
2y ago |
const donationLink = screen.getByRole('link', { name: /support-us.donate/i }); |
| 57 |
7a20f06 |
Mardin |
2y ago |
expect(donationLink).toHaveAttribute('href', 'https://github.com/khodedawsh/marzneshin#donation'); |
| 58 |
7a20f06 |
Mardin |
2y ago |
}); |
| 59 |
7a20f06 |
Mardin |
2y ago |
}); |