summaryrefslogtreecommitdiffstats
path: root/frontend/__tests__
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/__tests__')
-rw-r--r--frontend/__tests__/Signup.test.js54
-rw-r--r--frontend/__tests__/__snapshots__/Signup.test.js.snap61
-rw-r--r--frontend/__tests__/mockMang.js18
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: {