diff options
| author | Wes Bos <wesbos@gmail.com> | 2018-04-19 16:51:22 -0400 |
|---|---|---|
| committer | Wes Bos <wesbos@gmail.com> | 2018-04-19 16:51:22 -0400 |
| commit | 27f6237781bfe7fdc4ac1c7edaeee849434df92a (patch) | |
| tree | 1822af24b1821616a81fb4fa9830ec6ef1a5f3bb /frontend/__tests__ | |
| parent | aaae57b7978ffd0038ad560d6c9a4e8cf064cb0d (diff) | |
Tests for singup
Diffstat (limited to 'frontend/__tests__')
| -rw-r--r-- | frontend/__tests__/Signup.test.js | 54 | ||||
| -rw-r--r-- | frontend/__tests__/__snapshots__/Signup.test.js.snap | 61 | ||||
| -rw-r--r-- | frontend/__tests__/mockMang.js | 18 |
3 files changed, 130 insertions, 3 deletions
diff --git a/frontend/__tests__/Signup.test.js b/frontend/__tests__/Signup.test.js new file mode 100644 index 0000000..f73c01c --- /dev/null +++ b/frontend/__tests__/Signup.test.js @@ -0,0 +1,54 @@ +import React from 'react'; +import { mount } from 'enzyme'; +import toJSON from 'enzyme-to-json'; +import wait from 'waait'; +import Signup from '../components/Signup'; +import mountOptions from './mockMang'; + +function type(wrapper, name, value) { + wrapper.find(`input[name="${name}"]`).simulate('change', { + target: { + name, + value, + }, + }); +} + +describe('<Signup/>', () => { + beforeAll(() => { + // mock localStorage + global.localStorage = { + setItem: jest.fn(), + }; + }); + + it('renders and matches snapshot', () => { + const wrapper = mount(<Signup />, mountOptions); + expect(toJSON(wrapper.find('form'))).toMatchSnapshot(); + }); + + it('calls mutation with correct data', async () => { + const wrapper = mount(<Signup />, mountOptions); + const mutation = wrapper.find('Mutation').instance(); + mutation.client.mutate = jest.fn().mockResolvedValue({ + data: { signup: { token: 'omg123' } }, + }); + + const expected = { + name: 'Randy', + email: 'Randy@randymail.net', + password: 'pupsrock', + }; + + type(wrapper, 'name', expected.name); + type(wrapper, 'email', expected.email); + type(wrapper, 'password', expected.password); + + wrapper.simulate('submit'); + + expect(mutation.client.mutate).toHaveBeenCalled(); + expect(mutation.client.mutate).toHaveBeenCalledWithVariables(expected); + await wait(); + expect(localStorage.setItem).toHaveBeenCalledWith('token', 'omg123'); + }); +}); diff --git a/frontend/__tests__/__snapshots__/Signup.test.js.snap b/frontend/__tests__/__snapshots__/Signup.test.js.snap new file mode 100644 index 0000000..d4d88a1 --- /dev/null +++ b/frontend/__tests__/__snapshots__/Signup.test.js.snap @@ -0,0 +1,61 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`<Signup/> renders and matches snapshot 1`] = ` +<form + className="sc-bdVaJa LHejR" + onSubmit={[Function]} +> + <fieldset + aria-busy={false} + disabled={false} + > + <DisplayError /> + <h2> + Sign Up for an Account + </h2> + <label + htmlFor="email" + > + Email + <input + name="email" + onChange={[Function]} + placeholder="email" + type="text" + value="wesbos@gmail.com" + /> + </label> + <label + htmlFor="name" + > + Name + <input + name="name" + onChange={[Function]} + placeholder="name" + type="text" + value="Wes Bos" + /> + </label> + <label + htmlFor="signupPassword" + > + Password + <input + className="password" + id="signupPassword" + name="password" + onChange={[Function]} + placeholder="password" + type="password" + value="wes" + /> + </label> + <button + type="submit" + > + Submit + </button> + </fieldset> +</form> +`; diff --git a/frontend/__tests__/mockMang.js b/frontend/__tests__/mockMang.js index 7f5403b..3dba703 100644 --- a/frontend/__tests__/mockMang.js +++ b/frontend/__tests__/mockMang.js @@ -7,8 +7,6 @@ import PropTypes from 'prop-types'; // seed it so we get consistent results casual.seed(777); -const typeDefs = importSchema('../backend/src/schema.graphql'); - // By default graphql-mock will generate random numbers, IDs, and Strings of "Hello World" // We can overwrite any of those if we need to @@ -37,8 +35,22 @@ const mocks = { }), }; +const resolvers = { + // Query: { + // cartOpen: () => true, + // }, +}; + +const typeDefs = importSchema('../backend/src/schema.graphql'); + +const schema = makeExecutableSchema({ + typeDefs, + resolvers, + resolverValidationOptions: { requireResolversForResolveType: false }, +}); + // Creates a mocked client -const mocked = new MockClient(typeDefs, mocks); +const mocked = new MockClient(schema, mocks); const mountOptions = { context: { |
