From 5f49277ef9d4b695aecafba380e235bcb18ff256 Mon Sep 17 00:00:00 2001 From: franciscocha Date: Mon, 14 Aug 2023 19:15:18 -1000 Subject: [PATCH] issue-142 - feat: Custom 500 page and cypress testing framework --- cypress.config.ts | 10 + cypress/e2e/1-getting-started/todo.cy.js | 143 + cypress/e2e/2-advanced-examples/actions.cy.js | 315 +++ .../e2e/2-advanced-examples/aliasing.cy.js | 43 + .../e2e/2-advanced-examples/assertions.cy.js | 175 ++ .../e2e/2-advanced-examples/connectors.cy.js | 96 + cypress/e2e/2-advanced-examples/cookies.cy.js | 122 + .../e2e/2-advanced-examples/cypress_api.cy.js | 197 ++ cypress/e2e/2-advanced-examples/files.cy.js | 87 + .../e2e/2-advanced-examples/location.cy.js | 34 + cypress/e2e/2-advanced-examples/misc.cy.js | 106 + .../e2e/2-advanced-examples/navigation.cy.js | 56 + .../network_requests.cy.js | 184 ++ .../e2e/2-advanced-examples/querying.cy.js | 106 + .../spies_stubs_clocks.cy.js | 213 ++ cypress/e2e/2-advanced-examples/storage.cy.js | 116 + .../e2e/2-advanced-examples/traversal.cy.js | 116 + .../e2e/2-advanced-examples/utilities.cy.js | 109 + .../e2e/2-advanced-examples/viewport.cy.js | 59 + cypress/e2e/2-advanced-examples/waiting.cy.js | 33 + cypress/e2e/2-advanced-examples/window.cy.js | 22 + cypress/e2e/HIERR/404.cy.js | 15 + cypress/e2e/HIERR/500.cy.js | 11 + cypress/e2e/HIERR/home.cy.js | 15 + cypress/e2e/HIERR/login.cy.js | 19 + cypress/fixtures/example.json | 5 + cypress/support/commands.ts | 37 + cypress/support/e2e.ts | 20 + package-lock.json | 2329 ++++++++++++++++- package.json | 2 + src/pages/500.js | 3 + src/pages/api/export.js | 42 +- src/pages/polissurvey.tsx | 2 +- 33 files changed, 4775 insertions(+), 67 deletions(-) create mode 100644 cypress.config.ts create mode 100644 cypress/e2e/1-getting-started/todo.cy.js create mode 100644 cypress/e2e/2-advanced-examples/actions.cy.js create mode 100644 cypress/e2e/2-advanced-examples/aliasing.cy.js create mode 100644 cypress/e2e/2-advanced-examples/assertions.cy.js create mode 100644 cypress/e2e/2-advanced-examples/connectors.cy.js create mode 100644 cypress/e2e/2-advanced-examples/cookies.cy.js create mode 100644 cypress/e2e/2-advanced-examples/cypress_api.cy.js create mode 100644 cypress/e2e/2-advanced-examples/files.cy.js create mode 100644 cypress/e2e/2-advanced-examples/location.cy.js create mode 100644 cypress/e2e/2-advanced-examples/misc.cy.js create mode 100644 cypress/e2e/2-advanced-examples/navigation.cy.js create mode 100644 cypress/e2e/2-advanced-examples/network_requests.cy.js create mode 100644 cypress/e2e/2-advanced-examples/querying.cy.js create mode 100644 cypress/e2e/2-advanced-examples/spies_stubs_clocks.cy.js create mode 100644 cypress/e2e/2-advanced-examples/storage.cy.js create mode 100644 cypress/e2e/2-advanced-examples/traversal.cy.js create mode 100644 cypress/e2e/2-advanced-examples/utilities.cy.js create mode 100644 cypress/e2e/2-advanced-examples/viewport.cy.js create mode 100644 cypress/e2e/2-advanced-examples/waiting.cy.js create mode 100644 cypress/e2e/2-advanced-examples/window.cy.js create mode 100644 cypress/e2e/HIERR/404.cy.js create mode 100644 cypress/e2e/HIERR/500.cy.js create mode 100644 cypress/e2e/HIERR/home.cy.js create mode 100644 cypress/e2e/HIERR/login.cy.js create mode 100644 cypress/fixtures/example.json create mode 100644 cypress/support/commands.ts create mode 100644 cypress/support/e2e.ts create mode 100644 src/pages/500.js diff --git a/cypress.config.ts b/cypress.config.ts new file mode 100644 index 0000000..78eed99 --- /dev/null +++ b/cypress.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from "cypress"; + +export default defineConfig({ + e2e: { + baseUrl: "http://localhost:3000", + setupNodeEvents(on, config) { + // implement node event listeners here + }, + }, +}); diff --git a/cypress/e2e/1-getting-started/todo.cy.js b/cypress/e2e/1-getting-started/todo.cy.js new file mode 100644 index 0000000..623893c --- /dev/null +++ b/cypress/e2e/1-getting-started/todo.cy.js @@ -0,0 +1,143 @@ +/// + +// Welcome to Cypress! +// +// This spec file contains a variety of sample tests +// for a todo list app that are designed to demonstrate +// the power of writing tests in Cypress. +// +// To learn more about how Cypress works and +// what makes it such an awesome testing tool, +// please read our getting started guide: +// https://on.cypress.io/introduction-to-cypress + +describe("example to-do app", () => { + beforeEach(() => { + // Cypress starts out with a blank slate for each test + // so we must tell it to visit our website with the `cy.visit()` command. + // Since we want to visit the same URL at the start of all our tests, + // we include it in our beforeEach function so that it runs before each test + cy.visit("https://example.cypress.io/todo"); + }); + + it("displays two todo items by default", () => { + // We use the `cy.get()` command to get all elements that match the selector. + // Then, we use `should` to assert that there are two matched items, + // which are the two default items. + cy.get(".todo-list li").should("have.length", 2); + + // We can go even further and check that the default todos each contain + // the correct text. We use the `first` and `last` functions + // to get just the first and last matched elements individually, + // and then perform an assertion with `should`. + cy.get(".todo-list li").first().should("have.text", "Pay electric bill"); + cy.get(".todo-list li").last().should("have.text", "Walk the dog"); + }); + + it("can add new todo items", () => { + // We'll store our item text in a variable so we can reuse it + const newItem = "Feed the cat"; + + // Let's get the input element and use the `type` command to + // input our new list item. After typing the content of our item, + // we need to type the enter key as well in order to submit the input. + // This input has a data-test attribute so we'll use that to select the + // element in accordance with best practices: + // https://on.cypress.io/selecting-elements + cy.get("[data-test=new-todo]").type(`${newItem}{enter}`); + + // Now that we've typed our new item, let's check that it actually was added to the list. + // Since it's the newest item, it should exist as the last element in the list. + // In addition, with the two default items, we should have a total of 3 elements in the list. + // Since assertions yield the element that was asserted on, + // we can chain both of these assertions together into a single statement. + cy.get(".todo-list li") + .should("have.length", 3) + .last() + .should("have.text", newItem); + }); + + it("can check off an item as completed", () => { + // In addition to using the `get` command to get an element by selector, + // we can also use the `contains` command to get an element by its contents. + // However, this will yield the