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
56 changes: 56 additions & 0 deletions cypress/tests/cadastro.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@

// RWA - Exercício de Testes Automatizados com Cypress 01

describe('Tela de Cadastro', () => {
// Mapeamento dos seletores utilizados nos testes
// Facilita a manutenção - se um seletor mudar, atualiza apenas aqui
const selectorsList = {
accountField: "[data-test='signup']",
firstNameField: "[name='firstName']",
lastNameField: "[name='lastName']",
usernameField: "[name='username']",
passwordField: "[name='password']",
confirmPasswordField: "[name='confirmPassword']",
signupButton: "[data-test='signup-submit']",
errorMessage: "[data-test='signup-confirmPassword']"
}
const userData = {
firstName: 'Thayse',
lastName: 'Dias',
username: 'thaysedias13',
password: 'Td252603###',
confirmPassword: 'Td252603###',
wrongPassword: 'Td252603'
}

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

it('Cadastro de Usuário com sucesso', () => {
cy.get(selectorsList.accountField).click()
cy.get(selectorsList.firstNameField).type(userData.firstName)
cy.get(selectorsList.lastNameField).type(userData.lastName)
cy.get(selectorsList.usernameField).type(userData.username)
cy.get(selectorsList.passwordField).type(userData.password)
cy.get(selectorsList.confirmPasswordField).type(userData.confirmPassword)
cy.get(selectorsList.signupButton).click()

// Validação do cadastro bem-sucedido
cy.url().should('include', '/signin')

})

it.only('Cadastro de Usuário com falha na confirmação da senha', () => {
cy.get(selectorsList.accountField).click()
cy.get(selectorsList.firstNameField).type(userData.firstName)
cy.get(selectorsList.lastNameField).type(userData.lastName)
cy.get(selectorsList.usernameField).type(userData.username)
cy.get(selectorsList.passwordField).type(userData.password)
cy.get(selectorsList.confirmPasswordField).type(userData.wrongPassword)

// Validação da mensagem de erro
cy.get(selectorsList.errorMessage).should('contain.text', 'Password does not match')

})
})
37 changes: 37 additions & 0 deletions cypress/tests/login.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@

// RWA - Exercício de Testes Automatizados com Cypress 01

