Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
48 changes: 48 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Node modules
node_modules/

# Cypress configuration and logs
cypress/screenshots/
cypress/videos/
cypress/reports/

# Cypress environment variables
cypress.env.json

# Cypress output
results/

# Logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# OS-specific files
.DS_Store
Thumbs.db

# IDE-specific files
.vscode/
.idea/

# Dependency directories
/node_modules
/.pnp
.pnp.js

# Testing framework directories
/coverage
/.nyc_output
/lerna-debug.log

# Production
/build
/dist

# Misc
*.log
*.csv
*.dat
*.out
*.pid
*.pid.lock
16 changes: 16 additions & 0 deletions cypress.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const { defineConfig } = require("cypress");

module.exports = defineConfig({
e2e: {
setupNodeEvents(on, config) {
return config;
},
viewportHeight: 880,
viewportWidth: 1280,
baseUrl: "https://qastage.buildbox.one/",
video: false,
chromeWebSecurity: false,
defaultCommandTimeout: 15000,

},
});
33 changes: 33 additions & 0 deletions cypress/data/data.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
const faker = require('faker-br');


const dadosPessoais = {
nome: faker.name.firstName(),
sobrenome:faker.name.lastName(),
dataNascimento: '13/07/1986',
cpf: faker.br.cpf(),
email: faker.internet.email(),
password: faker.internet.password(),
cpfInvalido: '77777777777',
cpfUsado: '762.826.786-68',
cpfIncompleto: '762.826.786',
emailInvalido: 'teste.com',

}
const endereco = {
cep: faker.address.zipCode(),
numero: faker.random.number(),
//pais: faker.address.country(),
complemento: faker.address.secondaryAddress(),
cidade: faker.address.city(),
estado: faker.address.stateAbbr(),
bairro: faker.address.streetName(),
rua: faker.address.streetName(),
cepInvalido: '12345678',

}


