Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

467/add cypress testing #515

Merged
merged 46 commits into from
Mar 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
0752173
initial commit
Jess-White Jan 29, 2023
074399e
Added first cypress e2e test
Michael-McFaddin Feb 1, 2023
5d7f5ea
wip to drag and drop
Michael-McFaddin Feb 2, 2023
da57917
WIP
Michael-McFaddin Feb 5, 2023
869b3d1
WIP 02-07-23
Michael-McFaddin Feb 7, 2023
ac2a4e8
added cypress-drag-drop package
Michael-McFaddin Feb 14, 2023
3726ea6
added additional drag drop test
Michael-McFaddin Feb 16, 2023
cef1db8
started adding grant and fundingOrg e2e test
Michael-McFaddin Feb 24, 2023
53190b0
added category e2e test
Michael-McFaddin Mar 1, 2023
3abc185
added additiona crud test to funding org test
Michael-McFaddin Mar 3, 2023
9a4f6f3
feat: finished fundingOrg e2e tests
Michael-McFaddin Mar 8, 2023
800cbb9
feat: updated category delete and e2e tests
Michael-McFaddin Mar 10, 2023
f2903a9
feat: finished grants index e2e tests
Michael-McFaddin Mar 24, 2023
49ce4c0
feat: added additional test and new dndV2 test file
Michael-McFaddin Apr 8, 2023
97dbc78
feat: moved dnd kit context inside GrantShowOverview, added dndV2 cyp…
Michael-McFaddin Apr 14, 2023
d9f69c5
feat: additional grantShow cypress tests
Michael-McFaddin Apr 15, 2023
bd68848
feat: continued with grantShow e2e tests
Michael-McFaddin Apr 19, 2023
9f47a71
feat: additional grantShow tests
Michael-McFaddin Apr 21, 2023
a04c94b
feat: wip more grant show tests
Michael-McFaddin Apr 27, 2023
bce1ac9
feat: finished grantShow tests, started grantShowOverview
Michael-McFaddin May 10, 2023
bacafaa
feat: additional drag and drop tests
Michael-McFaddin May 11, 2023
d1ebeff
updated tests to reflect seed data
Jess-White May 14, 2023
8a79de9
worked on intercepts WIP
Jess-White May 19, 2023
b178876
feat: updated fundingOrg e2e tests
Michael-McFaddin May 21, 2023
1e962f8
updated categories
Jess-White May 21, 2023
2ee0559
updated tests
Jess-White May 21, 2023
089748a
updated overview test
Jess-White May 22, 2023
5a01c38
feat: started rework of grant.cy
Michael-McFaddin May 22, 2023
6c98613
Merge branch '467/add-cypress-testing' of github.com:Jess-White/boile…
Michael-McFaddin May 22, 2023
c678368
feat: removed reloads from fundingOrg.cy, adjusted refetchFundingOrgs
Michael-McFaddin May 23, 2023
96a034c
feat: updated grant.cy to use fewer intercepts
Michael-McFaddin May 23, 2023
3cef705
updated grant tests
Jess-White May 23, 2023
98f0b6f
fix: category e2e test and moved test files to dedicated dir
Michael-McFaddin Jun 28, 2023
f07c816
fix: grant.cy test
Michael-McFaddin Jul 1, 2023
78ed440
fix: grantShow cypress test
Michael-McFaddin Jul 14, 2023
b176d95
feat: added wait for deleteBoilerplate
Michael-McFaddin Jul 28, 2023
e1131d3
fix: pulled develop and resolved
Michael-McFaddin Aug 4, 2023
55fe6a2
feat: updated tests to work with new mantine components
Michael-McFaddin Aug 31, 2023
40d4f95
feat: finished updating grantShowOverview e2e test
Michael-McFaddin Sep 14, 2023
3d28901
Merge branch 'develop' of github.com:Jess-White/boilerplate into 467/…
Michael-McFaddin Sep 14, 2023
dff78dc
fix: addressed linting issues for cypress examples
Michael-McFaddin Sep 15, 2023
717f400
fix: ci issue fix
Michael-McFaddin Sep 15, 2023
e072db6
fix: updated package-lock
Michael-McFaddin Sep 15, 2023
e61d2cd
fix: adjustments for failing linter
Michael-McFaddin Sep 22, 2023
e8b19ae
fix: pulled develop and resolved conflicts
Michael-McFaddin Sep 30, 2023
50d92fa
fix: pulled develop and resolved
Michael-McFaddin Mar 8, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
node_modules/
!.storybook/
cypress/e2e/1-getting-started/
cypress/e2e/2-advanced-examples/
16 changes: 11 additions & 5 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
{
"extends": ["react-app", "plugin:prettier/recommended"],
"extends": [
"react-app",
"plugin:prettier/recommended",
"plugin:cypress/recommended"
],
"rules": {
"no-unused-vars": ["error", { "varsIgnorePattern": "^_" }]
},
"overrides": [
{
"files": [
"**/*.stories.*"
],
"files": ["**/*.stories.*"],
"rules": {
"import/no-anonymous-default-export": "off"
}
}
]
],
"globals": {
"cy": true
},
"plugins": ["cypress"]
}
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,9 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# cypress testing
/cypress/videos
/cypress/screenshots
/cypress/reports
/cypress/fixtures
26 changes: 26 additions & 0 deletions cypress.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
const { defineConfig } = require("cypress");
// const customViteConfig = require("./vite.config");

