diff --git a/package.json b/package.json index cf6e1bc772..fc2b66a549 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "build": "react-scripts build", "test": "react-scripts test", "test:cov": "react-scripts test --coverage --watchAll", + "test:json": "react-scripts test --json --watchAll=false --outputFile jest-output.json --coverage", "eject": "react-scripts eject", "lint": "eslint ./src --ext .tsx --ext .ts --max-warnings 0", "eslint-output": "eslint-output ./src --ext .tsx --ext .ts --max-warnings 0", diff --git a/public/tasks/task-first-branch.md b/public/tasks/task-first-branch.md new file mode 100644 index 0000000000..94333338a0 --- /dev/null +++ b/public/tasks/task-first-branch.md @@ -0,0 +1,5 @@ +# Task - First Branch + +Version: 0.0.1 + +Pass a short test to have certain text on the page. diff --git a/public/tasks/task-html-css.md b/public/tasks/task-html-css.md new file mode 100644 index 0000000000..ebc0efcba5 --- /dev/null +++ b/public/tasks/task-html-css.md @@ -0,0 +1,5 @@ +# Task - HTML/CSS + +Version: 0.0.1 + +Add in some HTML and CSS, including a fancy looking button. diff --git a/src/App.css b/src/App.css index ad32fac073..fe38ddbaef 100644 --- a/src/App.css +++ b/src/App.css @@ -15,14 +15,14 @@ .App-header { width: 100%; - background-color: #282c34; + background-color: #4432ac; min-height: 40vh; display: flex; flex-direction: column; align-items: center; justify-content: center; font-size: calc(10px + 2vmin); - color: white; + color: rgb(167, 168, 230); } .App-link { diff --git a/src/App.tsx b/src/App.tsx index b77558eaac..bf555bc14e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,5 +1,7 @@ import React from "react"; import "./App.css"; +import paris from "./paris.jpg"; +import { Button, Container, Row, Col } from "react-bootstrap"; function App(): React.JSX.Element { return ( @@ -11,6 +13,47 @@ function App(): React.JSX.Element { Edit src/App.tsx and save. This page will automatically reload.

+

Samita Bomasamudram

+

Hello World!!

+

This is a header

+ Art of Paris + + + + + + + First column +
+ + + Second column +
+ + +
); } diff --git a/src/HtmlCss.test.tsx b/src/HtmlCss.test.tsx new file mode 100644 index 0000000000..320cb97524 --- /dev/null +++ b/src/HtmlCss.test.tsx @@ -0,0 +1,83 @@ +import React from "react"; +import { render, screen } from "@testing-library/react"; +import App from "./App"; +import userEvent from "@testing-library/user-event"; + +describe("Some HTML Elements are added.", () => { + test("(2 pts) There is a header", () => { + render(); + const header = screen.getByRole("heading"); + expect(header).toBeInTheDocument(); + }); + + test("(2 pts) There is an image with alt text", () => { + render(); + const image = screen.getByRole("img"); + expect(image).toBeInTheDocument(); + expect(image).toHaveAttribute("alt"); + }); + + test("(2 pts) There is a list with at least three elements", () => { + render(); + const list = screen.getByRole("list"); + expect(list).toBeInTheDocument(); + expect(list.children.length).toBeGreaterThanOrEqual(3); + }); +}); + +describe("(2 pts) Some basic CSS is added.", () => { + test("The background color of the header area is different", () => { + render(); + const banner = screen.getByRole("banner"); + expect(banner).not.toHaveStyle({ + "background-color": "rgb(40, 44, 52)", + }); + }); +}); + +describe("(2 pts) Some Bootstrap Elements are added", () => { + test("There is one bootstrap button with the text 'Log Hello World'", () => { + render(); + const button = screen.getByRole("button", { name: /Log Hello World/i }); + expect(button).toBeInTheDocument(); + expect(button).toHaveClass("btn"); + expect(button).toHaveClass("btn-primary"); + }); + + test("(2 pts) Not clicking the bootstrap button does not logs 'Hello World!'", () => { + const consoleSpy = jest.spyOn(console, "log"); + render(); + expect(consoleSpy).not.toHaveBeenCalledWith("Hello World!"); + }); + + test("(2 pts) Clicking the bootstrap button logs 'Hello World!'", () => { + const consoleSpy = jest.spyOn(console, "log"); + render(); + const button = screen.getByRole("button", { name: /Log Hello World/i }); + userEvent.click(button); + expect(consoleSpy).toHaveBeenCalledWith("Hello World!"); + }); +}); + +describe("Some additional CSS was added", () => { + test("(2 pts) checks if any element has a background color of red", () => { + const { container } = render(); + // Get all elements in the rendered container + const elements = container.querySelectorAll("*"); + + // Check if any element has a background color of red + let foundRedBackground = false; + + elements.forEach((element) => { + const style = getComputedStyle(element); + if ( + style.backgroundColor === "red" || + style.backgroundColor === "rgb(255, 0, 0)" + ) { + foundRedBackground = true; + } + }); + + expect(foundRedBackground).toBe(true); + }); +}); diff --git a/src/paris.jpg b/src/paris.jpg new file mode 100644 index 0000000000..d2e5f37a80 Binary files /dev/null and b/src/paris.jpg differ diff --git a/src/text.test.tsx b/src/text.test.tsx new file mode 100644 index 0000000000..f99a063e76 --- /dev/null +++ b/src/text.test.tsx @@ -0,0 +1,9 @@ +import React from "react"; +import { render, screen } from "@testing-library/react"; +import App from "./App"; + +test("renders the text 'Hello World' somewhere", () => { + render(); + const texts = screen.getAllByText(/Hello World/); + expect(texts.length).toBeGreaterThanOrEqual(1); +});