module.exports = {
dadosPessoais, endereco
}
24 changes: 24 additions & 0 deletions cypress/e2e/validaCadastroUsuario.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
describe('Validar formulario de cadastro', () => {

const { dadosPessoais } = require('/cypress/data/data.js');
const { endereco } = require('/cypress/data/data.js');
beforeEach(() => {
cy.visitaCadastroPage()
})

it('Valida cadastro com sucesso', () => {
cy.clicaBotaoFazerInscricao()
cy.log(dadosPessoais.dadaNascimento)
cy.preencheDadosFormularioCadastro(dadosPessoais)
cy.selecionaNivelIngles()
cy.get('#signup_submit_button_1').click()
cy.get('h2').contains('Endereço').should('exist');
cy.geracepValido().then((cep) => {
cy.wrap(cep).should('be.a', 'string');
cy.get('#signup-address-cep').type(cep);
})
cy.preencherEndereco(endereco)
cy.get('#signup_submit_button_3').click()
cy.get('h1').contains('Thank you for').should('exist');
})
})
149 changes: 149 additions & 0 deletions cypress/e2e/validaCamposObrigatoriosCadastroUsuario.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
describe('Valida campos da pagina de cadastro', () => {
const { dadosPessoais, endereco } = require('/cypress/data/data.js')
const MESSAGES = {
required: 'Please fill out this field.',
passwordsMismatch: 'As senhas não são iguais.',
emailsMismatch: 'Os e-mails não são iguais.',
checkBox: 'Please check this box if you want to proceed.',
cpfInUse: 'Este CPF já está em uso.',
invalidCpfFormat: 'Precisa corresponder ao formato esperado',
invalidEmail: 'Email inválido.',
invalidCep: 'CEP não encontrado.'
}

const SELECTORS = {
personalData: {
nome: '#signup-personal-data-firstName',
sobrenome: '#signup-personal-data-lastName',
dataNascimento: '#signup-personal-data-birthDate',
cpf: '#signup-personal-data-cpf',
email: '#signup-personal-data-email',
confirmEmail: '#signup-personal-data-email-confirm',
password: '#signup-personal-data-password',
confirmPassword: '#signup-personal-data-password-confirm',
termosDeUso: '#signup-personal-data-lgpd',
submitButton: '#signup_submit_button_1'
},
addressData: {
cep: '#signup-address-cep',
bairro: '#signup-address-neighborhood',
endereco: '#signup-address-street',
numero: '#signup-address-number',
submitButton: '#signup_submit_button_3'
},
error: '.input-error',
toastSuccess: 'ul.toasts-list > li.toast.toast-success.toast-number-0'
}

beforeEach(() => {
cy.visitaCadastroPage()
cy.clicaBotaoFazerInscricao()
cy.preencheDadosFormularioCadastro(dadosPessoais)
})

const validateRequiredField = (selector) => {
cy.validaMensangemDeErro(selector, MESSAGES.required)
}

const validateErrorMessage = (selector, message) => {
cy.validaMensangemDeErro(selector, message)
}

it('Validar campos obrigatórios da tela Dados pessoais', () => {
validateRequiredField(SELECTORS.personalData.nome)
validateRequiredField(SELECTORS.personalData.sobrenome)
validateRequiredField(SELECTORS.personalData.dataNascimento)
validateRequiredField(SELECTORS.personalData.cpf)
validateRequiredField(SELECTORS.personalData.email)
validateRequiredField(SELECTORS.personalData.password)
})

it('Validar campo obrigatório Termos de Uso', () => {
cy.get(SELECTORS.personalData.termosDeUso).uncheck()
cy.selecionaNivelIngles()
cy.get(SELECTORS.personalData.submitButton).click()
cy.get(`${SELECTORS.personalData.termosDeUso}:invalid`)
.should('have.length', 1)
.then(($el) => {
const message = $el[0].validationMessage
expect(message).to.eq(MESSAGES.checkBox)
})
})

it('Validar mensagens de divergência', () => {
validateErrorMessage(SELECTORS.personalData.confirmEmail, MESSAGES.emailsMismatch)
validateErrorMessage(SELECTORS.personalData.confirmPassword, MESSAGES.passwordsMismatch)
})

it('Validar mensagem de CPF já utilizado', () => {
cy.get(SELECTORS.personalData.cpf).clear().type(dadosPessoais.cpfUsado)
cy.get(SELECTORS.personalData.submitButton).click()
cy.get(SELECTORS.error).contains(MESSAGES.cpfInUse)
})

it('Validar mensagem de CPF formato inválido', () => {
cy.selecionaNivelIngles()
cy.get(SELECTORS.personalData.cpf).clear().type(dadosPessoais.cpfInvalido)
cy.get(SELECTORS.error).contains(MESSAGES.invalidCpfFormat)
})

it('Validar mensagem de CPF incompleto', () => {
cy.selecionaNivelIngles()
cy.get(SELECTORS.personalData.cpf).clear().type(dadosPessoais.cpfIncompleto)
cy.get(SELECTORS.personalData.submitButton).click()
cy.get(SELECTORS.error).contains(MESSAGES.invalidCpfFormat)
})

it('Validar mensagem de email inválido', () => {
cy.selecionaNivelIngles()
cy.get(SELECTORS.personalData.email).clear().type(dadosPessoais.emailInvalido)
cy.get(SELECTORS.personalData.submitButton).click()
cy.get(SELECTORS.error).contains(MESSAGES.invalidEmail)
})

it('Validar mensagem de confirmação de email inválido', () => {
cy.selecionaNivelIngles()
cy.get(SELECTORS.personalData.confirmEmail).clear().type(dadosPessoais.emailInvalido)
cy.get(SELECTORS.personalData.submitButton).click()
cy.get(SELECTORS.error).contains('Precisa ser email')
})

it('Validar mensagem de CEP obrigatorio', () => {
cy.selecionaNivelIngles()
cy.get(SELECTORS.personalData.submitButton).click()
cy.get(SELECTORS.addressData.submitButton).click()
validateRequiredField(SELECTORS.addressData.cep)
})
it('Validar mensagem de Bairro obrigatorio', () => {
cy.selecionaNivelIngles()
cy.get(SELECTORS.personalData.submitButton).click()
cy.geracepValido().then((cep) => {
cy.wrap(cep).should('be.a', 'string')
cy.get('#signup-address-cep').type(cep)
})
cy.preencherEndereco(endereco)
cy.get(SELECTORS.addressData.bairro).clear()
cy.get(SELECTORS.addressData.submitButton).click()
validateRequiredField(SELECTORS.addressData.bairro)
})
it('Validar mensagem de Endereco obrigatorio', () => {
cy.selecionaNivelIngles()
cy.get(SELECTORS.personalData.submitButton).click()
cy.geracepValido().then((cep) => {
cy.wrap(cep).should('be.a', 'string')
cy.get('#signup-address-cep').type(cep)
})
cy.preencherEndereco(endereco)
cy.get(SELECTORS.addressData.endereco).clear()
cy.get(SELECTORS.addressData.submitButton).click()
validateRequiredField(SELECTORS.addressData.endereco)
})
it('Validar mensagem de CEP inválido', () => {
cy.selecionaNivelIngles()
cy.get(SELECTORS.personalData.submitButton).click()
cy.preencherEndereco(endereco)
cy.get(SELECTORS.addressData.cep).clear().type(endereco.cepInvalido)
cy.get(SELECTORS.addressData.submitButton).click()
cy.get(SELECTORS.toastSuccess).should('have.text', MESSAGES.invalidCep)
})
})
5 changes: 5 additions & 0 deletions cypress/fixtures/example.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"name": "Using fixtures to represent data",
"email": "[email protected]",
"body": "Fixtures are a great way to mock data for responses to routes"
}
67 changes: 67 additions & 0 deletions cypress/support/commands.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
const faker = require('faker-br')

