https://github.com/evertonpavan/desafio01-trilha-nodejs
Desafio 01 - Trilha NodeJS - Ignite Rockeseat
https://github.com/evertonpavan/desafio01-trilha-nodejs
ignite javascript jest nodejs rockeseat test
Last synced: 3 months ago
JSON representation
Desafio 01 - Trilha NodeJS - Ignite Rockeseat
- Host: GitHub
- URL: https://github.com/evertonpavan/desafio01-trilha-nodejs
- Owner: evertonpavan
- License: mit
- Created: 2021-03-10T17:03:19.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-03-10T22:07:50.000Z (over 4 years ago)
- Last Synced: 2025-01-21T03:11:11.377Z (5 months ago)
- Topics: ignite, javascript, jest, nodejs, rockeseat, test
- Language: JavaScript
- Homepage:
- Size: 104 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![]()
Ignite Journey
![]()
![]()
## Desafio 01 - Conceitos do Node.js
Nesse desafio, você deverá criar uma aplicação para treinar o que aprendeu até agora no Node.js!
Essa será uma aplicação para gerenciar tarefas (em inglês *todos*). Será permitida a criação de um usuário com `name` e `username`, bem como fazer o CRUD de *todos*:
- Criar um novo *todo*
- Listar todos os *todos*
- Alterar o `title` e `deadline` de um *todo* existente
- Marcar um *todo* como feito
- Excluir um *todo*## Especificação dos testes
### Testes de usuário
- **Should be able to create a new user**
Para que esse teste passe, você deve permitir que um usuário seja criado e retorne um json com o usuário criado. Você pode ver o formato de um usuário abaixo:
```javascript
{
id: 'uuid', // precisa ser um uuid
name: 'Danilo Vieira',
username: 'danilo',
todos: []
}
```Também é necessário que você retorne a resposta com o código `201`.
- **Should not be able to create a new user when username already exists**
Para que esse teste passe, antes de criar um usuário você deve validar se outro usuário com o mesmo `username` já existe. Caso exista, retorne uma resposta com status `400` e um json no seguinte formato:
```javascript
{
error: 'Mensagem do erro'
}
```A mensagem pode ser de sua escolha, desde que a propriedade seja `error`.
### Testes de TODO's
- **Should be able to list all user's todos**
Para que esse teste passe, na rota GET `/todos` é necessário pegar o usuário que foi repassado para o `request` no middleware `checkExistsUserAccount` e então retornar a lista `todos` que está no objeto do usuário conforme foi criado para satisfazer o [primeiro teste](#testes-de-usuário).
- **Should be able to create a new todo**
Para que esse teste passe, na rota POST `/todos` é necessário pegar o usuário que foi repassado para o `request` no middleware `checkExistsUserAccount`, pegar também o `title` e o `deadline` do corpo da requisição e adicionar um novo *todo* na lista `todos` que está no objeto do usuário.
Lembre-se de seguir a estrutura padrão de um *todo*:
```javascript
{
id: 'uuid', // precisa ser um uuid
title: 'Nome da tarefa',
done: false,
deadline: new Date(deadline),
created_at: new Date()
}
```
- **Should be able to update a todo**
Para que esse teste passe, na rota PUT `/todos/:id` é necessário atualizar um *todo* existente, recebendo o `title` e o `deadline` pelo corpo da requisição e o `id` presente nos parâmetros da rota.
- **Should not be able to update a non existing todo**
Para que esse teste passe, você não deve permitir a atualização de um *todo* que não existe e retornar uma resposta contendo um status `404` e um json no seguinte formato:
```javascript
{
error: 'Mensagem do erro'
}
```
- **Should be able to mark a todo as done**
Para que esse teste passe, na rota PATCH `/todos/:id/done` você deve mudar a propriedade `done`de um *todo* de `false` para `true`, recebendo o `id` presente nos parâmetros da rota.
- **Should not be able to mark a non existing todo as done**
Para que esse teste passe, você não deve permitir a mudança da propriedade `done` de um *todo* que não existe e retornar uma resposta contendo um status `404` e um json no seguinte formato:
```javascript
{
error: 'Mensagem do erro'
}
```
- **Should be able to delete a todo**
Para que esse teste passe, DELETE `/todos/:id` você deve permitir que um *todo* seja excluído usando o `id` passado na rota. O retorno deve ser apenas um status `204` que representa uma resposta sem conteúdo.
- **Should not be able to delete a non existing todo**
Para que esse teste passe, você não deve permitir excluir um *todo* que não exista e retornar uma resposta contendo um status `404` e um json no seguinte formato:
```javascript
{
error: 'Mensagem do erro'
}
```