summaryrefslogtreecommitdiffstats
path: root/finished-application/frontend/__tests__/Signup.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'finished-application/frontend/__tests__/Signup.test.js')
-rw-r--r--finished-application/frontend/__tests__/Signup.test.js91
1 files changed, 91 insertions, 0 deletions
diff --git a/finished-application/frontend/__tests__/Signup.test.js b/finished-application/frontend/__tests__/Signup.test.js
new file mode 100644
index 0000000..2a668a6
--- /dev/null
+++ b/finished-application/frontend/__tests__/Signup.test.js
@@ -0,0 +1,91 @@
+import React from 'react';
+import { mount } from 'enzyme';
+import toJSON from 'enzyme-to-json';
+import wait from 'waait';
+import { ApolloConsumer } from 'react-apollo';
+import { MockedProvider } from 'react-apollo/test-utils';
+import Signup, { SIGNUP_MUTATION } from '../components/Signup';
+import { fakeUser } from '../lib/testUtils';
+import { CURRENT_USER_QUERY } from '../components/User';
+
+function type(wrapper, name, value) {
+ wrapper.find(`input[name="${name}"]`).simulate('change', {
+ target: {
+ name,
+ value,
+ },
+ });
+}
+const me = fakeUser();
+const mocks = [
+ {
+ request: {
+ query: SIGNUP_MUTATION,
+ variables: {
+ email: me.email,
+ name: me.name,
+ password: 'wes',
+ },
+ },
+ result: {
+ data: {
+ signup: {
+ __typename: 'User',
+ id: 'abc123',
+ email: me.email,
+ name: me.name,
+ },
+ },
+ },
+ },
+ {
+ request: { query: CURRENT_USER_QUERY },
+ result: {
+ data: {
+ me: {
+ __typename: 'User',
+ ...me,
+ cart: [],
+ },
+ },
+ },
+ },
+];
+
+describe('<Signup/>', () => {
+ it('renders and matches snapshot', () => {
+ const wrapper = mount(
+ <MockedProvider>
+ <Signup />
+ </MockedProvider>
+ );
+ expect(toJSON(wrapper.find('form'))).toMatchSnapshot();
+ });
+
+ it('calls mutation with correct data', async () => {
+ let apolloClient;
+ const wrapper = mount(
+ <MockedProvider mocks={mocks}>
+ <ApolloConsumer>
+ {client => {
+ apolloClient = client;
+ return <Signup />;
+ }}
+ </ApolloConsumer>
+ </MockedProvider>
+ );
+
+ await wait();
+ wrapper.update();
+
+ type(wrapper, 'name', me.name);
+ type(wrapper, 'email', me.email);
+ type(wrapper, 'password', 'wes');
+
+ wrapper.update();
+ wrapper.find('form').simulate('submit');
+
+ const user = await apolloClient.query({ query: CURRENT_USER_QUERY });
+ expect(user.data.me).toMatchObject(me);
+ });
+});