Final commit
This commit is contained in:
parent
fb330d94a1
commit
d471542762
3 changed files with 103 additions and 13 deletions
103
src/App.test.jsx
103
src/App.test.jsx
|
@ -1,10 +1,10 @@
|
||||||
import { render, screen } from "@testing-library/react"
|
import { render, screen, fireEvent } from "@testing-library/react"
|
||||||
import { BookingForm } from "./components/BookingForm"
|
import { BookingForm } from "./components/BookingForm"
|
||||||
import "@testing-library/jest-dom"
|
import "@testing-library/jest-dom"
|
||||||
import { initializeTimes, updateTimes } from "./components/Main"
|
import { initializeTimes } from "./components/Main"
|
||||||
|
const availableTimes = ["17:00", "18:00"]
|
||||||
|
|
||||||
test("Renders the BookingForm heading", () => {
|
test("Renders the BookingForm heading", () => {
|
||||||
const availableTimes = ["17:00"]
|
|
||||||
render(<BookingForm availableTimes={availableTimes} />)
|
render(<BookingForm availableTimes={availableTimes} />)
|
||||||
const headingElement = screen.getByText("Choose date")
|
const headingElement = screen.getByText("Choose date")
|
||||||
expect(headingElement).toBeInTheDocument()
|
expect(headingElement).toBeInTheDocument()
|
||||||
|
@ -15,7 +15,98 @@ test("Returns a correct array of times", () => {
|
||||||
expect(initializeTimes()[0]).toMatch(/\d{2}:\d{2}/)
|
expect(initializeTimes()[0]).toMatch(/\d{2}:\d{2}/)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("Returns the same value provided in the state", () => {
|
test("Guests input is required.", () => {
|
||||||
const times = initializeTimes()
|
render(<BookingForm availableTimes={availableTimes} />)
|
||||||
expect(updateTimes(times, "2022-02-04")).toBe(times)
|
const guestsInput = screen.getByLabelText("Number of guests")
|
||||||
|
expect(guestsInput).toHaveAttribute("required")
|
||||||
|
})
|
||||||
|
|
||||||
|
test("Time input is required.", () => {
|
||||||
|
render(<BookingForm availableTimes={availableTimes} />)
|
||||||
|
const timeInput = screen.getByLabelText("Choose time")
|
||||||
|
expect(timeInput).toHaveAttribute("required")
|
||||||
|
})
|
||||||
|
|
||||||
|
test("Occasion input is not required.", () => {
|
||||||
|
render(<BookingForm availableTimes={availableTimes} />)
|
||||||
|
const occasionInput = screen.getByLabelText("Occasion")
|
||||||
|
expect(occasionInput).not.toHaveAttribute("required")
|
||||||
|
})
|
||||||
|
|
||||||
|
test("Date input is required.", () => {
|
||||||
|
render(<BookingForm availableTimes={availableTimes} />)
|
||||||
|
const dateInput = screen.getByLabelText("Choose date")
|
||||||
|
expect(dateInput).toHaveAttribute("required")
|
||||||
|
})
|
||||||
|
|
||||||
|
test("Guests input errors correctly.", () => {
|
||||||
|
render(<BookingForm availableTimes={availableTimes} />)
|
||||||
|
|
||||||
|
const guestsInput = screen.getByLabelText("Number of guests")
|
||||||
|
fireEvent.change(guestsInput, { target: { value: "23" } })
|
||||||
|
const error = screen.getByText("Guests must be between 1 and 10.")
|
||||||
|
expect(error).toBeInTheDocument()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("Guests input does not error incorrectly.", () => {
|
||||||
|
render(<BookingForm availableTimes={availableTimes} />)
|
||||||
|
|
||||||
|
const guestsInput = screen.getByLabelText("Number of guests")
|
||||||
|
fireEvent.change(guestsInput, { target: { value: "2" } })
|
||||||
|
const error = screen.queryByText("Guests must be between 1 and 10.")
|
||||||
|
expect(error).not.toBeInTheDocument()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("Time input errors correctly.", () => {
|
||||||
|
render(<BookingForm availableTimes={availableTimes} />)
|
||||||
|
|
||||||
|
const timeInput = screen.getByLabelText("Choose time")
|
||||||
|
fireEvent.change(timeInput, { target: { value: "" } })
|
||||||
|
const error = screen.getByText("Field is required.")
|
||||||
|
expect(error).toBeInTheDocument()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("Time input does not error incorrectly.", () => {
|
||||||
|
render(<BookingForm availableTimes={availableTimes} />)
|
||||||
|
|
||||||
|
const timeInput = screen.getByLabelText("Choose time")
|
||||||
|
fireEvent.change(timeInput, { target: { value: "17:00" } })
|
||||||
|
const error = screen.queryByText("Field is required.")
|
||||||
|
expect(error).not.toBeInTheDocument()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("Date input errors correctly.", () => {
|
||||||
|
render(<BookingForm availableTimes={availableTimes} />)
|
||||||
|
|
||||||
|
const dateInput = screen.getByLabelText("Choose date")
|
||||||
|
fireEvent.change(dateInput, { target: { value: "" } })
|
||||||
|
const error = screen.getByText("Field is required.")
|
||||||
|
expect(error).toBeInTheDocument()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("Date input does not error incorrectly.", () => {
|
||||||
|
render(<BookingForm availableTimes={availableTimes} />)
|
||||||
|
|
||||||
|
const dateInput = screen.getByLabelText("Choose date")
|
||||||
|
fireEvent.change(dateInput, { target: { value: "2023-03-02" } })
|
||||||
|
const error = screen.queryByText("Field is required.")
|
||||||
|
expect(error).not.toBeInTheDocument()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("Occasion input errors correctly.", () => {
|
||||||
|
render(<BookingForm availableTimes={availableTimes} />)
|
||||||
|
|
||||||
|
const occasionInput = screen.getByLabelText("Occasion")
|
||||||
|
fireEvent.change(occasionInput, { target: { value: "23" } })
|
||||||
|
const error = screen.getByText("Invalid occasion.")
|
||||||
|
expect(error).toBeInTheDocument()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("Occasion input does not error incorrectly.", () => {
|
||||||
|
render(<BookingForm availableTimes={availableTimes} />)
|
||||||
|
|
||||||
|
const occasionInput = screen.getByLabelText("Occasion")
|
||||||
|
fireEvent.change(occasionInput, { target: { value: "Other" } })
|
||||||
|
const error = screen.queryByText("Invalid occasion.")
|
||||||
|
expect(error).not.toBeInTheDocument()
|
||||||
})
|
})
|
||||||
|
|
|
@ -25,22 +25,22 @@ export const BookingForm = ({
|
||||||
|
|
||||||
const onDateChange = ({ target }) => {
|
const onDateChange = ({ target }) => {
|
||||||
let error = ""
|
let error = ""
|
||||||
if (target.value === "") error = "Field is required"
|
if (target.value === "") error = "Field is required."
|
||||||
setDateError(error)
|
setDateError(error)
|
||||||
setDate(target.value)
|
setDate(target.value)
|
||||||
if (!error) dispatch(target.valueAsDate)
|
if (!error && dispatch) dispatch(target.valueAsDate)
|
||||||
}
|
}
|
||||||
|
|
||||||
const onTimeChange = ({ target }) => {
|
const onTimeChange = ({ target }) => {
|
||||||
let error = ""
|
let error = ""
|
||||||
if (target.value === "") error = "Field is required"
|
if (target.value === "") error = "Field is required."
|
||||||
setTimeError(error)
|
setTimeError(error)
|
||||||
setTime(target.value)
|
setTime(target.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
const onGuestChange = ({ target }) => {
|
const onGuestChange = ({ target }) => {
|
||||||
let error = ""
|
let error = ""
|
||||||
if (target.value === "") error = "Field is required"
|
if (target.value === "") error = "Field is required."
|
||||||
else if (target.value < 1 || target.value > 10)
|
else if (target.value < 1 || target.value > 10)
|
||||||
error = "Guests must be between 1 and 10."
|
error = "Guests must be between 1 and 10."
|
||||||
setGuestsError(error)
|
setGuestsError(error)
|
||||||
|
@ -49,8 +49,7 @@ export const BookingForm = ({
|
||||||
|
|
||||||
const onOccasionChange = ({ target }) => {
|
const onOccasionChange = ({ target }) => {
|
||||||
let error = ""
|
let error = ""
|
||||||
if (target.value === "") error = "Field is required"
|
if (
|
||||||
else if (
|
|
||||||
target.value !== "Other" &&
|
target.value !== "Other" &&
|
||||||
target.value !== "Birthday" &&
|
target.value !== "Birthday" &&
|
||||||
target.value !== "Anniversary"
|
target.value !== "Anniversary"
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
align-items: center;
|
align-items: center;
|
||||||
color: black;
|
color: black;
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 18rem;
|
min-height: 18rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.about h2 {
|
.about h2 {
|
||||||
|
|
Reference in a new issue