describe('Teste de Login', () => {
// Mapeamento dos seletores utilizados nos testes
const selectorsList = {
usernameField: "[name='username']",
passwordField: "[name='password']",
remembercheckbox: "[type='checkbox']",
loginButton: "[type='submit']",
wrongCredentialsAlert: ".SignInForm-alertMessage",
onboardingDialog: "[data-test='user-onboarding-dialog-title']",
}

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

it('Login - Sucess', () => {
cy.get(selectorsList.usernameField).type('thaysedias')
cy.get(selectorsList.passwordField).type('Td252603##')
cy.get(selectorsList.remembercheckbox).check()
cy.get(selectorsList.loginButton).click()

// Validação do login bem-sucedido
cy.get(selectorsList.onboardingDialog).should('be.visible')
})

it.only('Login - Fail', () => {
cy.get(selectorsList.usernameField).type('usuarioInvalido')
cy.get(selectorsList.passwordField).type('senhaInvalida')
cy.get(selectorsList.loginButton).click()

// Validação de erro
cy.get(selectorsList.wrongCredentialsAlert).should('contain.text', 'Username or password is invalid')
})
})
133 changes: 133 additions & 0 deletions cypress/tests/user.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
describe('Fluxo Completo - Cadastro, Login e Criação de Conta Bancária', () => {
// Mapeamento centralizado de seletores
const selectors = {
// Cadastro
signupLink: "[data-test='signup']",
firstNameField: "[name='firstName']",
lastNameField: "[name='lastName']",
usernameField: "[name='username']",
passwordField: "[name='password']",
confirmPasswordField: "[name='confirmPassword']",
signupSubmitButton: "[data-test='signup-submit']",
newTransactionButton: "[data-test='nav-top-new-transaction']",
searchField: "[data-test='user-list-search-input']",
contact: "[data-test*='user-list-item']",
amountField: "[name='amount']",
descriptionField: "[placeholder='Add a note']",
payButton: "[data-test='transaction-create-submit-payment']",
homePage: "[data-test='sidenav-home']",
minePage: "[data-test='nav-personal-tab']",
friendPage: "[data-test='nav-contacts-tab']",

// Login
rememberCheckbox: "[type='checkbox']",
loginButton: "[type='submit']",

// Onboarding Bancário
nextButton: "[data-test='user-onboarding-next']",
bankNameField: "[placeholder='Bank Name']",
routingNumberField: "[placeholder='Routing Number']",
accountNumberField: "[placeholder='Account Number']",
saveButton: "[data-test='bankaccount-submit']",

// Validações
onboardingDialog: "[data-test='user-onboarding-dialog-title']",
finishedPage: ".MuiDialogContent-root",
doneButton: "[data-test='user-onboarding-next']",
completeTransactionButton: ".MuiStepLabel-labelContainer",
page: ".NavBar-title",
}

const userData = {
firstName: 'Thayse',
lastName: 'Dias',
username: 'thaysedias',
password: 'Td252603###',
bankName: 'The Best Bank',
routingNumber: '123456789',
accountNumber: '987654321',
search: 'Ted',
amount: '1000',
description: 'Pagamento de teste'
}

it('Fluxo completo de cadastro, login e criação de conta bancária', () => {
// 1. Cadastro de Usuário
cy.visit('http://localhost:3000/signin')
cy.get(selectors.signupLink).click()
cy.get(selectors.firstNameField).type(userData.firstName)
cy.get(selectors.lastNameField).type(userData.lastName)
cy.get(selectors.usernameField).type(userData.username)
cy.get(selectors.passwordField).type(userData.password)
cy.get(selectors.confirmPasswordField).type(userData.password)
cy.get(selectors.signupSubmitButton).click()

// Validação do cadastro bem-sucedido
cy.url().should('include', '/signin')

// 2. Login
cy.get(selectors.usernameField).type(userData.username)
cy.get(selectors.passwordField).type(userData.password)
cy.get(selectors.rememberCheckbox).check()
cy.get(selectors.loginButton).click()

// Validação do login bem-sucedido
cy.get(selectors.onboardingDialog).should('be.visible')

// 3. Criação de Conta Bancária
cy.get(selectors.nextButton).click()
cy.get(selectors.bankNameField).type(userData.bankName)
cy.get(selectors.routingNumberField).type(userData.routingNumber)
cy.get(selectors.accountNumberField).type(userData.accountNumber)
cy.get(selectors.saveButton).click()

// Validação da criação da conta bancária bem-sucedida
cy.get(selectors.finishedPage).should('be.visible')
cy.get(selectors.doneButton).click()
cy.get(selectors.page).should('be.visible')

// 4. Transferência bancária bem-sucedida
cy.get(selectors.newTransactionButton).click({ force: true })

// Aguardar a página de nova transação carregar completamente
cy.url().should('include', '/transaction/new')

// Aguardar a página estabilizar verificando se o campo de busca está visível
cy.get(selectors.searchField).should('be.visible')

// Usar apenas force true e evitar scroll complexo
cy.get(selectors.searchField).type(userData.search, {
force: true,
delay: 100
})

// Aguardar a busca completar
cy.intercept('GET', '/users/search*').as('searchRequest')
cy.wait('@searchRequest')

// Clique forçado sem scroll complexo
cy.get(selectors.contact)
.contains(userData.search)
.click({ force: true })

// Preencher resto do formulário
cy.get(selectors.amountField).type(userData.amount, { force: true })
cy.get(selectors.descriptionField).type(userData.description, { force: true })
cy.get(selectors.payButton).click({ force: true })

// Validação da transferência bancária bem-sucedida
cy.get(selectors.completeTransactionButton)
.should('be.visible')
.and('contain.text', 'Complete')

// Histórico de transações com sucesso
cy.get(selectors.homePage).click()
cy.get(selectors.minePage).click()

// Aguarda até que o histórico de transações esteja visível
cy.get(selectors.minePage).should('be.visible')

// Histórico de transações de um usuário sem transações anteriores
cy.get(selectors.friendPage).click()
})
})
Loading