diff --git a/package-lock.json b/package-lock.json
index 5f776bd0..ba4732ab 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7696,6 +7696,12 @@
"detect-newline": "^2.1.0"
}
},
+ "jest-dom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jest-dom/-/jest-dom-4.0.0.tgz",
+ "integrity": "sha512-gBxYZlZB1Jgvf2gP2pRfjjUWF8woGBHj/g5rAQgFPB/0K2atGuhVcPO+BItyjWeKg9zM+dokgcMOH01vrWVMFA==",
+ "dev": true
+ },
"jest-each": {
"version": "24.9.0",
"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz",
@@ -12386,6 +12392,12 @@
"workbox-webpack-plugin": "4.3.1"
}
},
+ "react-testing-library": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/react-testing-library/-/react-testing-library-8.0.1.tgz",
+ "integrity": "sha512-Gq4JC9r3prA4hYwo7afcbHHMFckO29+5Nrh2KblAEPuK/DWaU0bJE1vtpAgLhzhY9bBirmcgjjIHljHEwGAXKw==",
+ "dev": true
+ },
"read-pkg": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
diff --git a/package.json b/package.json
index 5bb67304..0ae3cd39 100644
--- a/package.json
+++ b/package.json
@@ -33,7 +33,9 @@
]
},
"devDependencies": {
+ "jest-dom": "^4.0.0",
"mutationobserver-shim": "^0.3.3",
+ "react-testing-library": "^8.0.1",
"sass": "^1.32.5"
}
}
diff --git a/src/components/ContactForm.test.js b/src/components/ContactForm.test.js
index 5f80a897..a64522fc 100644
--- a/src/components/ContactForm.test.js
+++ b/src/components/ContactForm.test.js
@@ -1,41 +1,119 @@
-import React from 'react';
-import {render, screen, waitFor } from '@testing-library/react';
-import userEvent from '@testing-library/user-event';
+import React rom 'React';
+import {render ,screen, waitFor } from '@testing-library/react';
+import userEvent from '@testing-library/user-event';
+import App from "./App";
import ContactForm from './ContactForm';
test('renders without errors', ()=>{
+
+render()
});
test('renders the contact form header', ()=> {
+
+render()
+
+const header = screen.queryByText(/contact form/i)
+expect(header).toBeInTheDocument()
});
test('renders ONE error message if user enters less then 5 characters into firstname.', async () => {
+
+ render()
+
+ const firstname = screen.getByLabelText("First Name*")
+ userEvent.type(firstname, "King")
+ const errors = await screen.getByTestId(/errors/i)
+ expect(errors.length).toEqual(1)
+
});
test('renders THREE error messages if user enters no values into any fields.', async () => {
+
+render()
+
+const button = screen.getByRole("button")
+userEvent.click(button)
+const errors = await screen.getByTestId(/errors/i)
+expect(errors.length).toEqual(3)
+
});
test('renders ONE error message if user enters a valid first name and last name but no email.', async () => {
+ render ()
+ const firstname = screen.getByLabelText('First Name*')
+ const lastname = screen.getByLabelText("Last Name*")
+ const button = screen.getByRole("button")
+userEvent.type(firstname, "HELLO")
+userEvent.type(lastname, "GOODBYE")
+userEvent.click(button)
+const errors = await screen.getByTestId(/errors/i)
+expect(errors.length).toEqual(1)
+
});
test('renders "email must be a valid email address" if an invalid email is entered', async () => {
+ render ()
+const email = screen.getByLabelText("Email*")
+userEvent.type(email, "A0L.com")
+const errors = await screen.queryByText(/email must be a vaild email address/i)
+expect(errors).toBeInTheDocument()
+
+
+
});
test('renders "lastName is a required field" if an last name is not entered and the submit button is clicked', async () => {
-
+ render ()
+ const button = screen.getByRole("button")
+ userEvent.click(button)
+ const errors = screen.queryByText(/lastName is a required field/i)
+ await waitFor( ( ) => {
+ expect(errors).toBeInTheDocument()
+ } )
+
+
+
+
});
test('renders all firstName, lastName and email text when submitted. Does NOT render message if message is not submitted.', async () => {
-
+ render ()
+ const firstname = screen.getByLabelText('First Name*')
+ const lastname = screen.getByLabelText("Last Name*")
+ const button = screen.getByRole("button")
+ const email = screen.getByLabelText("Email*")
+
+userEvent.type(email, "email@A0L.com")
+userEvent.type(firstname, "HELLO")
+userEvent.type(lastname, "GOODBYE")
+userEvent.click(button)
+
+const firstnameDisplay = screen.getByTestId("firstnameDisplay")
+const lastnameDisplay = screen.getByTestId("lastnameDisplay")
+const emailDisplay = screen.getByTestId("emailDisplay")
+const messageDisplay = screen.getByTestId("messageDisplay")
+expect(firstnameDisplay).toBeInTheDocument()
+expect(lastnameDisplay).toBeInTheDocument()
+expect(emailDisplay).toBeInTheDocument()
+expect(messageDisplay).toBeNull()
+
+
+
});
test('renders all fields text when all fields are submitted.', async () => {
-
+ render ()
+
+
+
+
+
});
\ No newline at end of file