1
- import {
2
- EngagementContext ,
3
- IEngagementContext ,
4
- } from '../../../context/engagement_context/engagement_context' ;
5
1
import { act , fireEvent , render } from '@testing-library/react' ;
6
2
7
3
import { APP_FEATURES } from '../../../common/app_features' ;
@@ -11,8 +7,7 @@ import { FeatureToggles } from '../../../context/feature_context/feature_toggles
11
7
import { MemoryRouter } from 'react-router' ;
12
8
import React from 'react' ;
13
9
import { TestStateWrapper } from '../../../common/test_state_wrapper' ;
14
- import { getById } from '../../../utilities/get_by_id' ;
15
- import { mockEngagementFormConfig } from '../../../mocks/engagement_form_config_mocks' ;
10
+ import { FakedEngagementService } from '../../../services/engagement_service/implementations/faked_engagement_service' ;
16
11
17
12
describe ( 'Create New Engagement Route' , ( ) => {
18
13
const getComponent = ( ) => {
@@ -25,71 +20,100 @@ describe('Create New Engagement Route', () => {
25
20
) ;
26
21
} ;
27
22
test ( 'should have a field for a project name' , async ( ) => {
28
- act ( async ( ) => {
29
- const wrapper = render ( getComponent ( ) ) ;
30
- expect ( wrapper . getByTestId ( 'project-name' ) ) . toBeDefined ( ) ;
23
+ const wrapper = render ( getComponent ( ) ) ;
24
+ const projectName = wrapper . getByTestId ( 'project-name' ) ;
25
+
26
+ await act ( async ( ) => {
27
+ fireEvent . change ( projectName , { target : { value : '123' } } )
31
28
} ) ;
29
+
30
+ expect ( projectName ) . toHaveValue ( '123' ) ;
31
+
32
32
} ) ;
33
33
test ( 'should have a field for a customer name' , async ( ) => {
34
- act ( async ( ) => {
34
+ await act ( async ( ) => {
35
35
const wrapper = render ( getComponent ( ) ) ;
36
36
expect ( wrapper . getByTestId ( 'customer-name' ) ) . toBeDefined ( ) ;
37
37
} ) ;
38
38
} ) ;
39
39
test ( 'should have a field for a region name' , async ( ) => {
40
- act ( async ( ) => {
40
+ await act ( async ( ) => {
41
41
const wrapper = render ( getComponent ( ) ) ;
42
42
expect ( wrapper . getByTestId ( 'region' ) ) . toBeDefined ( ) ;
43
43
} ) ;
44
44
} ) ;
45
+
45
46
test ( 'clicking the submit button creates a new engagement' , async ( ) => {
46
- const createEngagement = jest . fn ( ) ;
47
47
const e = Engagement . fromFake ( ) ;
48
- e . customer_name = 'a' ;
49
- const Component = ( ) => (
50
- < MemoryRouter >
51
- < EngagementContext . Provider
52
- value = {
53
- ( {
54
- engagements : [ e ] ,
55
- getEngagements : async ( ) => [ ] ,
56
- createEngagement,
57
- engagementFormConfig : mockEngagementFormConfig ( ) ,
58
- } as unknown ) as IEngagementContext
59
- }
60
- >
61
- < FeatureToggles features = { [ APP_FEATURES . writer , APP_FEATURES . reader ] } >
48
+ e . customer_name = 'banana' ;
49
+
50
+ const fakey = new FakedEngagementService ( true ) ;
51
+
52
+ const getWriterComponent = ( ) => {
53
+ return (
54
+ < MemoryRouter >
55
+ < TestStateWrapper spyedEngagementService = { fakey } >
56
+ < FeatureToggles features = { [ APP_FEATURES . writer , APP_FEATURES . reader ] } >
62
57
< CreateNewEngagement />
63
- </ FeatureToggles >
64
- </ EngagementContext . Provider >
65
- </ MemoryRouter >
66
- ) ;
58
+ </ FeatureToggles >
59
+ </ TestStateWrapper >
60
+ </ MemoryRouter >
61
+ ) ;
62
+ } ;
63
+
64
+ const wrapper = render ( getWriterComponent ( ) ) ;
67
65
68
- act ( async ( ) => {
69
- const wrapper = render ( < Component /> ) ;
70
- const customerNameField = wrapper
71
- . getByTestId ( 'customer-name' )
72
- . getElementsByTagName ( 'input' ) [ 0 ] ;
66
+ await act ( async ( ) => {
67
+ const customerNameField = wrapper . getByTestId ( 'customer-name' ) . getElementsByTagName ( 'input' ) [ 0 ] ;
73
68
fireEvent . change ( customerNameField , {
74
- target : { value : 'a ' } ,
69
+ target : { value : 'banana ' } ,
75
70
} ) ;
76
- const dropdownButton = getById ( wrapper . container , 'customer_dropdown' ) ;
77
- fireEvent . click ( dropdownButton ) ;
78
- wrapper . rerender ( < Component /> ) ;
79
- fireEvent . click ( wrapper . getByTestId ( 'a' ) ) ;
80
- fireEvent . change ( wrapper . getByTestId ( 'project-name' ) , {
71
+ } ) ;
72
+
73
+ await act ( async ( ) => {
74
+ const customerButton = wrapper . getByText ( / b a n a n a / ) ;
75
+ fireEvent . click ( customerButton ) ;
76
+ } ) ;
77
+
78
+ await act ( async ( ) => {
79
+ const engNameInput = wrapper . getByTestId ( 'project-name' ) ;
80
+ const regionInput = wrapper . getByTestId ( 'region' ) ;
81
+ const engagementType = wrapper . getByTestId ( 'new-engagement-type' ) ;
82
+
83
+ fireEvent . change ( engNameInput , {
81
84
target : { value : 'Mars Rover' } ,
82
85
} ) ;
83
- fireEvent . change ( wrapper . getByTestId ( 'region' ) , {
86
+
87
+ fireEvent . change ( regionInput , {
84
88
target : { value : 'dev-1' } ,
85
89
} ) ;
86
90
87
- wrapper . rerender ( < Component /> ) ;
91
+ fireEvent . change ( engagementType , {
92
+ target : { value : 'Residency' } ,
93
+ } ) ;
94
+ } ) ;
95
+
96
+ await act ( async ( ) => {
97
+ const engNameInput = wrapper . getByTestId ( 'project-name' ) ;
98
+ const regionInput = wrapper . getByTestId ( 'region' ) ;
99
+ const engagementType = wrapper . getByTestId ( 'new-engagement-type' ) ;
100
+
101
+ expect ( engNameInput ) . toHaveValue ( 'Mars Rover' ) ;
102
+ expect ( regionInput ) . toHaveValue ( 'dev-1' ) ;
103
+ expect ( engagementType ) . toHaveValue ( 'Residency' ) ;
104
+
105
+ const createButton = wrapper . getByTestId ( 'create-engagement-button' ) ;
106
+ expect ( createButton ) . toBeEnabled ( ) ;
107
+ } ) ;
108
+
109
+ await act ( async ( ) => {
110
+ const spy = jest . spyOn ( fakey , 'createEngagement' ) ;
88
111
89
112
const createButton = wrapper . getByTestId ( 'create-engagement-button' ) ;
90
113
fireEvent . click ( createButton ) ;
91
- expect ( createEngagement ) . toHaveBeenCalledWith ( {
92
- customer_name : 'a' ,
114
+
115
+ expect ( spy ) . toHaveBeenCalledWith ( {
116
+ customer_name : 'banana' ,
93
117
engagement_region : 'dev-1' ,
94
118
engagement_type : 'Residency' ,
95
119
project_name : 'Mars Rover' ,
0 commit comments