Repository navigation
Expand file tree
/
Copy pathGithubAuthButton.test.tsx
More file actions
87 lines (66 loc) · 2.46 KB
/
Copy pathGithubAuthButton.test.tsx
File metadata and controls
87 lines (66 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom/vitest';
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { GitHubAuthButton } from './GithubAuthButton';
const mockSignIn = vi.fn();
const mockSignOut = vi.fn();
vi.mock('next-auth/react', () => ({
signIn: (...args: unknown[]) => mockSignIn(...args),
signOut: (...args: unknown[]) => mockSignOut(...args),
useSession: vi.fn(),
}));
import { useSession } from 'next-auth/react';
describe('GitHubAuthButton', () => {
beforeEach(() => {
vi.clearAllMocks();
});
it('renders "Sign in with GitHub" when there is no session', () => {
vi.mocked(useSession).mockReturnValue({
data: null,
status: 'unauthenticated',
update: vi.fn(),
});
render(<GitHubAuthButton />);
expect(screen.getByRole('button', { name: /sign in with github/i })).toBeInTheDocument();
});
it('renders "Sign out" when a session exists', () => {
vi.mocked(useSession).mockReturnValue({
data: { user: { name: 'Nishu' }, expires: '9999' },
status: 'authenticated',
update: vi.fn(),
});
render(<GitHubAuthButton />);
expect(screen.getByRole('button', { name: /sign out/i })).toBeInTheDocument();
});
it('calls signIn("github") when "Sign in with GitHub" is clicked', () => {
vi.mocked(useSession).mockReturnValue({
data: null,
status: 'unauthenticated',
update: vi.fn(),
});
render(<GitHubAuthButton />);
fireEvent.click(screen.getByRole('button', { name: /sign in with github/i }));
expect(mockSignIn).toHaveBeenCalledTimes(1);
expect(mockSignIn).toHaveBeenCalledWith('github');
});
it('calls signOut() when "Sign out" is clicked', () => {
vi.mocked(useSession).mockReturnValue({
data: { user: { name: 'Nishu' }, expires: '9999' },
status: 'authenticated',
update: vi.fn(),
});
render(<GitHubAuthButton />);
fireEvent.click(screen.getByRole('button', { name: /sign out/i }));
expect(mockSignOut).toHaveBeenCalledTimes(1);
});
it('does not render both buttons at the same time', () => {
vi.mocked(useSession).mockReturnValue({
data: null,
status: 'unauthenticated',
update: vi.fn(),
});
render(<GitHubAuthButton />);
expect(screen.queryByRole('button', { name: /sign out/i })).not.toBeInTheDocument();
expect(screen.getByRole('button', { name: /sign in with github/i })).toBeInTheDocument();
});
});