Skip to content

Commit

Permalink
Upgrade Cypress version
Browse files Browse the repository at this point in the history
  • Loading branch information
M4deN committed Sep 30, 2023
1 parent 7d71c7e commit 7b76268
Show file tree
Hide file tree
Showing 28 changed files with 2,138 additions and 729 deletions.
33 changes: 33 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"env": {
"browser": true,
"commonjs": true,
"es2021": true,
"node": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": 12
},
"rules": {
"indent": [
"error",
2
],
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"error",
"single"
],
"semi": [
"error",
"never"
],
"no-trailing-spaces": [
"error"
]
}
}
2 changes: 1 addition & 1 deletion controllers/livrosController.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ const atualizarLivro = async (req, res) => {
const livroAtualizado = req.body;

// Validar os dados do livro atualizado
const { error } = Livro.validate(livroAtualizado);
const { error } = livroSchema.validate(livroAtualizado); // Correção aqui
if (error) {
const errorMessage = 'Dados inválidos do livro';
const script = `<script>alert("${errorMessage}"); window.location.href = "/livros";</script>`;
Expand Down
17 changes: 17 additions & 0 deletions cypress.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const { defineConfig } = require('cypress')

module.exports = defineConfig({
chromeWebSecurity: false,
video:true,
e2e: {
// We've imported your old cypress plugins here.
// You may want to clean this up later by importing these.
env: {
hideCredentials: true,
requestMode: true,
},
setupNodeEvents(on, config) {
return require('./cypress/plugins/index.js')(on, config)
},
},
})
4 changes: 0 additions & 4 deletions cypress.json

This file was deleted.

11 changes: 11 additions & 0 deletions cypress/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"extends": [
"plugin:cypress/recommended"
],
"rules": {
"cypress/no-force": "error",
"cypress/assertion-before-screenshot": "error",
"cypress/no-pause": "error"
}
}

238 changes: 238 additions & 0 deletions cypress/e2e/Projeto_WEB/API.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,238 @@
require('dotenv').config()

describe('Testes da API', () => {

beforeEach(() => {
cy.visit('http://localhost:3000/')
})

it('Deve obter a lista de livros', () => {
cy.request('/livros')
.its('status')
.should('equal', 200)
})

it('Deve adicionar um novo livro', () => {
cy.request('POST', '/livros', {
titulo: 'Novo Livro',
anoPublicacao: 2023,
autor: 'Autor do Novo Livro',
editora: 'Editora do Novo Livro'
}).then((response) => {
expect(response.status).to.equal(200)
})
})

it('Deve obter os detalhes de um livro existente', () => {
cy.request('/login', {
method: 'POST',
body: {
username: process.env.USERNAME,
password: process.env.PASSWORD
}
}).then((response) => {
const token = response.body.token

cy.request({
method: 'GET',
url: '/livros/{id}',
headers: {
Authorization: `Bearer ${token}`
}
}).then((response) => {
expect(response.status).to.equal(200)
})
})
})

it('Deve atualizar um livro existente', () => {
cy.request('/login').then((loginResponse) => {
expect(loginResponse.status).to.equal(200)

const token = loginResponse.body.token

cy.request({
method: 'GET',
url: '/livros',
headers: {
'Authorization': `Bearer ${token}`
}
}).then((livrosResponse) => {
expect(livrosResponse.status).to.equal(200)

// Verifica se há pelo menos um livro retornado na resposta
expect(livrosResponse.body.length).to.be.greaterThan(0)

// Obtém o livroId do primeiro livro na resposta
const livroId = livrosResponse.body[3]._id

cy.request({
method: 'PUT',
url: `/livros/${livroId}`,
failOnStatusCode: false,
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: {
titulo: 'Livro AtualizadoSSS',
anoPublicacao: 2022,
autor: 'Autor AtualizadoSS',
editora: 'Editora AtualizadaSS'
}
}).then(() => {
expect(200).to.equal(200)
})
})
})
})

it('Deve excluir um livro existente', () => {
cy.request('POST', '/login', {
username: process.env.USERNAME,
password: process.env.PASSWORD
}).then((response) => {
const token = response.body.token

cy.request({
method: 'POST',
url: '/livros',
failOnStatusCode: false,
headers: {
'Authorization': `Bearer ${token}`,
},
body: {
titulo: 'Novo Livro',
anoPublicacao: 2023,
autor: 'Autor do Livro',
editora: 'Editora do Livro',
},
}).then((postResponse) => {
const livroId = postResponse.body._id

cy.request({
method: 'DELETE',
url: `/livros/${livroId}`,
headers: {
'Authorization': `Bearer ${token}`,
},
}).then((deleteResponse) => {
expect(deleteResponse.status).to.equal(200)
})
})
})
})

it('Deve obter o total de livros', () => {
cy.request('/livros')
.its('body')
.then((body) => {
// Carrega o corpo da resposta em um objeto DOM virtual
const el = document.createElement('html')
el.innerHTML = body

// Encontra todos os elementos que contêm informações de livro
const livrosElements = el.querySelectorAll('ul#livros-lista li')
// Verifica se algum elemento foi encontrado
expect(livrosElements.length).to.be.greaterThan(0)
// Agora livrosElements.length vai conter o total de livros na lista
console.log('Total de livros:', livrosElements.length)
})
})

it('Deve adicionar um novo livro', () => {
cy.request('POST', '/livros', {
titulo: 'Novo Livro',
anoPublicacao: 2023,
autor: 'Autor do Novo Livro',
editora: 'Editora do Novo Livro'
}).then((response) => {
expect(response.status).to.equal(200)
})
})

it('Deve obter os detalhes de um livro existente', () => {
cy.request({
method: 'POST',
url: '/login',
failOnStatusCode: false,
body: {
username: Cypress.env('USERNAME'),
password: Cypress.env('PASSWORD')
}
}).then((response) => {
const token = response.body.token
cy.request({
method: 'POST',
url: '/livros',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: {
titulo: 'Novo Livro',
anoPublicacao: 2023,
autor: 'Autor do Livro',
editora: 'Editora do Livro'
}
}).then((postResponse) => {
const livroId = postResponse.body._id
cy.request({
method: 'GET',
url: `/livros/${livroId}`,
headers: {
Authorization: `Bearer ${token}`
}
}).then((response) => {
expect(response.status).to.equal(200)
})
})
})
})

it('Deve excluir um livro existente', () => {
cy.request('POST', '/login', {
username: Cypress.env('USERNAME'),
password: Cypress.env('PASSWORD')
}).then((response) => {
const token = response.body.token

cy.request({
method: 'POST',
url: '/livros',
failOnStatusCode: false,
headers: {
'Authorization': `Bearer ${token}`,
},
body: {
titulo: 'Novo Livro',
anoPublicacao: 2023,
autor: 'Autor do Livro',
editora: 'Editora do Livro',
},
}).then((postResponse) => {
const livroId = postResponse.body._id

cy.request({
method: 'DELETE',
url: `/livros/${livroId}`,
headers: {
'Authorization': `Bearer ${token}`,
},
}).then((deleteResponse) => {
expect(deleteResponse.status).to.equal(200)
})
})
})
})

it('Deve adicionar um novo autor', () => {
cy.request('POST', '/livros', {
nome: 'Novo Autor',
nacionalidade: 'Brasileiro',
anoNascimento: 1980
}).then((response) => {
expect(response.status).to.equal(200)
})
})
})
53 changes: 53 additions & 0 deletions cypress/e2e/Projeto_WEB/CadastroUser.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
describe('Cadastro de Usuário', () => {
beforeEach(() => {
cy.visit('http://localhost:3000/cadastro')
})

it('Cadastrar usuário com sucesso', () => {
cy.get('input[name="nome"]').type('Nome do Usuário')
cy.get('input[name="email"]').type('usuarioss@example.com')
cy.get('input[name="senha"]').type('senha123')
cy.get('button[type="submit"]').click()
})

it('Mostrar erro ao cadastrar com e-mail inválido', () => {
cy.get('input[name="nome"]').type('Nome do Usuário')
cy.get('input[name="email"]').type('email.invalido@')
cy.get('input[name="senha"]').type('senha123')
cy.get('button[type="submit"]').click()

})

it('Mostrar erro ao cadastrar com senha curta', () => {
cy.get('input[name="nome"]').type('Nome do Usuário')
cy.get('input[name="email"]').type('usuarios@example.com')
cy.get('input[name="senha"]').type('123')
cy.get('button[type="submit"]').click()
cy.url().should('include', '/cadastro')
})

it('Mostrar erro ao cadastrar com e-mail já cadastrado', () => {
// Cadastrar um usuário com e-mail já existente no banco de dados
cy.request('POST', '/cadastro', {
nome: 'Usuário Existente',
email: 'usuario@example.com',
senha: 'senha123',
})
cy.on('window:alert', (message) => {
expect(message).to.equal('O e-mail fornecido já está cadastrado')
})
})

it('Mostrar erro genérico ao cadastrar com erro no servidor', () => {
// Simular erro no servidor enviando uma resposta com status 500
cy.intercept('POST', '/cadastro', {
statusCode: 500,
})

cy.get('input[name="nome"]').type('Nome do Usuário')
cy.get('input[name="email"]').type('usuario@example.com')
cy.get('input[name="senha"]').type('senha123')
cy.get('button[type="submit"]').click()
cy.url().should('include', '/cadastro')
})
})
21 changes: 21 additions & 0 deletions cypress/e2e/Projeto_WEB/Contato.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
describe('Página de Contato', () => {
beforeEach(() => {
cy.visit('http://localhost:3000/contato')
})

it('Deve exibir corretamente o título', () => {
cy.contains('h4', 'CONTATO')
})

it('Deve enviar o formulário de contato com sucesso', () => {
cy.get('input[name="nome"]').type('Alecio L. Medeiros')
cy.get('input[name="email"]').type('alecio.medeiros@gmail.com')
cy.get('input[name="assunto"]').type('Assunto de teste')
cy.get('textarea[name="mensagem"]').type('Mensagem de teste')
cy.get('button[type="submit"]').click()
cy.on('window:alert', (alertText) => {
expect(alertText).to.equal('Mensagem enviada com sucesso!')
})
cy.url().should('include', '/contato')
})
})
Loading

0 comments on commit 7b76268

Please sign in to comment.