Add cypress tests

This commit is contained in:
Jackson Harper 2022-03-30 21:22:43 -07:00
parent 1c0d836ef5
commit 10692a2131
11 changed files with 188 additions and 0 deletions

View file

@ -0,0 +1,2 @@
Run `yarn && yarn cypress open`

View file

@ -0,0 +1,8 @@
{
"baseUrl": "http://localhost:3000",
"experimentalSessionSupport": true,
"fixturesFolder": false,
"supportFile": false,
"pluginsFile": false,
"video": false
}

View file

@ -0,0 +1,5 @@
{
"name": "Using fixtures to represent data",
"email": "hello@cypress.io",
"body": "Fixtures are a great way to mock data for responses to routes"
}

View file

@ -0,0 +1,42 @@
const email = 'tester@omnivore.app'
const username = 'testuser'
const password = 'testpassword'
const fullName = 'Test User'
describe('Register with email', () => {
it('creates a new user', function () {
cy.visit('/email-registration')
cy.get('input[name=email]').type(email)
cy.get('input[name=username]').type(username)
cy.get('input[name=password]').type(password)
cy.get('input[name=name]').type(fullName)
cy.get('form').submit()
// we should be redirected to /dashboard
cy.location('pathname').should('include', '/email-login')
})
})
describe('Login with email', () => {
it('sets auth token and redirects', function () {
cy.visit('/email-login')
cy.get('input[name=email]').type(email)
cy.get('input[name=password]').type(password)
cy.get('form').submit()
cy.getCookie('auth').should('exist')
cy.location('pathname').should('include', '/home')
})
})
/*
// our auth cookie should be present
// UI should reflect this user being logged in
cy.get('h1').should('contain', 'jane.lane')
*/

View file

@ -0,0 +1,30 @@
describe('add link button', () => {
before(() => {
const email = 'tester@omnivore.app'
// const username = 'testuser'
const password = 'testpassword'
cy.login(email, password)
cy.visit('/home');
});
it('should add a link', () => {
// Use keyboard command to open add link modal
cy.get('body').type('a')
cy.focused().type('https://jacksonh.org/{enter}')
// wait for the link to be added
cy.wait(2000)
cy.reload()
// cy.get('[data-testid="add-link-button"]').click();
// cy.get('[data-testid="link-input"]').type('https://www.google.com');
// cy.get('[data-testid="link-input"]').type('{enter}');
// cy.get('[data-testid="link-input"]').should('have.value', '');
// cy.get('[data-testid="link-input"]').type('https://www.google.com');
// cy.get('[data-testid="link-input"]').type('{enter}');
// cy.get('[data-testid="link-input"]').should('have.value', '');
});
});

View file

@ -0,0 +1,8 @@
describe('pages that require auth', () => {
it('should add a link', () => {
cy.visit('/home')
cy.location('pathname')
.should('be.equal', '/login')
});
});

View file

@ -0,0 +1,22 @@
/// <reference types="cypress" />
// ***********************************************************
// This example plugins/index.js can be used to load plugins
//
// You can change the location of this file or turn off loading
// the plugins file with the 'pluginsFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/plugins-guide
// ***********************************************************
// This function is called when a project is opened or re-opened (e.g. due to
// the project's config changing)
/**
* @type {Cypress.PluginConfig}
*/
// eslint-disable-next-line no-unused-vars
module.exports = (on, config) => {
// `on` is used to hook into various events Cypress emits
// `config` is the resolved Cypress config
}

View file

@ -0,0 +1,16 @@
import '@testing-library/cypress/add-commands';
Cypress.Commands.add('login', (email, password) => {
cy.session([email, password], () => {
cy.visit('/email-login')
cy.get('input[name=email]').type(email)
cy.get('input[name=password]').type(password)
cy.get('form').submit()
cy.getCookie('auth').should('exist')
cy.location('pathname').should('include', '/home')
})
})

View file

@ -0,0 +1,20 @@
// ***********************************************************
// This example support/index.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
// Import commands.js using ES2015 syntax:
import './commands'
// Alternatively you can use CommonJS syntax:
// require('./commands')

View file

@ -0,0 +1,14 @@
{
"name": "@omnivore/cypress",
"version": "1.0.0",
"private": true,
"scripts": {},
"dependencies": {
"cypress": "^9.5.3"
},
"devDependencies": {},
"volta": {
"node": "14.18.0",
"yarn": "1.22.10"
}
}

View file

@ -0,0 +1,21 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"types": ["node", "jest", "@testing-library/jest-dom"],
"incremental": true
},
"include": ["additional.d.ts", "next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}