module.exports = defineConfig({
e2e: {
// eslint-disable-next-line no-unused-vars
setupNodeEvents(on, config) {
// implement node event listeners here
},
},
component: {
devServer: {
framework: "react",
bundler: "vite",
// optionally pass in vite config
// viteConfig: customViteConfig,
// or a function - the result is merged with
// any `vite.config` file that is detected
// viteConfig: async () => {
// // ... do things ...
// const modifiedConfig = await injectCustomConfig(baseConfig);
// return modifiedConfig;
// },
},
},
});
144 changes: 144 additions & 0 deletions cypress/e2e/1-getting-started/todo.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
/* eslint-disable prettier/prettier */
/// <reference types="cypress" />

// 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 <label>, which is lowest-level element that contains the text.
// In order to check the item, we'll find the <input> element for this <label>
// by traversing up the dom to the parent element. From there, we can `find`
// the child checkbox <input> element and use the `check` command to check it.
cy.contains("Pay electric bill")
.parent()
.find("input[type=checkbox]")
.check();

// Now that we've checked the button, we can go ahead and make sure
// that the list element is now marked as completed.
// Again we'll use `contains` to find the <label> element and then use the `parents` command
// to traverse multiple levels up the dom until we find the corresponding <li> element.
// Once we get that element, we can assert that it has the completed class.
cy.contains("Pay electric bill")
.parents("li")
.should("have.class", "completed");
});

context("with a checked task", () => {
beforeEach(() => {
// We'll take the command we used above to check off an element
// Since we want to perform multiple tests that start with checking
// one element, we put it in the beforeEach hook
// so that it runs at the start of every test.
cy.contains("Pay electric bill")
.parent()
.find("input[type=checkbox]")
.check();
});

it("can filter for uncompleted tasks", () => {
// We'll click on the "active" button in order to
// display only incomplete items
cy.contains("Active").click();

// After filtering, we can assert that there is only the one
// incomplete item in the list.
cy.get(".todo-list li")
.should("have.length", 1)
.first()
.should("have.text", "Walk the dog");

// For good measure, let's also assert that the task we checked off
// does not exist on the page.
cy.contains("Pay electric bill").should("not.exist");
});

it("can filter for completed tasks", () => {
// We can perform similar steps as the test above to ensure
// that only completed tasks are shown
cy.contains("Completed").click();

cy.get(".todo-list li")
.should("have.length", 1)
.first()
.should("have.text", "Pay electric bill");

cy.contains("Walk the dog").should("not.exist");
});

it("can delete all completed tasks", () => {
// First, let's click the "Clear completed" button
// `contains` is actually serving two purposes here.
// First, it's ensuring that the button exists within the dom.
// This button only appears when at least one task is checked
// so this command is implicitly verifying that it does exist.
// Second, it selects the button so we can click it.
cy.contains("Clear completed").click();

// Then we can make sure that there is only one element
// in the list and our element does not exist
cy.get(".todo-list li")
.should("have.length", 1)
.should("not.have.text", "Pay electric bill");

// Finally, make sure that the clear button no longer exists.
cy.contains("Clear completed").should("not.exist");
});
});
});
Loading
Loading