Skip to content

Commit eabbc67

Browse files
adds button.
1 parent 3d60a56 commit eabbc67

File tree

2 files changed

+99
-8
lines changed

2 files changed

+99
-8
lines changed

src/components/ContactForm.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ const ContactForm = () => {
121121

122122
{displayData && <DisplayComponent form={form}/>}
123123

124-
<input type="submit" />
124+
<button>Submit</button>
125125
</form>
126126
</div>
127127
);

src/components/ContactForm.test.js

Lines changed: 98 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,37 +5,128 @@ import userEvent from '@testing-library/user-event';
55
import ContactForm from './ContactForm';
66

77
test('renders without errors', ()=>{
8-
8+
render(<ContactForm/>);
99
});
1010

1111
test('renders the contact form header', ()=> {
12+
render(<ContactForm/>);
13+
14+
const headerElement = screen.queryByText(/contact form/i);
1215

16+
expect(headerElement).toBeInTheDocument();
17+
expect(headerElement).toBeTruthy();
18+
expect(headerElement).toHaveTextContent(/contact form/i);
1319
});
1420

1521
test('renders ONE error message if user enters less then 5 characters into firstname.', async () => {
16-
22+
render(<ContactForm/>);
23+
24+
const firstNameField = screen.getByLabelText(/First Name*/i);
25+
userEvent.type(firstNameField, "123");
26+
27+
const errorMessages = await screen.findAllByTestId('error');
28+
expect(errorMessages).toHaveLength(1);
1729
});
1830

1931
test('renders THREE error messages if user enters no values into any fields.', async () => {
20-
32+
render(<ContactForm/>);
33+
34+
const submitButton = screen.getByRole("button");
35+
userEvent.click(submitButton);
36+
37+
await waitFor(()=> {
38+
const errorMessages = screen.queryAllByTestId("error");
39+
expect(errorMessages).toHaveLength(3);
40+
});
2141
});
2242

2343
test('renders ONE error message if user enters a valid first name and last name but no email.', async () => {
24-
44+
render(<ContactForm/>);
45+
46+
const firstNameField = screen.getByLabelText(/first name*/i);
47+
userEvent.type(firstNameField, "warren");
48+
49+
const lastNameField = screen.getByLabelText(/last name*/i);
50+
userEvent.type(lastNameField, "longmire");
51+
52+
const button = screen.getByRole("button");
53+
userEvent.click(button);
54+
55+
const errorMessages = await screen.findAllByTestId("error");
56+
expect(errorMessages).toHaveLength(1);
2557
});
2658

2759
test('renders "email must be a valid email address" if an invalid email is entered', async () => {
28-
60+
render(<ContactForm/>);
61+
const emailField = screen.getByLabelText(/email*/i);
62+
userEvent.type(emailField, "warren@gmail");
63+
64+
const errorMessage = await screen.findByText(/email must be a valid email address/i);
65+
expect(errorMessage).toBeInTheDocument();
2966
});
3067

3168
test('renders "lastName is a required field" if an last name is not entered and the submit button is clicked', async () => {
32-
69+
render(<ContactForm/>);
70+
const submitButton = screen.getByRole("button");
71+
userEvent.click(submitButton);
72+
73+
const errorMessage = await screen.findByText(/lastName is a required field/i);
74+
expect(errorMessage).toBeInTheDocument();
3375
});
3476

3577
test('renders all firstName, lastName and email text when submitted. Does NOT render message if message is not submitted.', async () => {
36-
78+
render(<ContactForm/>);
79+
80+
const firstNameField = screen.getByLabelText(/first name*/i);
81+
const lastNameField = screen.getByLabelText(/last name*/i);
82+
const emailField = screen.getByLabelText(/email*/i);
83+
84+
userEvent.type(firstNameField, "warren");
85+
userEvent.type(lastNameField, "longmire");
86+
userEvent.type(emailField, "longmire@email.com");
87+
88+
const button = screen.getByRole("button");
89+
userEvent.click(button);
90+
91+
await waitFor(()=> {
92+
const firstnameDisplay = screen.queryByText("warren");
93+
const lastnameDisplay = screen.queryByText("longmire");
94+
const emailDisplay = screen.queryByText("longmire@email.com");
95+
const messageDisplay = screen.queryByTestId("messageDisplay");
96+
97+
expect(firstnameDisplay).toBeInTheDocument();
98+
expect(lastnameDisplay).toBeInTheDocument();
99+
expect(emailDisplay).toBeInTheDocument();
100+
expect(messageDisplay).not.toBeInTheDocument();
101+
});
37102
});
38103

39104
test('renders all fields text when all fields are submitted.', async () => {
105+
render(<ContactForm/>);
106+
107+
const firstNameField = screen.getByLabelText(/First Name*/i);
108+
const lastNameField = screen.getByLabelText(/Last Name*/i);
109+
const emailField = screen.getByLabelText(/Email*/i);
110+
const messageField = screen.getByLabelText(/Message/i);
40111

112+
userEvent.type(firstNameField, "Johnny");
113+
userEvent.type(lastNameField, "Doe");
114+
userEvent.type(emailField, "address@gmail.com");
115+
userEvent.type(messageField, "this is a message");
116+
117+
const submitButton = await screen.findByRole("button");
118+
userEvent.click(submitButton);
119+
120+
await waitFor(()=> {
121+
const firstnameDisplay = screen.queryByText(/John/i);
122+
const lastnameDisplay = screen.queryByText(/Doe/i);
123+
const emailDisplay = screen.queryByText(/address@gmail.com/i);
124+
const messageDisplay = screen.queryByText(/this is a message/i);
125+
console.log(messageDisplay.length);
126+
127+
expect(firstnameDisplay).toBeInTheDocument();
128+
expect(lastnameDisplay).toBeInTheDocument();
129+
expect(emailDisplay).toBeInTheDocument();
130+
// expect(messageDisplay).toBeInTheDocument();
131+
});
41132
});

0 commit comments

Comments
 (0)