Repositório do projeto de testes End-to-end (E2E) feitos com Cypress 💚 para o web app de demonstração: Mark85 - Gerenciador de Tarefas.
VS Code versão 1.89.1
- Extensões
Você vai precisar dos seguintes sistemas instalados em seu computador:
- Windows Terminal
- Node.js versão
v18.12.1
- NPM versão
8.19.2
- NPM versão
- Git versão
2.43.0.windows.1
Note
Durante a instalação do Node.js o NPM é automaticamente instalado.
Important
Para a instalação do Git garantir que as opções "Git Bash Here" e "(NEW!) Add a Git Bash Profile to Windows Terminal" estejam marcadas ✅.
- Pasta api - API do gerenciador de tarefas, execute o comando
npm i
- Colocar API em execução
npm run dev
- Pasta web - Interface gráfica do gerenciador de tarefas, execute o comando
npm i
- Colocar Interface gráfica em execução
npm run dev
- Pasta mail - Serviço de envio de e-mails, execute o comando
npm i
- Colocar serviço de envio de e-mails em execução
npm run dev
Important
Necessário criar conta no CloudAMQP (RabbitMQ) para configurar fila de mensageria, MongoDB para utilização do banco de dados, onde ambos serão configurados no arquivo 'dotenv' do projeto. É utilizado o Ethereal para serviço SMTP.
🟡 POST /Register a new user
curl --request POST \
--url http://localhost:3333/users \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/8.6.1' \
--data '{
"name": "Steve Jobs",
"email": "jobs@next.com",
"password": "pwd123"
}'
🟡 POST /User session
curl --request POST \
--url http://localhost:3333/sessions \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/8.6.1' \
--data '{
"email": "jobs@next.com",
"password": "pwd123"
}'
🟡 POST /New task
curl --request POST \
--url http://localhost:3333/tasks/ \
--header 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1ZjllMmI5YmUwOGFhMGQxMjlkYjg2ZiIsInVzZXIiOnsiX2lkIjoiNjVmOWUyYjliZTA4YWEwZDEyOWRiODZmIiwibmFtZSI6IlN0ZXZlIEpvYnMiLCJlbWFpbCI6ImpvYnNAbmV4dC5jb20iLCJwYXNzd29yZCI6IiQyYiQwOCRyaVZJNk8xcUlJVm40eDk2WlFpLktlcVZ2aTdTMWNWNmcuT2lRbHhMVDcwTTRiZUlFMmppeSJ9LCJpYXQiOjE3MTA5NTEwMzgsImV4cCI6MTcxMTgxNTAzOH0._fCQKSPTD1yl6rzsJr9ZVIIclRc6RcS2CCPpCTl_biM' \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/8.6.1' \
--data '{
"name": "Definição técnica de arquitetura",
"tags": [
"x86",
"unix"
]
}'
🟢 GET /Get my tasks
curl --request GET \
--url http://localhost:3333/tasks/ \
--header 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1ZjllMmI5YmUwOGFhMGQxMjlkYjg2ZiIsInVzZXIiOnsiX2lkIjoiNjVmOWUyYjliZTA4YWEwZDEyOWRiODZmIiwibmFtZSI6IlN0ZXZlIEpvYnMiLCJlbWFpbCI6ImpvYnNAbmV4dC5jb20iLCJwYXNzd29yZCI6IiQyYiQwOCRyaVZJNk8xcUlJVm40eDk2WlFpLktlcVZ2aTdTMWNWNmcuT2lRbHhMVDcwTTRiZUlFMmppeSJ9LCJpYXQiOjE3MTA5NTEwMzgsImV4cCI6MTcxMTgxNTAzOH0._fCQKSPTD1yl6rzsJr9ZVIIclRc6RcS2CCPpCTl_biM' \
--header 'User-Agent: insomnia/8.6.1'
🟢 GET /Get unique task
curl --request GET \
--url http://localhost:3333/tasks/65fb0bfe0b19f522d29bd234 \
--header 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1ZjllMmI5YmUwOGFhMGQxMjlkYjg2ZiIsInVzZXIiOnsiX2lkIjoiNjVmOWUyYjliZTA4YWEwZDEyOWRiODZmIiwibmFtZSI6IlN0ZXZlIEpvYnMiLCJlbWFpbCI6ImpvYnNAbmV4dC5jb20iLCJwYXNzd29yZCI6IiQyYiQwOCRyaVZJNk8xcUlJVm40eDk2WlFpLktlcVZ2aTdTMWNWNmcuT2lRbHhMVDcwTTRiZUlFMmppeSJ9LCJpYXQiOjE3MTA5NTEwMzgsImV4cCI6MTcxMTgxNTAzOH0._fCQKSPTD1yl6rzsJr9ZVIIclRc6RcS2CCPpCTl_biM' \
--header 'User-Agent: insomnia/8.6.1'
🔴 DELETE /Remove task
curl --request DELETE \
--url http://localhost:3333/tasks/65fb0bfe0b19f522d29bd234 \
--header 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1ZjllMmI5YmUwOGFhMGQxMjlkYjg2ZiIsInVzZXIiOnsiX2lkIjoiNjVmOWUyYjliZTA4YWEwZDEyOWRiODZmIiwibmFtZSI6IlN0ZXZlIEpvYnMiLCJlbWFpbCI6ImpvYnNAbmV4dC5jb20iLCJwYXNzd29yZCI6IiQyYiQwOCRyaVZJNk8xcUlJVm40eDk2WlFpLktlcVZ2aTdTMWNWNmcuT2lRbHhMVDcwTTRiZUlFMmppeSJ9LCJpYXQiOjE3MTA5NTEwMzgsImV4cCI6MTcxMTgxNTAzOH0._fCQKSPTD1yl6rzsJr9ZVIIclRc6RcS2CCPpCTl_biM' \
--header 'User-Agent: insomnia/8.6.1'
🔵 PUT /Finish task
curl --request PUT \
--url http://localhost:3333/tasks/65fb0bfe0b19f522d29bd234/done \
--header 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY1ZjllMmI5YmUwOGFhMGQxMjlkYjg2ZiIsInVzZXIiOnsiX2lkIjoiNjVmOWUyYjliZTA4YWEwZDEyOWRiODZmIiwibmFtZSI6IlN0ZXZlIEpvYnMiLCJlbWFpbCI6ImpvYnNAbmV4dC5jb20iLCJwYXNzd29yZCI6IiQyYiQwOCRyaVZJNk8xcUlJVm40eDk2WlFpLktlcVZ2aTdTMWNWNmcuT2lRbHhMVDcwTTRiZUlFMmppeSJ9LCJpYXQiOjE3MTA5NTEwMzgsImV4cCI6MTcxMTgxNTAzOH0._fCQKSPTD1yl6rzsJr9ZVIIclRc6RcS2CCPpCTl_biM' \
--header 'User-Agent: insomnia/8.6.1'
🔴 DELETE /Purge messages - RabbitMQ
curl --request DELETE \
--url https://porpoise.rmq.cloudamqp.com/api/queues/fsbjfytv/tasks/contents \
--header 'Authorization: Basic ZnNiamZ5dHY6dHk2QTJublluMW1KeUZNWjJMMzBNNzZ1NWhFWFRnS2E=' \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/8.6.1' \
--data '{
"vhost": "fsbjfytv",
"name": "tasks",
"mode": "purge"
}'
🟡 POST /Get message - RabbitMQ
curl --request POST \
--url https://porpoise.rmq.cloudamqp.com/api/queues/fsbjfytv/tasks/get \
--header 'Authorization: Basic ZnNiamZ5dHY6dHk2QTJublluMW1KeUZNWjJMMzBNNzZ1NWhFWFRnS2E=' \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/8.6.1' \
--data '{
"vhost": "fsbjfytv",
"name": "tasks",
"truncate": "50000",
"ackmode": "ack_requeue_true",
"encoding": "auto",
"count": "1"
}'
Você pode executá-los tanto em modo interativo, como em modo headless.
- Instalar as dependências do Cypress que estão na pasta raiz
/
, execute o comando
npm i
- Para rodar todos os testes em modo headless, execute o comando
npx cypress run --env allure=true
- O relatório de execução dos testes pode ser visualizado com Allure Report, execute o comando
npx allure serve
Warning
É necessário o Java 8 para executar o binário do Allure Reports.
Tip
Execute os testes através do Lauchpad, modo interativo do Cypress, com o comando npx cypress open
.
- remove a task
- task not found
- get my tasks
- get unique task
- task not found
- post task
- duplicate task
- update task to done
- task not found
- user session
- invalid password
- email not found
- register a new user
- duplicate email
- name is required
- email is required
- password is required