Add UserContext unit test for signup
This commit is contained in:
184
package-lock.json
generated
184
package-lock.json
generated
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "client",
|
"name": "client",
|
||||||
"version": "0.1.0",
|
"version": "0.1.1",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -8119,81 +8119,6 @@
|
|||||||
"istanbul-lib-report": "^3.0.0"
|
"istanbul-lib-report": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"jest": {
|
|
||||||
"version": "26.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/jest/-/jest-26.6.0.tgz",
|
|
||||||
"integrity": "sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA==",
|
|
||||||
"requires": {
|
|
||||||
"@jest/core": "^26.6.0",
|
|
||||||
"import-local": "^3.0.2",
|
|
||||||
"jest-cli": "^26.6.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-styles": {
|
|
||||||
"version": "4.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
|
||||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
|
||||||
"requires": {
|
|
||||||
"color-convert": "^2.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"chalk": {
|
|
||||||
"version": "4.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
|
||||||
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
|
||||||
"requires": {
|
|
||||||
"ansi-styles": "^4.1.0",
|
|
||||||
"supports-color": "^7.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"color-convert": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
|
||||||
"requires": {
|
|
||||||
"color-name": "~1.1.4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"color-name": {
|
|
||||||
"version": "1.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
|
||||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
|
||||||
},
|
|
||||||
"has-flag": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
|
|
||||||
},
|
|
||||||
"jest-cli": {
|
|
||||||
"version": "26.6.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz",
|
|
||||||
"integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==",
|
|
||||||
"requires": {
|
|
||||||
"@jest/core": "^26.6.3",
|
|
||||||
"@jest/test-result": "^26.6.2",
|
|
||||||
"@jest/types": "^26.6.2",
|
|
||||||
"chalk": "^4.0.0",
|
|
||||||
"exit": "^0.1.2",
|
|
||||||
"graceful-fs": "^4.2.4",
|
|
||||||
"import-local": "^3.0.2",
|
|
||||||
"is-ci": "^2.0.0",
|
|
||||||
"jest-config": "^26.6.3",
|
|
||||||
"jest-util": "^26.6.2",
|
|
||||||
"jest-validate": "^26.6.2",
|
|
||||||
"prompts": "^2.0.1",
|
|
||||||
"yargs": "^15.4.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"supports-color": {
|
|
||||||
"version": "7.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
|
||||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
|
||||||
"requires": {
|
|
||||||
"has-flag": "^4.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"jest-changed-files": {
|
"jest-changed-files": {
|
||||||
"version": "26.6.2",
|
"version": "26.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz",
|
||||||
@@ -12736,6 +12661,113 @@
|
|||||||
"webpack-dev-server": "3.11.0",
|
"webpack-dev-server": "3.11.0",
|
||||||
"webpack-manifest-plugin": "2.2.0",
|
"webpack-manifest-plugin": "2.2.0",
|
||||||
"workbox-webpack-plugin": "5.1.4"
|
"workbox-webpack-plugin": "5.1.4"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": {
|
||||||
|
"version": "4.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||||
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||||
|
"requires": {
|
||||||
|
"color-convert": "^2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"chalk": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||||
|
"requires": {
|
||||||
|
"ansi-styles": "^4.1.0",
|
||||||
|
"supports-color": "^7.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-convert": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||||
|
"requires": {
|
||||||
|
"color-name": "~1.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-name": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||||
|
},
|
||||||
|
"has-flag": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
|
||||||
|
},
|
||||||
|
"jest": {
|
||||||
|
"version": "26.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jest/-/jest-26.6.0.tgz",
|
||||||
|
"integrity": "sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA==",
|
||||||
|
"requires": {
|
||||||
|
"@jest/core": "^26.6.0",
|
||||||
|
"import-local": "^3.0.2",
|
||||||
|
"jest-cli": "^26.6.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"jest-cli": {
|
||||||
|
"version": "26.6.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz",
|
||||||
|
"integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==",
|
||||||
|
"requires": {
|
||||||
|
"@jest/core": "^26.6.3",
|
||||||
|
"@jest/test-result": "^26.6.2",
|
||||||
|
"@jest/types": "^26.6.2",
|
||||||
|
"chalk": "^4.0.0",
|
||||||
|
"exit": "^0.1.2",
|
||||||
|
"graceful-fs": "^4.2.4",
|
||||||
|
"import-local": "^3.0.2",
|
||||||
|
"is-ci": "^2.0.0",
|
||||||
|
"jest-config": "^26.6.3",
|
||||||
|
"jest-util": "^26.6.2",
|
||||||
|
"jest-validate": "^26.6.2",
|
||||||
|
"prompts": "^2.0.1",
|
||||||
|
"yargs": "^15.4.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"supports-color": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
|
"requires": {
|
||||||
|
"has-flag": "^4.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"react-shallow-renderer": {
|
||||||
|
"version": "16.14.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz",
|
||||||
|
"integrity": "sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"object-assign": "^4.1.1",
|
||||||
|
"react-is": "^16.12.0 || ^17.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"react-test-renderer": {
|
||||||
|
"version": "17.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.1.tgz",
|
||||||
|
"integrity": "sha512-/dRae3mj6aObwkjCcxZPlxDFh73XZLgvwhhyON2haZGUEhiaY5EjfAdw+d/rQmlcFwdTpMXCSGVk374QbCTlrA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"object-assign": "^4.1.1",
|
||||||
|
"react-is": "^17.0.1",
|
||||||
|
"react-shallow-renderer": "^16.13.1",
|
||||||
|
"scheduler": "^0.20.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"react-is": {
|
||||||
|
"version": "17.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz",
|
||||||
|
"integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"react-transition-group": {
|
"react-transition-group": {
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"start": "react-scripts start",
|
"start": "react-scripts start",
|
||||||
"build": "react-scripts build",
|
"build": "react-scripts build",
|
||||||
"test": "react-scripts test",
|
"test": "react-scripts test",
|
||||||
|
"test:debug": "react-scripts --inspect-brk test --runInBand --no-cache",
|
||||||
"eject": "react-scripts eject"
|
"eject": "react-scripts eject"
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
@@ -41,5 +42,8 @@
|
|||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "12.20.1"
|
"node": "12.20.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"react-test-renderer": "^17.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
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