Add UserContext unit test for signup

This commit is contained in:
jwu-fisker
2021-01-06 18:22:33 -08:00
parent e9e2195b14
commit d812daa1ea
4 changed files with 200 additions and 76 deletions

View 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");
});
});
});
});

View 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; },
}