From 25ade7a0cc3fb63c17577de08a747279d43324d7 Mon Sep 17 00:00:00 2001 From: Chris Risner Date: Wed, 4 Oct 2023 12:19:13 -0500 Subject: [PATCH] Chris (#8) * added cypress, updated Highlight with API monitoring * update cypress workflow * commented out example cypress tests * corrected variable type payoffLenders --- .github/workflows/cypress.yml | 41 + cypress.config.ts | 11 + cypress/e2e/1-examples/examples.ts | 2475 +++++++++++++ cypress/e2e/primaryBuyer.cy.ts | 105 + cypress/e2e/primaryCoBuyer.cy.ts | 103 + cypress/e2e/primaryTrade.cy.ts | 86 + cypress/fixtures/example.json | 5 + cypress/fixtures/profile.json | 5 + cypress/fixtures/users.json | 232 ++ cypress/support/commands.ts | 52 + cypress/support/e2e.ts | 20 + next.config.js | 2 +- package.json | 10 +- src/app/Providers.tsx | 8 +- src/app/api/credit-app/route.ts | 5 +- src/app/api/payoff-quote/route.ts | 20 - src/app/constants.ts | 4 +- src/app/layout.tsx | 3 +- src/app/success/page.tsx | 2 +- src/app/utils/withAppRouterHighlight.ts | 6 + src/components/form-fields/DateField.tsx | 1 + src/hooks/usePayoffLenders.tsx | 12 +- src/hooks/useTradeQuery.tsx | 2 - tsconfig.json | 9 +- yarn.lock | 4295 +++++++++++++--------- 25 files changed, 5711 insertions(+), 1803 deletions(-) create mode 100644 .github/workflows/cypress.yml create mode 100644 cypress.config.ts create mode 100644 cypress/e2e/1-examples/examples.ts create mode 100644 cypress/e2e/primaryBuyer.cy.ts create mode 100644 cypress/e2e/primaryCoBuyer.cy.ts create mode 100644 cypress/e2e/primaryTrade.cy.ts create mode 100644 cypress/fixtures/example.json create mode 100644 cypress/fixtures/profile.json create mode 100644 cypress/fixtures/users.json create mode 100644 cypress/support/commands.ts create mode 100644 cypress/support/e2e.ts delete mode 100644 src/app/api/payoff-quote/route.ts create mode 100644 src/app/utils/withAppRouterHighlight.ts diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml new file mode 100644 index 0000000..bb0921a --- /dev/null +++ b/.github/workflows/cypress.yml @@ -0,0 +1,41 @@ +name: E2E Tests +on: [push] +jobs: + cypress-run: + runs-on: ubuntu-latest + # Runs tests in parallel with matrix strategy https://docs.cypress.io/guides/guides/parallelization + # https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs + # Also see warning here https://github.com/cypress-io/github-action#parallel + strategy: + fail-fast: false # https://github.com/cypress-io/github-action/issues/48 + matrix: + containers: [1, 2] # Uses 2 parallel instances + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Cypress run + # Uses the official Cypress GitHub action https://github.com/cypress-io/github-action + uses: cypress-io/github-action@v6 + with: + build: npm run build + start: npm start + # wait-on: 'http://localhost:3000' # Waits for above + # Records to Cypress Cloud + # https://docs.cypress.io/guides/cloud/projects#Set-up-a-project-to-record + record: true + parallel: true # Runs test in parallel using settings above + env: + # For recording and parallelization to work you must set your CYPRESS_RECORD_KEY + # in GitHub repo → Settings → Secrets → Actions + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + # Creating a token https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # after the test run completes store videos and any screenshots + - uses: actions/upload-artifact@v3 + # add the line below to store screenshots only on failures + # if: failure() + with: + name: cypress-screenshots + path: cypress/screenshots + if-no-files-found: ignore # 'warn' or 'error' are also available, defaults to `warn` + \ No newline at end of file diff --git a/cypress.config.ts b/cypress.config.ts new file mode 100644 index 0000000..7e6bd36 --- /dev/null +++ b/cypress.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from "cypress"; + +export default defineConfig({ + projectId: 'xyzfv1', + e2e: { + baseUrl: 'http://localhost:3000', + setupNodeEvents(on, config) { + // implement node event listeners here + }, + }, +}) diff --git a/cypress/e2e/1-examples/examples.ts b/cypress/e2e/1-examples/examples.ts new file mode 100644 index 0000000..f91e51a --- /dev/null +++ b/cypress/e2e/1-examples/examples.ts @@ -0,0 +1,2475 @@ +// // /// + +// // // 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