Cypress.Commands.add('visitaCadastroPage', () => {
cy.visit('/18/cadastro/')
})
Cypress.Commands.add('clicaBotaoFazerInscricao', () => {
cy.get('#btn-enroll').click()

})

Cypress.Commands.add('preencheDadosFormularioCadastro', (dadosCadastro) => {
cy.get('#signup-personal-data-firstName').type(dadosCadastro.nome)
cy.get('#signup-personal-data-lastName').type(dadosCadastro.sobrenome)
cy.get('#signup-personal-data-birthDate').type(dadosCadastro.dataNascimento)
cy.get('#signup-personal-data-cpf').type(dadosCadastro.cpf)
cy.get('#signup-personal-data-email').type(dadosCadastro.email)
cy.get('#signup-personal-data-email-confirm').type(dadosCadastro.email)
cy.get('#signup-personal-data-password').type(dadosCadastro.password)
cy.get('#signup-personal-data-password-confirm').type(dadosCadastro.password)
cy.get('#signup-personal-data-lgpd').check()
})


Cypress.Commands.add('selecionaNivelIngles', () => {
const englishLevels = ['Advanced', 'Intermediate', 'Beginner']
const randomIndex = Math.floor(Math.random() * englishLevels.length)
// cy.get('#signup-personal-data-englishLevel').type(randomIndex)
cy.get('button[aria-controls="dropdown-button-1"]').click()
cy.get('span').contains(englishLevels[randomIndex]).click()

})
Cypress.Commands.add('generateValidCEP', () => {
const getRandomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min
const cepPart1 = getRandomInt(10000, 99999)
const cepPart2 = getRandomInt(0, 999)
const formattedCepPart2 = cepPart2.toString().padStart(3, '0')
return `${cepPart1}-${formattedCepPart2}`
})

Cypress.Commands.add('preencherEndereco', (endereco) => {

//cy.get('#signup-address-country').type(endereco.pais)
// cy.get('#signup-address-state').type(endereco.estado)
//cy.get('#signup-address-city').type(endereco.cidade)
cy.get('#signup-address-street').type(endereco.rua)
cy.get('#signup-address-number').type(endereco.numero)
cy.get('#signup-address-complement').type(endereco.complemento)
//cy.get('#signup-address-neighborhood').type(endereco.bairro)

})
Cypress.Commands.add('geracepValido', () => {
const getRandomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min
const cepPart1 = getRandomInt(73752,73752)
const cepPart2 = getRandomInt(651, 660)
const formattedCepPart2 = cepPart2.toString().padStart(3, '0')
return `${cepPart1}-${formattedCepPart2}`
})
Cypress.Commands.add('validaMensangemDeErro', (fieldSelector, validationMessage) => {
cy.get(fieldSelector).clear()
cy.get('button[id*="signup_submit"]').eq(0).click({force: true})
cy.get(`${fieldSelector}:invalid`)
.should('have.length', 1)
.then(($el) => {
const message = $el[0].validationMessage
expect(message).to.eq(validationMessage)
})
})
20 changes: 20 additions & 0 deletions cypress/support/e2e.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// ***********************************************************
// This example support/e2e.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')
Loading