Add UserContext unit test for signup
This commit is contained in:
71
src/components/contexts/UserContext.test.jsx
Normal file
71
src/components/contexts/UserContext.test.jsx
Normal file
@@ -0,0 +1,71 @@
|
||||
import {render, cleanup, screen, fireEvent, waitFor} from '@testing-library/react'
|
||||
import { UserProvider, useUserContext } from '../Contexts/UserContext';
|
||||
import auth from "../../services/auth";
|
||||
|
||||
jest.mock('../../services/auth');
|
||||
|
||||
describe('UseContext', () => {
|
||||
|
||||
describe("Signup", () => {
|
||||
beforeEach(() => {
|
||||
const TestComp = () => {
|
||||
const { signUp, error, fetching } = useUserContext();
|
||||
return (
|
||||
<>
|
||||
<div data-testid="error">{error}</div>
|
||||
<div data-testid="fetching">{fetching.toString()}</div>
|
||||
<button data-testid="signUpNoEmail" onClick={() => signUp('')}/>
|
||||
<button data-testid="signUpNoPassword" onClick={() => signUp('test@test.com', '')}/>
|
||||
<button data-testid="signUpBadConfirm" onClick={() => signUp('test@test.com', 'password', '')}/>
|
||||
<button data-testid="signUp" onClick={() => signUp('test@test.com', 'password', 'password')}/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
render(<UserProvider><TestComp /></UserProvider>);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
cleanup();
|
||||
});
|
||||
|
||||
it("Initial state", () => {
|
||||
expect(screen.getByTestId('error').innerHTML).toEqual("");
|
||||
expect(screen.getByTestId('fetching').innerHTML).toEqual("false");
|
||||
});
|
||||
|
||||
it("Error with no email address", () => {
|
||||
fireEvent.click(screen.getByTestId('signUpNoEmail'));
|
||||
expect(screen.getByTestId('error').innerHTML).toEqual("Email is required");
|
||||
expect(screen.getByTestId('fetching').innerHTML).toEqual("false");
|
||||
});
|
||||
|
||||
it("Error with no password", () => {
|
||||
fireEvent.click(screen.getByTestId('signUpNoPassword'));
|
||||
expect(screen.getByTestId('error').innerHTML).toEqual("Password is required");
|
||||
expect(screen.getByTestId('fetching').innerHTML).toEqual("false");
|
||||
});
|
||||
|
||||
it("Error with non-matching password", () => {
|
||||
fireEvent.click(screen.getByTestId('signUpBadConfirm'));
|
||||
expect(screen.getByTestId('error').innerHTML).toEqual("Passwords do not match");
|
||||
expect(screen.getByTestId('fetching').innerHTML).toEqual("false");
|
||||
});
|
||||
|
||||
it("No error sign up", async () => {
|
||||
fireEvent.click(screen.getByTestId('signUp'));
|
||||
await waitFor(() => {
|
||||
expect(screen.getByTestId('error').innerHTML).toEqual("");
|
||||
expect(screen.getByTestId('fetching').innerHTML).toEqual("false");
|
||||
});
|
||||
});
|
||||
|
||||
it("Handle server error", async () => {
|
||||
auth.setSignUpResponse({ message: "SERVER-ERROR", error: "ERR" });
|
||||
fireEvent.click(screen.getByTestId('signUp'));
|
||||
await waitFor(() => {
|
||||
expect(screen.getByTestId('error').innerHTML).toEqual("SERVER-ERROR");
|
||||
expect(screen.getByTestId('fetching').innerHTML).toEqual("false");
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
17
src/services/__mocks__/auth.js
Normal file
17
src/services/__mocks__/auth.js
Normal file
@@ -0,0 +1,17 @@
|
||||
let signInResponse = {};
|
||||
let signUpResponse = {};
|
||||
let verifyResponse = {};
|
||||
|
||||
const logResponse = (response) => {
|
||||
console.log('logResponse', response);
|
||||
return response;
|
||||
};
|
||||
|
||||
export default {
|
||||
signIn: async (username, password) => logResponse(signInResponse),
|
||||
signUp: async (username, password) => logResponse(signUpResponse),
|
||||
verify: async (jwt) => logResponse(verifyResponse),
|
||||
setSignInResponse: (value) => { signInResponse = value; },
|
||||
setSignUpResponse: (value) => { signUpResponse = value; },
|
||||
setVerifyResponse: (value) => { verifyResponse = value; },
|
||||
}
|
||||
Reference in New Issue
Block a user