1+ import { mount } from 'enzyme' ;
2+ import wait from 'waait' ;
3+ import toJSON from 'enzyme-to-json' ;
4+ import NProgress from 'nprogress' ;
5+ import Router from 'next/router' ;
6+ import { MockedProvider } from 'react-apollo/test-utils' ;
7+ import { ApolloConsumer } from 'react-apollo' ;
8+ import TakeMyMoney , { CREATE_ORDER_MUTATION } from '../components/TakeMyMoney' ;
9+ import { CURRENT_USER_QUERY } from '../components/User' ;
10+ import { fakeUser , fakeCartItem } from '../lib/testUtils' ;
11+
12+ Router . router = { push ( ) { } } ;
13+
14+ const mocks = [
15+ {
16+ request : { query : CURRENT_USER_QUERY } ,
17+ result : {
18+ data : {
19+ me : {
20+ ...fakeUser ( ) ,
21+ cart : [ fakeCartItem ( ) ] ,
22+ } ,
23+ } ,
24+ } ,
25+ } ,
26+ ] ;
27+
28+ describe ( '<TakeMyMoney/>' , ( ) => {
29+ it ( 'renders and matches snapshot' , async ( ) => {
30+ const wrapper = mount (
31+ < MockedProvider mocks = { mocks } >
32+ < TakeMyMoney />
33+ </ MockedProvider >
34+ ) ;
35+ await wait ( ) ;
36+ wrapper . update ( ) ;
37+ const checkoutButton = wrapper . find ( 'ReactStripeCheckout' ) ;
38+ expect ( toJSON ( checkoutButton ) ) . toMatchSnapshot ( ) ;
39+ } ) ;
40+ it ( 'creates an order ontoken' , async ( ) => {
41+ const createOrderMock = jest . fn ( ) . mockResolvedValue ( {
42+ data : { createOrder : { id : 'xyz789' } } ,
43+ } ) ;
44+ const wrapper = mount (
45+ < MockedProvider mocks = { mocks } >
46+ < TakeMyMoney />
47+ </ MockedProvider >
48+ ) ;
49+ const component = wrapper . find ( 'TakeMyMoney' ) . instance ( ) ;
50+ // manully call that onToken method
51+ component . onToken ( { id : 'abc123' } , createOrderMock ) ;
52+ expect ( createOrderMock ) . toHaveBeenCalled ( ) ;
53+ expect ( createOrderMock ) . toHaveBeenCalledWith ( { variables : { token : 'abc123' } } ) ;
54+ } ) ;
55+
56+ it ( 'turns the progress bar on' , async ( ) => {
57+ const wrapper = mount (
58+ < MockedProvider mocks = { mocks } >
59+ < TakeMyMoney />
60+ </ MockedProvider >
61+ ) ;
62+ await wait ( ) ;
63+ wrapper . update ( ) ;
64+ NProgress . start = jest . fn ( ) ;
65+ const createOrderMock = jest . fn ( ) . mockResolvedValue ( {
66+ data : { createOrder : { id : 'xyz789' } } ,
67+ } ) ;
68+ const component = wrapper . find ( 'TakeMyMoney' ) . instance ( ) ;
69+ // manully call that onToken method
70+ component . onToken ( { id : 'abc123' } , createOrderMock ) ;
71+ expect ( NProgress . start ) . toHaveBeenCalled ( ) ;
72+ } ) ;
73+
74+ it ( 'routes to the order page when completed' , async ( ) => {
75+ const wrapper = mount (
76+ < MockedProvider mocks = { mocks } >
77+ < TakeMyMoney />
78+ </ MockedProvider >
79+ ) ;
80+ await wait ( ) ;
81+ wrapper . update ( ) ;
82+ const createOrderMock = jest . fn ( ) . mockResolvedValue ( {
83+ data : { createOrder : { id : 'xyz789' } } ,
84+ } ) ;
85+ const component = wrapper . find ( 'TakeMyMoney' ) . instance ( ) ;
86+ Router . router . push = jest . fn ( ) ;
87+ // manully call that onToken method
88+ component . onToken ( { id : 'abc123' } , createOrderMock ) ;
89+ await wait ( ) ;
90+ expect ( Router . router . push ) . toHaveBeenCalled ( ) ;
91+ expect ( Router . router . push ) . toHaveBeenCalledWith ( {
92+ pathname : '/order' ,
93+ query : {
94+ id : 'xyz789' ,
95+ } ,
96+ } ) ;
97+ } ) ;
98+ } ) ;
0 commit comments