Projeto pela Trybe para estudos de Higher Order Functions ES6. 🚀
Neste projeto, verificamos se você é capaz de:
- Produzir código legível, conciso e expressivo utilizando as novas funcionalidades do ES6
- Utilizar as Higher Order Functions para manipular e criar arrays
- Escolher a Higher Order Function mais adequada para a obtenção de um resultado esperado
- Aprender a usar de forma conjunta as Higher Order Functions
- Interpretar testes unitários e produzir soluções que atendam a eles
- Entregáveis
- Requisitos do projeto
- 1. Implemente a função getSpeciesByIds
- 2. Implemente a função getAnimalsOlderThan
- 3. Implemente a função getEmployeeByName
- 4. Implemente a função createEmployee
- 5. Implemente a função isManager
- 6. Implemente a função addEmployee
- 7. Implemente a função countAnimals
- 8. Implemente a função calculateEntry
- 9. Implemente a função getAnimalMap
- 10. Implemente a função getSchedule
- 11. Implemente a função getOldestFromFirstSpecies
- 12. Implemente a função increasePrices
- 13. Implemente a função getEmployeeCoverage
Você implementará várias funções para atender aos requisitos propostos e garantir que todas as funções passem nos testes unitários.
Este repositório contém um template de uma aplicação NodeJS (observe a existência do arquivo package.json). Após clonar o projeto e instalar as dependências, você não precisará realizar nenhuma configuração adicional. Todos os arquivos estritamente necessários para finalizar o projeto já estão criados, não sendo necessária a criação de outros arquivos. Você deverá completar as funções e testes unitários de forma a satisfazer os requisitos listados na próxima seção.
Na pasta raíz do projeto, temos a pasta src
e a pasta tests
. A pasta src
é composta pelo arquivo zoo.js
, que contém as funções a serem implementadas, e o arquivo data.js
, que armazena os dados que serão utilizados. Já a pasta tests
, contém os testes unitários correspondentes a cada função do arquivo zoo.js
.
O nome dos arquivos também segue uma ordem definida. Basicamente, os arquivos de teste possuem o nome da função alvo acrescido do nome .spec.js
.
O arquivo src/zoo.js
conterá a implementação de uma função, getSpeciesByIds,
por exemplo, e o arquivo tests/getSpeciesByIds.spec.js
conterá os testes unitários referentes à função.
Você só deve alterar os arquivos indicados nos requisitos. Os arquivos que não estão indicados nos requisitos não devem ser alterados, ou sua avaliação poderá ser comprometida.
Vocẽ deverá implementar as funções que estão no src/zoo.js
para passarem em cada um dos testes. O teste test/getSpeciesByIds.test.js
, por exemplo, testa a função getSpeciesByIds
, que já está criada dentro do src/zoo.js
, embora ainda não contenha lógica alguma. Para ver o que cada função precisa retornar, basta ver o assert
de cada um dos testes.
Utilize as novas funcionalidades do ES6 como arrow functions, template literals, spread operator, parâmetro rest, object destructuring, entre outras. Utilize também as Higher Order Functions.
Dica: uma importante soft-skill é saber como gerenciar seu tempo. Alguns exercícios são mais difíceis que outros, e não estão em ordem de complexidade. Caso tenha dificuldade para realizar algum exercício, pule-o, resolva outro, e, quando se sentir confortável, volte ao exercício em questão. A ideia é não ficar preso a um problema por um longo período. Realizar outros exercícios pode te ajudar a enxergar e/ou aprender novas maneiras de se chegar ao resultado esperado.
Antes de começar, analise o arquivo src/data.js
, para ver os dados que serão usados.
Esta função é responsável pela busca das espécies de animais por id. Ela retorna um array contendo as espécies referentes aos ids passados como parâmetro, podendo receber um ou mais ids.
Observações técnicas
- O parâmetro desta função pode ser alterado para atender ao requisito proposto
O que será avaliado
- Caso receba nenhum parâmetro, necessário retornar um array vazio
- Ao receber como parâmetro um único id, retorna um array com a espécie referente à esse id
- Ao receber mais de um id, retorna um array com as espécies referentes aos ids
Esta função, a partir do nome de uma espécie e uma idade mínima, verifica se todos os animais daquela espécie possuem a idade mínima especificada
Observações técnicas
- Deve retornar um valor booleano
O que será avaliado
- Ao passar o nome de uma espécie e uma idade, testa se todos os animais desta espécie possuem a idade mínima especificada
Esta função é responsável pela busca das pessoas colaboradoras através do primeiro ou do último nome delas
O que será avaliado
- Sem parâmetros, retorna um objeto vazio
- Quando provido o primeiro nome do funcionário, retorna o objeto do funcionário
- Quando provido o último nome do funcionário, retorna o objeto do funcionário
A função, a partir de informações recebidas nos parâmetros, é capaz de criar um objeto equivalente ao de uma pessoa colaboradora, retornando-o
Observações técnicas
- O parâmetro
personalInfo
recebe um objeto que contém oid
, ofirstName
e olastName
- O parâmetro
associatedWith
recebe um objeto que contém dois array:managers
eresponsibleFor
O que será avaliado
- Cria um novo colaborador a partir de objetos contendo
informações pessoais
egerentes e animais gerenciados
.
Verifica se uma pessoa colaboradora, a partir de seu id, ocupa cargo de gerência.
Observações técnicas
- Deve retornar um valor booleano
O que será avaliado
- Testa se o id passado é de um gerente
A função irá adicionar uma nova pessoa colaboradora ao array employees
, presente no arquivo data.js
.
O que será avaliado
- Adiciona um funcionário no fim da lista
Esta função é responsável por contabilizar a quantidade de animais.
Observações técnicas
- Sem parâmetros, retorna um objeto
- Com o nome de uma espécie de animal, retorna um número
O que será avaliado
- Sem parâmetros, retorna animais e suas quantidades
- Com o nome de uma espécie de animal, retorna somente a quantidade
A partir da quantidade de visitantes e a faixa etária de cada um, esta função é responsável por retornar o preço total a ser cobrado
Observações técnicas
- O parâmetro
entrants
recebe um objeto que contém as chavesAdult
,Child
eSenior
, com suas respectivas quantidades de pessoas
O que será avaliado
- Retorna 0 se nenhum argumento for passado
- Retorna 0 se um objeto vazio for passado
- Retorna o preço total a ser cobrado dado o número de adultos, crianças e idosos
A função é responsável pelo mapeamento geográfico das espécies e seus animais, podendo ainda filtrá-los por ordem alfabética e gênero, por exemplo
Observações técnicas
- Analise o teste unitário para entender os retornos que são esperados para esta função
O que será avaliado
- Sem parâmetros, retorna animais categorizados por localização
- Com a opção
includeNames: true
especificada, retorna nomes de animais - Com a opção
sorted: true
especificada, retorna nomes de animais ordenados - Com a opção
sex: 'female'
ousex: 'male'
especificada, retorna somente nomes de animais macho/fêmea - Com a opção
sex: 'female'
ousex: 'male'
especificada e a opçãosort: true
especificada, retorna somente nomes de animais macho/fêmea com os nomes dos animais ordenados - Só retorna informações ordenadas e com sexo se a opção
includeNames: true
for especificada
A função é responsável por disponibilizar as informações de horário para uma consulta, que pode querer ter acesso a todo o cronograma da semana ou apenas o cronograma de um dia específico
Observações técnicas
- Analise o teste unitário para entender os retornos que são esperados para esta função
O que será avaliado
- Sem parâmetros, retorna um cronograma legível para humanos
- Se um único dia for passado, retorna somente este dia em um formato legível para humanos
A função busca por informações do animal mais velho da primeira espécie gerenciada pela pessoa colaboradora do parâmetro
O que será avaliado
- Passado o id de um funcionário, encontra a primeira espécie de animal gerenciado pelo funcionário, e retorna um array com nome, sexo e idade do animal mais velho dessa espécie
A função é responsável por aumentar o preço das visitas, com base no valor de aumento recebido no parâmetro, em porcentagem
Observações técnicas
- Se o parâmetro da função recebe o valor 20, o aumento é de 20%
- Altera o objeto
prices
do arquivodata.js
O que será avaliado
- Ao passar uma porcentagem, incrementa todos os preços, arrendondados em duas casas decimais
A função é responsável por consultar as espécies pela qual a pessoa colaborada, recebida no parâmetro através de seu id
, firstName
ou lastName
, é responsável
Observações técnicas
- Analise o teste unitário para entender os retornos que são esperados para esta função
O que será avaliado
- Sem parâmetros, retorna uma lista de funcionários e os animais pelos quais eles são responsáveis
- Com o id de um funcionário, retorna os animais pelos quais o funcionário é responsável
- Com o primeiro nome de um funcionário, retorna os animais pelos quais o funcionário é responsável
- Com o último nome de um funcionário, retorna os animais pelos quais o funcionário é responsável