├── .github └── workflows │ └── master.yml ├── .gitignore ├── README.md ├── data ├── list1.js ├── list2.js ├── list3.js └── movies.js ├── package-lock.json ├── package.json ├── src ├── averageRatingByGenre.js ├── bestRatedFilm.js ├── classifyMovies.js ├── countGenres.js ├── filmSeparation.js ├── filmSorted.js ├── filmsAvailable.js ├── findActorForTheMovie.js ├── getAllTitles.js ├── getMovieById.js ├── listOverdueLoans.js ├── moviesWithActor.js ├── nolanFilms.js └── titlesAndDirectors.js └── tests ├── 01-getAllTitles.test.js ├── 02-getMovieById.test.js ├── 03-moviesWithActor.test.js ├── 04-bestRatedFilm.test.js ├── 05-titlesAndDirectors.test.js ├── 06-filmSorted.test.js ├── 07-filmsAvailable.test.js ├── 08-nolanFilms.test.js ├── 09-findActorForTheMovie.test.js ├── 10-countGenres.test.js ├── 11-averageRatingByGenre.test.js ├── 12-filmSeparation.test.js ├── 13-listOverdueLoans.test.js ├── 14-classifyMovies.test.js └── mocks ├── listMock.js ├── mock.js └── separateMock.js /.github/workflows/master.yml: -------------------------------------------------------------------------------- 1 | name: Continuos Integration 2 | 3 | on: 4 | pull_request: 5 | types: [opened, synchronize] 6 | 7 | jobs: 8 | continuos-integration: 9 | runs-on: ubuntu-latest 10 | name: Evaluator 11 | steps: 12 | - name: Project repository 13 | uses: actions/checkout@v3 14 | - name: Setup NodeJS 15 | uses: actions/setup-node@v2 16 | with: 17 | node-version: 16.x 18 | - name: Run Tests 19 | run: | 20 | npm install 21 | npm run test -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Repositório do projeto Magic Functions! 3 | 4 | Desenvolva seu projeto a partir deste repositório, utilizando uma branch específica e um _Pull Request_ para enviar seus códigos. 5 | 6 | 7 | # Orientações 8 | 9 |
10 | Antes de começar a desenvolver
11 | 12 | 1. Clone o repositório 13 | 14 | * Use o comando: `git clone git@github.com:UnifelDesenvolvimentoWeb/magic-functions.git` 15 | 16 | * Entre na pasta do repositório que você acabou de clonar: 17 | 18 | * `cd magic-functions` 19 | 20 | 2. Instale as dependências 21 | 22 | * Para isso, use o seguinte comando: `npm install` 23 | 24 | 3. Crie uma branch a partir da branch `master` 25 | 26 | * Verifique se você está na branch `master` 27 | * Exemplo: `git branch` 28 | * Se não estiver, mude para a branch `master` 29 | * Exemplo: `git checkout master` 30 | * Agora, crie uma branch para qual você vai submeter os `commits` do seu projeto: 31 | * Você deve criar uma branch no seguinte formato: `nome-de-usuario-nome-do-projeto` 32 | * Exemplo: `git checkout -b maria-magic-functions` 33 | 34 | 4. Desenvolva algum requisito do projeto e logo em seguida adicione as mudanças ao _stage_ do Git e faça um `commit` 35 | * Verifique que as mudanças ainda não estão no _stage_ 36 | * Exemplo: `git status` (os arquivos no diretório `src` devem aparecer em vermelho) 37 | 38 | * Adicione o novo arquivo ao _stage_ do Git 39 | * Exemplo: `git add .` (adicionando todas as mudanças - _que estavam em vermelho_ - ao stage do Git) 40 | * `git status` (deve aparecer listado os arquivos do diretório `src` em verde) 41 | 42 | * Faça o `commit` inicial 43 | * Exemplo: `git commit -m 'iniciando o projeto - requisito 01.'` (fazendo o primeiro commit) 44 | * `git status` (deve aparecer uma mensagem tipo _nothing to commit_ ) 45 | 46 | 5. Adicione a sua branch com o novo `commit` ao repositório remoto 47 | 48 | * Usando o exemplo anterior: `git push -u origin maria-magic-functions` 49 | 50 | 51 | **Atenção: essa etapa de PR só executa uma vez** 52 | 53 | 6. Crie um novo `Pull Request` _(PR)_ 54 | * Vá até a página de _Pull Requests_ do [repositório no GitHub](https://github.com/UnifelDesenvolvimentoWeb/magic-functions/pulls) 55 | * Clique no botão verde _"New pull request"_ 56 | * Clique na caixa de seleção _"Compare"_ e escolha a sua branch **com atenção** 57 | * Coloque um título para o seu _Pull Request_ 58 | * Exemplo: _"Cria tela de busca"_ 59 | * Clique no botão verde _"Create pull request"_ 60 | * Adicione uma descrição para o _Pull Request_ e clique no botão verde _"Create pull request"_ 61 | * Volte até a [página de _Pull Requests_ do repositório](https://github.com/UnifelDesenvolvimentoWeb/magic-functions/pulls) e confira que o seu _Pull Request_ está criado. 62 | 63 |
64 | 65 |
66 | Durante o desenvolvimento
67 | 68 | * Faça `commits` das alterações que você fizer no código regularmente; 69 | 70 | * Lembre-se de sempre após um (ou alguns) `commits` atualizar o repositório remoto; 71 | 72 | * Os comandos que você utilizará com mais frequência são: 73 | 74 | 1. `git status` _(para verificar o que está em vermelho - fora do stage - e o que está em verde - no stage)_; 75 | 76 | 2. `git add` _(para adicionar arquivos ao stage do Git)_; 77 | 78 | 3. `git commit` _(para criar um commit com os arquivos que estão no stage do Git)_; 79 | 80 | 4. `git push -u origin nome-da-branch` _(para enviar o commit para o repositório remoto na primeira vez que fizer o `push` de uma nova branch)_; 81 | 82 | 5. `git push` _(para enviar o commit para o repositório remoto após o passo anterior)_. 83 | 84 |
85 | 86 |
87 | Testes
88 | 89 | Para que os testes sejam executados localmente, verifique se a versão do node na sua máquina é a `16` ou superior: 90 | 91 | ```bash 92 | node -v 93 | ``` 94 | 95 | Caso a versão seja diferente, você pode utilizar o `nvm` para trocar de versão com o seguinte comando: 96 | 97 | ```bash 98 | nvm use 16 99 | ``` 100 | 101 | Para testar todas funções no terminal, basta executar o comando abaixo: 102 | 103 | ```bash 104 | npm test 105 | ``` 106 | 107 | Caso queira testar apenas uma função rode o comando abaixo: 108 | 109 | ```bash 110 | npm test nome-do-arquivo 111 | ``` 112 | 113 | Por exemplo: 114 | 115 | ```bash 116 | npm test 11-averageRatingByGenre.test 117 | ``` 118 | Ou somente o número: 119 | ```bash 120 | npm test 11 121 | ``` 122 |
123 | 124 | --- 125 | 126 | # Requisitos 127 | 128 | ## 1. Implemente a função `getAllTitles` 129 | 130 |
131 | 132 | A função getAllTitles é responsável por recuperar um array de títulos de filmes a partir de uma lista de filmes fornecida. 133 |
134 | 135 | - Faça com que a função `getAllTitles` possa receber vários parâmetros; 136 | 137 | - Retorne um array de títulos de filmes quando a função é chamada com entrada válida.; 138 | 139 | - Retorne um array vazio quando a função é chamada com um array de entrada vazio. 140 | 141 | **O que será testado:** 142 | 143 | Caso receba um array de filmes por ex: 144 | [ { 145 | id: 1, 146 | titulo: "Cidade de Deus", 147 | diretor: "Fernando Meirelles", 148 | genero: ["Drama", "Crime"], 149 | ... 150 | }, 151 | { 152 | id: 2, 153 | titulo: "Jogos Mortais", 154 | diretor: "James Wan", 155 | genero: ["Terror", "Suspense"], 156 | ... 157 | } 158 | ... 159 | ] 160 | 161 | 162 | Exemplo de saída: 163 | 164 | ["Cidade de Deus", "Jogos Mortais", ...] 165 | 166 |
167 | 168 | --- 169 | 170 | ## 2. Implemente a função `getMovieById` 171 | 172 |
173 | 174 | A função getMovieById é responsável por recuperar o objeto de filme com o ID fornecido. 175 |
176 | 177 | - A função recebe o parâmetro `id`: que representa o id do filme a ser pesquisado. 178 | 179 | - Utilize diretamente na função os filmes que vem no array de objetos que se encontra dentro do arquivo 180 | 181 | - Retorne o objeto completo do filme com o ID fornecido. O objeto retornado deve ser igual ao filme correspondente no array de filmes. 182 | 183 | - Deve retornar undefined se nenhum filme com o ID fornecido for encontrado. 184 | 185 | - Deve retornar undefined se o parâmetro de ID não for fornecido. 186 | 187 | - Deve retornar undefined se o parâmetro de ID não for um número. 188 | 189 | - Deve retornar undefined se o parâmetro de ID não for fornecido. 190 | 191 | **O que será testado:** 192 | 193 | - Ao passar um ID de um filme é retornado o objeto respectivamente de ID 194 | 195 |
196 | 197 | --- 198 | 199 | ## 3. Implemente a função `moviesWithActor` 200 | 201 |
202 | 203 | Encontre filmes que incluam um determinado ator em seu elenco. 204 |
205 | 206 | - A função recebe o parâmetro `actor`: Uma string que representa o nome do ator a ser pesquisado. 207 | 208 | - Utilize diretamente na função os filmes que vem no array de objetos que se encontra dentro do arquivo 209 | 210 | - Retorne uma lista de objetos de filmes que representam os filmes que incluem o ator dado. Se nenhum filme corresponder aos critérios, um array vazio será retornada. 211 | 212 | **O que será testado:** 213 | 214 | - A função deve pesquisar em uma coleção de filmes e suas informações de elenco associadas. 215 | Deve identificar filmes que possuem o ator especificado em seu elenco. 216 | Deve retornar um array contendo esses filmes correspondentes. 217 | 218 |
219 | 220 | --- 221 | 222 | ## 4. Implemente a função `bestRatedFilm` 223 | 224 |
225 | 226 | Encontre o filme com a classificação mais alta em uma lista de filmes. 227 |
228 | 229 | - Recebe o parâmetro `movies`: Uma lista de objetos de filmes, onde cada objeto possui uma propriedade `rating` que representa a classificação do filme. 230 | 231 | - Retorna o filme com a classificação mais alta na lista. Se a lista estiver vazia, retorna `undefined` 232 | 233 | **O que será testado:** 234 | 235 | - Se houver vários filmes com a classificação mais alta quando fornecida uma lista de filmes com classificações válidas, a função deve retornar o primeiro filme encontrado na lista. 236 | 237 | - Se a lista estiver vazia, a função deve retornar `undefined` 238 | 239 |
240 | 241 | --- 242 | 243 | ## 5. Implemente a função `titlesAndDirectors` 244 | 245 |
246 | 247 | Imprima os títulos e diretores de cada filme em uma lista de filmes. 248 |
249 | 250 | - Recebe o parâmetro `movies` que é um array contendo a lista de filmes 251 | 252 | **O que será testado:** 253 | 254 | - A função deve iterar pelo array de filmes e imprimir no console o título e o diretor de cada filme no formato `"Título: {título} - Diretor: {diretor}"`. 255 | Deve lidar com diferentes cenários de entrada: 256 | Listas vazias não devem produzir nenhuma saída. 257 | Listas com um único filme devem imprimir as informações desse filme. 258 | 259 |
260 | 261 | --- 262 | 263 | ## 6. Implemente a função `filmSorted` 264 | 265 |
266 | 267 | Ordene uma lista de filmes de acordo com o ano de lançamento 268 |
269 | 270 | - Recebe o parâmetro `movies` que é um array contendo a lista de filmes 271 | 272 | - Retorne uma nova lista de filmes ordenada pelo ano de lançamento, em ordem crescente. 273 | 274 | **O que será testado:** 275 | 276 | - A função deve criar um novo array de filmes ordenada pelo ano de lançamento. 277 | Não deve modificar o array original de filmes que foi fornecida como entrada. 278 | Deve lidar com diferentes cenários de entrada: 279 | array vazios devem resultar em array vazios. 280 | 281 | 282 |
283 | 284 | --- 285 | 286 | ## 7. Implemente a função `filmsAvailable` 287 | 288 |
289 | 290 | Filtrar uma lista de filmes e retornar apenas os títulos dos filmes que estão disponíveis, com base na propriedade disponivel de cada objeto de filme. 291 |
292 | 293 | - Recebe o parâmetro `movies` que é um array contendo a lista de filmes 294 | 295 | - Retorna uma array de títulos de filmes disponíveis, onde cada título é uma string. 296 | 297 | **O que será testado:** 298 | - Identificar os filmes que possuem a propriedade disponivel como true. 299 | Deve criar um novo array contendo apenas os títulos desses filmes disponíveis. 300 | Deve lidar com diferentes cenários de entrada: 301 | array vazios devem resultar em array vazios. 302 | array com todos os filmes indisponíveis devem resultar em array vazios. 303 |
304 | 305 | --- 306 | 307 | ## 8. Implemente a função `nolanFilms` 308 | 309 |
310 | 311 | Filtrar e ordenar uma lista de filmes, retornando apenas os filmes dirigidos por Christopher Nolan, ordenados pela classificação em ordem decrescente. 312 |
313 | 314 | - Recebe o parâmetro `movies` que é um array contendo a lista de filmes 315 | 316 | - Deve filtrar, mantendo apenas esses filmes dirigidos por Nolan. 317 | 318 | - Deve classificar o array filtrado pela propriedade avaliacao em ordem decrescente. 319 | 320 | - Deve retornar o array ordenado. 321 | 322 | **O que será testado:** 323 | 324 | - Retorne um novo array contendo apenas os filmes dirigidos por Christopher Nolan, ordenados pela classificação em ordem decrescente. 325 | 326 |
327 | 328 | --- 329 | 330 | ## 9. Implemente a função `findActorForTheMovie` 331 | 332 |
333 | 334 | Encontre os dois primeiros atores no elenco de um filme, dada uma string representando o título do filme. 335 |
336 | 337 | - Utilize diretamente na função os filmes que vem no array de objetos que se encontra dentro do arquivo 338 | 339 | - Recebe o parâmetro `movieTitle`: Uma string representando o título do filme. 340 | 341 | - Retorne um array contendo os dois primeiros nomes de atores do elenco do filme, ou uma mensagem de erro caso o filme não seja encontrado, ou o elenco seja indefinido, ou o título seja inválido. 342 | 343 | **O que será testado:** 344 | 345 | - Caso o filme seja encontrado, a função deve retornar um array contendo os dois primeiros nomes de atores do elenco do filme. 346 | 347 | - Caso o filme não seja encontrado, ou o elenco seja indefinido, ou o título seja inválido, a função deve retornar uma mensagem de erro específica para cada caso. 348 | 349 | - A função deve retornar uma mensagem de erro `"Filme não encontrado."` quando fornecido um título inválido. 350 | 351 | - A função deve retornar uma mensagem de erro `"Filme não encontrado."` quando o filme possui elenco indefinido ou quando o título for nulo ou quando o título for uma string vazia.. 352 |
353 | 354 | --- 355 | 356 | ## 10. Implemente a função `countGenres` 357 | 358 |
359 | 360 | Contar a ocorrência de gêneros em uma lista de filmes e retornar um objeto com a contagem de cada gênero. 361 |
362 | 363 | - Recebe o parâmetro `movies` que é um array contendo a lista de filmes 364 | 365 | - A função deve retornar um objeto vazio quando a lista de filmes estiver vazia. 366 | 367 | - A função deve lidar corretamente com filmes que possuem gêneros repetidos, contabilizando-os de forma adequada. 368 | 369 | - A função deve retornar um objeto vazio quando todos os filmes na lista não possuem gêneros. 370 | 371 | **O que será testado:** 372 | 373 | - Retorne um objeto onde as chaves são os nomes dos gêneros e os valores são as respectivas contagens de ocorrências. 374 | 375 | - Recebendo um array de filmes deve retornar: 376 | - Exemplo de saída: 377 | [ 378 | "Aventura": 5, 379 | "Ação": 7, 380 | "Comédia": 1, 381 | "Drama": 4, 382 | ... 383 | ] 384 | 385 |
386 | 387 | --- 388 | 389 | ## 11. Implemente a função `averageRatingByGenre` 390 | 391 |
392 | 393 | Calcular e retornar a média de avaliação dos filmes de um determinado gênero. 394 |
395 | 396 | - Recebe o parâmetro `genre`: Uma string representando o gênero do filme. 397 | 398 | - Utilize diretamente na função os filmes que vem no array de objetos que se encontra dentro do arquivo 399 | 400 | - A função deve buscar todos os filmes do gênero fornecido 401 | 402 | - Caso não haja filmes para o gênero fornecido, a função deve retornar uma mensagem informando isso. 403 | 404 | - Se houver filmes do gênero, a função deve calcular a soma de suas avaliações e dividir pelo número de filmes. 405 | 406 | - A média de avaliação deve ser formatada com duas casas decimais e inserida em uma string informativa. 407 | 408 | 409 | **O que será testado:** 410 | 411 | - Retorne uma string contendo a média de avaliação dos filmes do gênero fornecido, formatada com duas casas decimais, ou uma mensagem de erro indicando: 412 | - Ausência de filmes para o gênero fornecido. 413 | - Parâmetro genre ausente, inválido (não string) ou vazio. 414 | 415 | - a função deve retornar a mensagem `"O parâmetro é obrigatório."` quando a função não receber o parâmetro `genre` ou quando for uma `string` vazia no parâmetro 416 | 417 | - a função deve retornar a mensagem `"O parâmetro tem que ser uma string."` quando a função receber no parâmetro `genre` um valor do tipo `number` 418 | 419 | - a função deve retornar a mensagem `"Não há filmes do gênero Filme Clássico."` quando por exemplo a função receber no parâmetro `genre` um valor `"Filme Clássico"` 420 | 421 |
422 | 423 | --- 424 | 425 | ## 12. Implemente a função `filmSeparation` 426 | 427 |
428 | 429 | Separar filmes por gênero e ordená-los alfabeticamente por título. 430 |
431 | 432 | - Recebe o parâmetro `movies` que é um array de objetos contendo a lista de filmes 433 | 434 | - Recebe o parâmetro `details` que é um booleano com padrão `true`. Parâmetro opcional indicando se deve incluir detalhes dos filmes na separação. 435 | 436 | - Para cada filme: 437 | Criar uma lista para o gênero correspondente se ele ainda não existir no objeto de saída. 438 | Adicionar o filme à lista do gênero correspondente. 439 | Se o parâmetro details for true, incluir os detalhes do filme no objeto adicionado. 440 | Ordenar alfabeticamente cada objeto de filmes por título. 441 | Retornar o objeto final contendo todos os gêneros e seus filmes separados. 442 | 443 | - A função deve separar os filmes corretamente por gênero, mesmo quando cada filme possui vários gêneros. 444 | - A função deve ordenar alfabeticamente os filmes dentro de cada gênero. 445 | - A função deve excluir os detalhes dos filmes quando o parâmetro `details` for `false`. 446 | - A função deve retornar um objeto vazio quando a lista de filmes estiver vazia. 447 | - A função deve retornar um objeto vazio quando a lista de filmes estiver vazia. 448 | **O que será testado:** 449 | - Retorna um objeto onde as chaves são os gêneros e os valores são listas de objetos de filmes pertencentes a esses gêneros. Cada objeto de filme pode incluir detalhes se o parâmetro details for true. 450 | 451 | - Quando o parâmetro de `details` for `true` 452 | Exemplo de saída: 453 | { 454 | "Comédia": [{"anoLancamento": 2009, "avaliacao": 7.7, "diretor": "Todd Phillips", "id": 25, "titulo": "Se Beber, Não Case"}], 455 | "Drama": [{"anoLancamento": 2018, "avaliacao": 7.5, "diretor": "John Krasinski", "id": 24, "titulo": "Um Lugar Silencioso"}], 456 | "Suspense": [{"anoLancamento": 2018, "avaliacao": 7.5, "diretor": "John Krasinski", "id": 24, "titulo": "Um Lugar Silencioso"}], 457 | } 458 | 459 | - Quando o parâmetro de `details` for `false` 460 | Exemplo de saída: { 461 | "Aventura": ["Gladiador"], "Ação": ["Gladiador"], 462 | "Comédia": ["Esqueceram de Mim"], 463 | "Drama": ["A Chegada", "Clube da Luta", "Gladiador", "Interestelar"], 464 | } 465 | 466 |
467 | 468 | --- 469 | 470 | ## 13. Implemente a função `listOverdueLoans` 471 | 472 |
473 | 474 | Listar os empréstimos de filmes que estão atrasados. 475 |
476 | 477 | - Recebe o parâmetro `movies` que é um array contendo a lista de filmes 478 | 479 | - `movies`: Uma lista de objetos de filmes, onde cada objeto possui propriedades como id, titulo, emprestimos (lista de objetos de empréstimos com propriedades como dataEmprestimo e dataDevolucao). 480 | 481 | - Para cada empréstimo: 482 | Verificar se a `dataDevolucao` é anterior à data atual (considerando a data atual do sistema). 483 | Se estiver atrasado, adicionar o empréstimo ao array de objetos de empréstimos atrasados, incluindo as propriedades status e id do filme. 484 | Retornar a lista de empréstimos atrasados. 485 | 486 | Dica: pesquise sobre a implementação de new Date(); 487 | 488 | - A função deve retornar um array vazio quando o array de filmes estiver vazia. 489 | 490 | - A função deve retornar um array de objetos contendo apenas os empréstimos atrasados. 491 | 492 | - A função deve retornar um array vazio quando não houver empréstimos atrasados. 493 | 494 | - A função deve retornar um array vazio quando nenhum filme possuir empréstimos. 495 | 496 | - A função deve retornar um array vazio quando todos os empréstimos ainda não estiverem vencidos. 497 | 498 | **O que será testado:** 499 | 500 | - Retorna um array de objetos de empréstimos que estão atrasados, onde cada objeto possui propriedades como `id`, `titulo`, `dataEmprestimo`, `dataDevolucao` e `status` (definido como "atrasado"). 501 | 502 | 503 |
504 | 505 | --- 506 | 507 | ## 14. Implemente a função `classifyMovies` 508 | 509 |
510 | 511 | Classificar filmes em diferentes categorias com base na avaliação e disponibilidade. 512 |
513 | 514 | - Recebe o parâmetro `movies` que é um array contendo a lista de filmes 515 | 516 | - Para cada filme: 517 | Classificar o filme por avaliação, adicionando-o à lista correspondente dentro do objeto avaliacao. 518 | Classificar o filme por disponibilidade, adicionando-o à lista correspondente dentro do objeto disponibilidade. 519 | Retornar o objeto final contendo a classificação dos filmes. 520 | 521 | - A função deve retornar um objeto com as propriedades avaliacao e disponibilidade, cada uma com as subpropriedades esperadas. 522 | 523 | - A função deve classificar os filmes em três intervalos de avaliação e ordená-los por título dentro de cada intervalo. 524 | 525 | - A função deve classificar os filmes como disponíveis ou indisponíveis e ordená-los por título dentro de cada categoria. 526 | 527 | - A função deve retornar um objeto com listas vazias para todas as categorias quando a entrada estiver vazia. 528 | 529 | - A função deve retornar uma lista vazia para filmes indisponíveis quando todos os filmes estiverem disponíveis. 530 | 531 | **O que será testado:** 532 | 533 | - Um objeto contendo as seguintes propriedades: 534 | `avaliacao`: Um objeto com três chaves representando intervalos de avaliação `("0-4.9", "5.0-7.9", "8.0-10.0")`. Cada chave possui um valor que é uma lista de filmes ordenados por título dentro do intervalo de avaliação correspondente. 535 | `disponibilidade`: Um objeto com duas chaves: 536 | `disponiveis`: Uma lista de filmes disponíveis (propriedade disponivel como true) ordenados por título. 537 | `naoDisponiveis`: Uma lista de filmes indisponíveis (propriedade disponivel como false) ordenados por título. 538 | 539 | - Quando informa um array de objetos contendo a lista de filmes 540 | Exemplo de saída: { 541 | avaliacao: { 542 | '0-4.9': [], 543 | '5.0-7.9': [ 544 | { 545 | titulo: "A Chegada", 546 | diretor: "Denis Villeneuve", 547 | genero: ["Ficção Científica", "Drama"], 548 | anoLancamento: 2016, 549 | avaliacao: 7.9, 550 | }, 551 | { 552 | titulo: "Amor Além da Vida", 553 | diretor: "Vincent Ward", 554 | genero: ["Romance", "Fantasia"], 555 | anoLancamento: 1998, 556 | avaliacao: 7.1, 557 | }, 558 | { 559 | titulo: "Esqueceram de Mim", 560 | diretor: "Chris Columbus", 561 | genero: ["Comédia", "Família"], 562 | anoLancamento: 1990, 563 | avaliacao: 7.6, 564 | } 565 | ],} 566 | } 567 | 568 |
569 | 570 | 571 | -------------------------------------------------------------------------------- /data/list1.js: -------------------------------------------------------------------------------- 1 | const { list2 } = require("./list2"); 2 | const { list3 } = require("./list3"); 3 | 4 | const list1 = [ 5 | { 6 | id: 1, 7 | titulo: "Cidade de Deus", 8 | diretor: "Fernando Meirelles", 9 | genero: ["Drama", "Crime"], 10 | anoLancamento: 2002, 11 | paisOrigem: "Brasil", 12 | idiomaOriginal: "Português", 13 | estudio: { 14 | nome: "O2 Filmes", 15 | localizacao: "São Paulo, Brasil" 16 | }, 17 | duracao: 130, 18 | elenco: ["Alexandre Rodrigues", "Leandro Firmino", "Phellipe Haagensen"], 19 | premios: [ 20 | { 21 | nome: "Globo de Ouro", 22 | categoria: "Melhor Filme Estrangeiro", 23 | ano: 2003 24 | }, 25 | { 26 | nome: "BAFTA", 27 | categoria: "Melhor Edição", 28 | ano: 2004 29 | } 30 | ], 31 | avaliacao: 8.6, 32 | disponivel: false, 33 | emprestimos: [ 34 | { 35 | nomePessoa: "Ana", 36 | dataEmprestimo: "2023-09-05", 37 | dataDevolucao: "2023-10-05" 38 | } 39 | ] 40 | }, 41 | { 42 | id: 2, 43 | titulo: "Jogos Mortais", 44 | diretor: "James Wan", 45 | genero: ["Terror", "Suspense"], 46 | anoLancamento: 2004, 47 | paisOrigem: "Estados Unidos", 48 | idiomaOriginal: "Inglês", 49 | estudio: { 50 | nome: "Twisted Pictures", 51 | localizacao: "Los Angeles, EUA" 52 | }, 53 | duracao: 103, 54 | elenco: ["Cary Elwes", "Leigh Whannell", "Danny Glover"], 55 | avaliacao: 7.6, 56 | disponivel: true, 57 | emprestimos: [ 58 | { 59 | nomePessoa: "André", 60 | dataEmprestimo: "2023-08-15", 61 | dataDevolucao: "2023-09-15" 62 | } 63 | ] 64 | }, 65 | { 66 | id: 3, 67 | titulo: "Matrix", 68 | diretor: "Lana Wachowski, Lilly Wachowski", 69 | genero: ["Ficção Científica", "Ação"], 70 | anoLancamento: 1999, 71 | paisOrigem: "Estados Unidos", 72 | idiomaOriginal: "Inglês", 73 | estudio: { 74 | nome: "Warner Bros.", 75 | localizacao: "Los Angeles, EUA" 76 | }, 77 | duracao: 136, 78 | elenco: ["Keanu Reeves", "Laurence Fishburne", "Carrie-Anne Moss"], 79 | avaliacao: 8.7, 80 | disponivel: true, 81 | emprestimos: [ 82 | { 83 | nomePessoa: "João", 84 | dataEmprestimo: "2023-11-01", 85 | dataDevolucao: "2023-12-01" 86 | } 87 | ] 88 | }, 89 | { 90 | id: 4, 91 | titulo: "Senhor dos Anéis: A Sociedade do Anel", 92 | diretor: "Peter Jackson", 93 | genero: ["Fantasia", "Aventura"], 94 | anoLancamento: 2001, 95 | paisOrigem: "Nova Zelândia", 96 | idiomaOriginal: "Inglês", 97 | estudio: { 98 | nome: "New Line Cinema", 99 | localizacao: "Wellington, Nova Zelândia" 100 | }, 101 | duracao: 178, 102 | elenco: ["Elijah Wood", "Ian McKellen", "Viggo Mortensen"], 103 | avaliacao: 8.9, 104 | disponivel: true, 105 | emprestimos: [ 106 | { 107 | nomePessoa: "Sophia", 108 | dataEmprestimo: "2023-10-25", 109 | dataDevolucao: "2023-11-25" 110 | } 111 | ] 112 | }, 113 | { 114 | id: 5, 115 | titulo: "Tropa de Elite", 116 | diretor: "José Padilha", 117 | genero: ["Ação", "Drama"], 118 | anoLancamento: 2007, 119 | paisOrigem: "Brasil", 120 | idiomaOriginal: "Português", 121 | estudio: { 122 | nome: "Zazen Produções", 123 | localizacao: "Rio de Janeiro, Brasil" 124 | }, 125 | duracao: 115, 126 | elenco: ["Wagner Moura", "André Ramiro", "Caio Junqueira"], 127 | avaliacao: 8.1, 128 | disponivel: true, 129 | emprestimos: [ 130 | { 131 | nomePessoa: "Lucas", 132 | dataEmprestimo: "2023-12-10", 133 | dataDevolucao: "2024-01-10" 134 | } 135 | ] 136 | }, 137 | { 138 | id: 6, 139 | titulo: "O Grito", 140 | diretor: "Takashi Shimizu", 141 | genero: ["Terror", "Suspense"], 142 | anoLancamento: 2002, 143 | paisOrigem: "Japão", 144 | idiomaOriginal: "Japonês", 145 | estudio: { 146 | nome: "Pioneer LDC", 147 | localizacao: "Tóquio, Japão" 148 | }, 149 | duracao: 92, 150 | elenco: ["Sarah Michelle Gellar", "Jason Behr", "Clea DuVall"], 151 | avaliacao: 6.7, 152 | disponivel: true, 153 | emprestimos: [ 154 | { 155 | nomePessoa: "Mariana", 156 | dataEmprestimo: "2023-07-20", 157 | dataDevolucao: "2023-08-20" 158 | } 159 | ] 160 | }, 161 | { 162 | id: 7, 163 | titulo: "Pearl Harbor", 164 | diretor: "Michael Bay", 165 | genero: ["Ação", "Drama", "Romance"], 166 | anoLancamento: 2001, 167 | paisOrigem: "Estados Unidos", 168 | idiomaOriginal: "Inglês", 169 | estudio: { 170 | nome: "Touchstone Pictures", 171 | localizacao: "Los Angeles, EUA" 172 | }, 173 | duracao: 183, 174 | elenco: ["Ben Affleck", "Josh Hartnett", "Kate Beckinsale"], 175 | avaliacao: 6.2, 176 | disponivel: true, 177 | emprestimos: [ 178 | { 179 | nomePessoa: "Roberto", 180 | dataEmprestimo: "2023-10-05", 181 | dataDevolucao: "2023-11-05" 182 | } 183 | ] 184 | }, 185 | { 186 | id: 8, 187 | titulo: "Homem de Ferro", 188 | diretor: "Jon Favreau", 189 | genero: ["Ação", "Ficção Científica"], 190 | anoLancamento: 2008, 191 | paisOrigem: "Estados Unidos", 192 | idiomaOriginal: "Inglês", 193 | estudio: { 194 | nome: "Marvel Studios", 195 | localizacao: "Los Angeles, EUA" 196 | }, 197 | duracao: 126, 198 | elenco: ["Robert Downey Jr.", "Gwyneth Paltrow", "Jeff Bridges"], 199 | avaliacao: 7.9, 200 | disponivel: true, 201 | emprestimos: [ 202 | { 203 | nomePessoa: "Patrícia", 204 | dataEmprestimo: "2023-09-15", 205 | dataDevolucao: "2023-10-15" 206 | } 207 | ] 208 | }, 209 | { 210 | id: 9, 211 | titulo: "Diário de uma Paixão", 212 | diretor: "Nick Cassavetes", 213 | genero: ["Romance", "Drama"], 214 | anoLancamento: 2004, 215 | paisOrigem: "Estados Unidos", 216 | idiomaOriginal: "Inglês", 217 | estudio: { 218 | nome: "New Line Cinema", 219 | localizacao: "Los Angeles, EUA" 220 | }, 221 | duracao: 123, 222 | elenco: ["Ryan Gosling", "Rachel McAdams", "James Garner"], 223 | avaliacao: 7.8, 224 | disponivel: true, 225 | emprestimos: [ 226 | { 227 | nomePessoa: "Julia", 228 | dataEmprestimo: "2023-11-20", 229 | dataDevolucao: "2023-12-20" 230 | } 231 | ] 232 | }, 233 | { 234 | id: 10, 235 | titulo: "O Alto da Compadecida", 236 | diretor: "Guel Arraes", 237 | genero: ["Comédia", "Aventura"], 238 | anoLancamento: 2000, 239 | paisOrigem: "Brasil", 240 | idiomaOriginal: "Português", 241 | estudio: { 242 | nome: "Globo Filmes", 243 | localizacao: "Rio de Janeiro, Brasil" 244 | }, 245 | duracao: 104, 246 | elenco: ["Matheus Nachtergaele", "Selton Mello", "Fernanda Montenegro"], 247 | avaliacao: 8.6, 248 | disponivel: false, 249 | emprestimos: [] 250 | }, 251 | { 252 | id: 11, 253 | titulo: "300", 254 | diretor: "Zack Snyder", 255 | genero: ["Ação", "Drama"], 256 | anoLancamento: 2006, 257 | paisOrigem: "Estados Unidos", 258 | idiomaOriginal: "Inglês", 259 | estudio: { 260 | nome: "Warner Bros.", 261 | localizacao: "Los Angeles, EUA" 262 | }, 263 | duracao: 117, 264 | elenco: ["Gerard Butler", "Lena Headey", "David Wenham"], 265 | avaliacao: 7.7, 266 | disponivel: true, 267 | emprestimos: [ 268 | { 269 | nomePessoa: "Pedro", 270 | dataEmprestimo: "2023-08-20", 271 | dataDevolucao: "2023-09-20" 272 | } 273 | ] 274 | }, 275 | { 276 | id: 12, 277 | titulo: "Rei Arthur", 278 | diretor: "Antoine Fuqua", 279 | genero: ["Ação", "Aventura"], 280 | anoLancamento: 2004, 281 | paisOrigem: "Estados Unidos", 282 | idiomaOriginal: "Inglês", 283 | estudio: { 284 | nome: "Touchstone Pictures", 285 | localizacao: "Los Angeles, EUA" 286 | }, 287 | duracao: 126, 288 | elenco: ["Clive Owen", "Ioan Gruffudd", "Keira Knightley"], 289 | avaliacao: 6.3, 290 | disponivel: true, 291 | emprestimos: [] 292 | }, 293 | { 294 | id: 13, 295 | titulo: "O Jogo da Imitação", 296 | diretor: "Morten Tyldum", 297 | genero: ["Biografia", "Drama"], 298 | anoLancamento: 2014, 299 | paisOrigem: "Reino Unido", 300 | idiomaOriginal: "Inglês", 301 | estudio: { 302 | nome: "Black Bear Pictures", 303 | localizacao: "Los Angeles, EUA" 304 | }, 305 | duracao: 114, 306 | elenco: ["Benedict Cumberbatch", "Keira Knightley", "Matthew Goode"], 307 | avaliacao: 8.0, 308 | disponivel: true, 309 | emprestimos: [ 310 | { 311 | nomePessoa: "Laura", 312 | dataEmprestimo: "2023-11-10", 313 | dataDevolucao: "2023-12-10" 314 | } 315 | ] 316 | }, 317 | { 318 | id: 14, 319 | titulo: "A Lagoa Azul", 320 | diretor: "Randal Kleiser", 321 | genero: ["Aventura", "Drama"], 322 | anoLancamento: 1980, 323 | paisOrigem: "Estados Unidos", 324 | idiomaOriginal: "Inglês", 325 | estudio: { 326 | nome: "Columbia Pictures", 327 | localizacao: "Los Angeles, EUA" 328 | }, 329 | duracao: 104, 330 | elenco: ["Brooke Shields", "Christopher Atkins", "Leo McKern"], 331 | avaliacao: 5.8, 332 | disponivel: true, 333 | emprestimos: [ 334 | { 335 | nomePessoa: "Luciana", 336 | dataEmprestimo: "2023-06-15", 337 | dataDevolucao: "2023-07-15" 338 | } 339 | ] 340 | }, 341 | ]; 342 | 343 | module.exports = { 344 | list1 345 | } -------------------------------------------------------------------------------- /data/list2.js: -------------------------------------------------------------------------------- 1 | const list2 = [ 2 | { 3 | id: 15, 4 | titulo: "Esqueceram de Mim", 5 | diretor: "Chris Columbus", 6 | genero: ["Comédia", "Família"], 7 | anoLancamento: 1990, 8 | paisOrigem: "Estados Unidos", 9 | idiomaOriginal: "Inglês", 10 | estudio: { 11 | nome: "20th Century Fox", 12 | localizacao: "Los Angeles, EUA" 13 | }, 14 | duracao: 103, 15 | elenco: ["Macaulay Culkin", "Joe Pesci", "Daniel Stern"], 16 | avaliacao: 7.6, 17 | disponivel: false, 18 | emprestimos: [ 19 | { 20 | nomePessoa: "Ricardo", 21 | dataEmprestimo: "2023-09-18", 22 | dataDevolucao: "2023-10-18" 23 | } 24 | ] 25 | }, 26 | { 27 | id: 16, 28 | titulo: "Clube da Luta", 29 | diretor: "David Fincher", 30 | genero: ["Drama"], 31 | anoLancamento: 1999, 32 | paisOrigem: "Estados Unidos", 33 | idiomaOriginal: "Inglês", 34 | estudio: { 35 | nome: "Fox 2000 Pictures", 36 | localizacao: "Los Angeles, EUA" 37 | }, 38 | duracao: 139, 39 | elenco: ["Brad Pitt", "Edward Norton", "Helena Bonham Carter"], 40 | premios: [ 41 | { 42 | nome: "Saturn Awards", 43 | categoria: "Melhor Ator Coadjuvante", 44 | ano: 2000 45 | } 46 | ], 47 | avaliacao: 8.8, 48 | disponivel: true, 49 | emprestimos: [ 50 | { 51 | nomePessoa: "Fernanda", 52 | dataEmprestimo: "2023-05-15", 53 | dataDevolucao: "2023-08-15" 54 | } 55 | ] 56 | }, 57 | { 58 | id: 17, 59 | titulo: "Gladiador", 60 | diretor: "Ridley Scott", 61 | genero: ["Ação", "Drama", "Aventura"], 62 | anoLancamento: 2000, 63 | paisOrigem: "Estados Unidos", 64 | idiomaOriginal: "Inglês", 65 | estudio: { 66 | nome: "DreamWorks Pictures", 67 | localizacao: "Los Angeles, EUA" 68 | }, 69 | duracao: 155, 70 | elenco: ["Russell Crowe", "Joaquin Phoenix", "Connie Nielsen"], 71 | premios: [ 72 | { 73 | nome: "Oscar", 74 | categoria: "Melhor Filme", 75 | ano: 2001 76 | }, 77 | { 78 | nome: "BAFTA", 79 | categoria: "Melhor Filme", 80 | ano: 2001 81 | } 82 | ], 83 | avaliacao: 8.5, 84 | disponivel: true, 85 | emprestimos: [] 86 | }, 87 | { 88 | id: 18, 89 | titulo: "A Chegada", 90 | diretor: "Denis Villeneuve", 91 | genero: ["Ficção Científica", "Drama"], 92 | anoLancamento: 2016, 93 | paisOrigem: "Estados Unidos", 94 | idiomaOriginal: "Inglês", 95 | estudio: { 96 | nome: "21 Laps Entertainment", 97 | localizacao: "Los Angeles, EUA" 98 | }, 99 | duracao: 116, 100 | elenco: ["Amy Adams", "Jeremy Renner", "Forest Whitaker"], 101 | premios: [ 102 | { 103 | nome: "Oscar", 104 | categoria: "Melhor Edição de Som", 105 | ano: 2017 106 | }, 107 | { 108 | nome: "BAFTA", 109 | categoria: "Melhor Filme Britânico", 110 | ano: 2017 111 | } 112 | ], 113 | avaliacao: 7.9, 114 | disponivel: true, 115 | emprestimos: [ 116 | { 117 | nomePessoa: "Carlos", 118 | dataEmprestimo: "2023-10-15", 119 | dataDevolucao: "2023-11-15" 120 | }, 121 | { 122 | nomePessoa: "Maria", 123 | dataEmprestimo: "2024-01-20", 124 | dataDevolucao: "2024-06-20" 125 | } 126 | ] 127 | }, 128 | { 129 | id: 19, 130 | titulo: "Amor Além da Vida", 131 | diretor: "Vincent Ward", 132 | genero: ["Romance", "Fantasia"], 133 | anoLancamento: 1998, 134 | paisOrigem: "Estados Unidos", 135 | idiomaOriginal: "Inglês", 136 | estudio: { 137 | nome: "PolyGram Filmed Entertainment", 138 | localizacao: "Los Angeles, EUA" 139 | }, 140 | duracao: 113, 141 | elenco: ["Robin Williams", "Cuba Gooding Jr.", "Annabella Sciorra"], 142 | avaliacao: 7.1, 143 | disponivel: true, 144 | emprestimos: [ 145 | { 146 | nomePessoa: "Rafael", 147 | dataEmprestimo: "2024-02-10", 148 | dataDevolucao: "2024-06-10" 149 | } 150 | ] 151 | }, 152 | { 153 | id: 20, 154 | titulo: "Interestelar", 155 | diretor: "Christopher Nolan", 156 | genero: ["Ficção Científica", "Drama"], 157 | anoLancamento: 2014, 158 | paisOrigem: "Estados Unidos", 159 | idiomaOriginal: "Inglês", 160 | estudio: { 161 | nome: "Paramount Pictures", 162 | localizacao: "Hollywood, EUA" 163 | }, 164 | duracao: 169, 165 | elenco: ["Matthew McConaughey", "Anne Hathaway", "Jessica Chastain"], 166 | avaliacao: 8.6, 167 | disponivel: true, 168 | emprestimos: [ 169 | { 170 | nomePessoa: "Sophie", 171 | dataEmprestimo: "2023-07-05", 172 | dataDevolucao: "2023-08-05" 173 | } 174 | ] 175 | }, 176 | ] 177 | 178 | module.exports = { 179 | list2 180 | } -------------------------------------------------------------------------------- /data/list3.js: -------------------------------------------------------------------------------- 1 | const list3 = [ 2 | { 3 | id: 21, 4 | titulo: "Pantera Negra", 5 | diretor: "Ryan Coogler", 6 | genero: ["Ação", "Aventura", "Fantasia"], 7 | anoLancamento: 2018, 8 | paisOrigem: "Estados Unidos", 9 | idiomaOriginal: "Inglês", 10 | estudio: { 11 | nome: "Marvel Studios", 12 | localizacao: "Los Angeles, EUA" 13 | }, 14 | duracao: 134, 15 | elenco: ["Chadwick Boseman", "Michael B. Jordan", "Lupita Nyong'o"], 16 | premios: [ 17 | { 18 | nome: "Oscar", 19 | categoria: "Melhor Design de Produção", 20 | ano: 2019 21 | }, 22 | { 23 | nome: "MTV Movie & TV Awards", 24 | categoria: "Melhor Filme", 25 | ano: 2018 26 | } 27 | ], 28 | avaliacao: 7.3, 29 | disponivel: true, 30 | emprestimos: [] 31 | }, 32 | { 33 | id: 22, 34 | titulo: "Vingadores: Ultimato", 35 | diretor: "Anthony Russo, Joe Russo", 36 | genero: ["Ação", "Aventura", "Ficção Científica"], 37 | anoLancamento: 2019, 38 | paisOrigem: "Estados Unidos", 39 | idiomaOriginal: "Inglês", 40 | estudio: { 41 | nome: "Marvel Studios", 42 | localizacao: "Los Angeles, EUA" 43 | }, 44 | duracao: 181, 45 | elenco: ["Robert Downey Jr.", "Chris Evans", "Scarlett Johansson"], 46 | premios: [ 47 | { 48 | nome: "MTV Movie & TV Awards", 49 | categoria: "Melhor Filme", 50 | ano: 2019 51 | }, 52 | { 53 | nome: "Teen Choice Awards", 54 | categoria: "Melhor Filme de Ação", 55 | ano: 2019 56 | } 57 | ], 58 | avaliacao: 8.4, 59 | disponivel: true, 60 | emprestimos: [] 61 | }, 62 | { 63 | id: 23, 64 | titulo: "Mad Max: Estrada da Fúria", 65 | diretor: "George Miller", 66 | genero: ["Ação", "Aventura", "Ficção Científica"], 67 | anoLancamento: 2015, 68 | paisOrigem: "Austrália", 69 | idiomaOriginal: "Inglês", 70 | estudio: { 71 | nome: "Warner Bros. Pictures", 72 | localizacao: "Los Angeles, EUA" 73 | }, 74 | duracao: 120, 75 | elenco: ["Tom Hardy", "Charlize Theron", "Nicholas Hoult"], 76 | premios: [ 77 | { 78 | nome: "Oscar", 79 | categoria: "Melhor Design de Produção", 80 | ano: 2016 81 | }, 82 | { 83 | nome: "BAFTA", 84 | categoria: "Melhor Maquiagem e Penteado", 85 | ano: 2016 86 | } 87 | ], 88 | avaliacao: 8.1, 89 | disponivel: true, 90 | emprestimos: [ 91 | { 92 | nomePessoa: "Neto", 93 | dataEmprestimo: "2024-01-12", 94 | dataDevolucao: "2024-04-05" 95 | } 96 | ] 97 | }, 98 | { 99 | id: 24, 100 | titulo: "Um Lugar Silencioso", 101 | diretor: "John Krasinski", 102 | genero: ["Suspense", "Drama", "Terror"], 103 | anoLancamento: 2018, 104 | paisOrigem: "Estados Unidos", 105 | idiomaOriginal: "Inglês", 106 | estudio: { 107 | nome: "Platinum Dunes", 108 | localizacao: "Los Angeles, EUA" 109 | }, 110 | duracao: 90, 111 | elenco: ["Emily Blunt", "John Krasinski", "Millicent Simmonds"], 112 | premios: [ 113 | { 114 | nome: "Critics' Choice Movie Awards", 115 | categoria: "Melhor Filme de Terror", 116 | ano: 2019 117 | }, 118 | { 119 | nome: "MTV Movie & TV Awards", 120 | categoria: "Melhor Performance Assustadora", 121 | ano: 2019 122 | } 123 | ], 124 | avaliacao: 7.5, 125 | disponivel: true, 126 | emprestimos: [] 127 | }, 128 | { 129 | id: 25, 130 | titulo: "Se Beber, Não Case", 131 | diretor: "Todd Phillips", 132 | genero: ["Comédia"], 133 | anoLancamento: 2009, 134 | paisOrigem: "Estados Unidos", 135 | idiomaOriginal: "Inglês", 136 | estudio: { 137 | nome: "Warner Bros. Pictures", 138 | localizacao: "Los Angeles, EUA" 139 | }, 140 | duracao: 100, 141 | elenco: ["Bradley Cooper", "Ed Helms", "Zach Galifianakis"], 142 | premios: [ 143 | { 144 | nome: "MTV Movie Awards", 145 | categoria: "Melhor Comediante Revelação", 146 | ano: 2009 147 | }, 148 | { 149 | nome: "Teen Choice Awards", 150 | categoria: "Melhor Comédia", 151 | ano: 2009 152 | } 153 | ], 154 | avaliacao: 7.7, 155 | disponivel: true, 156 | emprestimos: [ 157 | { 158 | nomePessoa: "Julio", 159 | dataEmprestimo: "2024-02-01", 160 | dataDevolucao: "2024-06-01" 161 | }, 162 | { 163 | nomePessoa: "Fernanda", 164 | dataEmprestimo: "2023-12-15", 165 | dataDevolucao: "2024-01-15" 166 | } 167 | ] 168 | }, 169 | { 170 | id: 26, 171 | titulo: "Star Wars: Episódio IV - Uma Nova Esperança", 172 | diretor: "George Lucas", 173 | genero: ["Ficção Científica", "Aventura", "Fantasia"], 174 | anoLancamento: 1977, 175 | paisOrigem: "Estados Unidos", 176 | idiomaOriginal: "Inglês", 177 | estudio: { 178 | nome: "Lucasfilm Ltd.", 179 | localizacao: "San Francisco, EUA" 180 | }, 181 | duracao: 121, 182 | elenco: ["Mark Hamill", "Harrison Ford", "Carrie Fisher"], 183 | premios: [ 184 | { 185 | nome: "Oscar", 186 | categoria: "Melhor Design de Produção", 187 | ano: 1978 188 | }, 189 | { 190 | nome: "Globo de Ouro", 191 | categoria: "Melhor Filme - Drama", 192 | ano: 1978 193 | } 194 | ], 195 | avaliacao: 8.6, 196 | disponivel: true, 197 | emprestimos: [ 198 | { 199 | nomePessoa: "Fagundes", 200 | dataEmprestimo: "2024-02-03", 201 | dataDevolucao: "2024-05-20" 202 | }, 203 | ] 204 | } 205 | ] 206 | 207 | module.exports = { 208 | list3 209 | } -------------------------------------------------------------------------------- /data/movies.js: -------------------------------------------------------------------------------- 1 | const { list1 } = require("./list1"); 2 | const { list2 } = require("./list2"); 3 | const { list3 } = require("./list3"); 4 | 5 | const movies = [ 6 | ...list1, 7 | ...list2, 8 | ...list3 9 | ] 10 | 11 | module.exports = movies -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "magic-functions", 3 | "version": "1.0.0", 4 | "description": "# Orientações", 5 | "main": "index.js", 6 | "directories": { 7 | "test": "tests" 8 | }, 9 | "scripts": { 10 | "test": "jest" 11 | }, 12 | "keywords": [], 13 | "author": "", 14 | "license": "ISC", 15 | "devDependencies": { 16 | "jest": "^29.7.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/averageRatingByGenre.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | function averageRatingByGenre(genero) { 3 | 4 | } 5 | 6 | module.exports = { 7 | averageRatingByGenre 8 | } -------------------------------------------------------------------------------- /src/bestRatedFilm.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | 3 | const bestRatedFilm = (movies) => { 4 | 5 | } 6 | 7 | module.exports = { 8 | bestRatedFilm 9 | } -------------------------------------------------------------------------------- /src/classifyMovies.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | 3 | function classifyMovies(movies) { 4 | 5 | } 6 | 7 | module.exports = { 8 | classifyMovies 9 | } -------------------------------------------------------------------------------- /src/countGenres.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | 3 | function countGenres(movies) { 4 | 5 | } 6 | 7 | module.exports = { 8 | countGenres 9 | } 10 | -------------------------------------------------------------------------------- /src/filmSeparation.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | 3 | function filmSeparation(movies, details = true) { 4 | 5 | } 6 | 7 | module.exports = { 8 | filmSeparation 9 | } 10 | -------------------------------------------------------------------------------- /src/filmSorted.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | 3 | const filmSorted = (movies) => { 4 | 5 | } 6 | 7 | module.exports = { 8 | filmSorted 9 | } -------------------------------------------------------------------------------- /src/filmsAvailable.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | 3 | const filmsAvailable = (movies) => { 4 | 5 | } 6 | 7 | module.exports = { 8 | filmsAvailable 9 | } -------------------------------------------------------------------------------- /src/findActorForTheMovie.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | 3 | const findActorForTheMovie = (titulo) => { 4 | 5 | } 6 | 7 | module.exports = { 8 | findActorForTheMovie 9 | } -------------------------------------------------------------------------------- /src/getAllTitles.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | 3 | const getAllTitles = (movies) => { 4 | 5 | } 6 | 7 | module.exports = { 8 | getAllTitles 9 | } -------------------------------------------------------------------------------- /src/getMovieById.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | 3 | function getMovieById(id) { 4 | 5 | } 6 | 7 | module.exports = { 8 | getMovieById 9 | } -------------------------------------------------------------------------------- /src/listOverdueLoans.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | 3 | function listOverdueLoans(movies) { 4 | 5 | } 6 | 7 | module.exports = { 8 | listOverdueLoans 9 | } -------------------------------------------------------------------------------- /src/moviesWithActor.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | 3 | function moviesWithActor(ator) { 4 | 5 | } 6 | 7 | module.exports = { 8 | moviesWithActor 9 | } -------------------------------------------------------------------------------- /src/nolanFilms.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | 3 | const nolanFilms = (movies) => { 4 | 5 | } 6 | 7 | module.exports = { 8 | nolanFilms 9 | } -------------------------------------------------------------------------------- /src/titlesAndDirectors.js: -------------------------------------------------------------------------------- 1 | const { movies } = require("../data/list1"); 2 | 3 | const titlesAndDirectors = (movies) => { 4 | 5 | } 6 | 7 | module.exports = { 8 | titlesAndDirectors 9 | } -------------------------------------------------------------------------------- /tests/01-getAllTitles.test.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | const { list1 } = require("../data/list1"); 3 | const { list2 } = require("../data/list2"); 4 | const { list3 } = require("../data/list3"); 5 | const { getAllTitles } = require("../src/getAllTitles"); 6 | const { mockTitles1, mockTitles2, mockTitles3 } = require("./mocks/mock"); 7 | 8 | describe('getAllTitles', () => { 9 | 10 | it('should return an array of movie titles when the function is called with valid input', () => { 11 | const result = getAllTitles(movies); 12 | expect(Array.isArray(result)).toBe(true); 13 | expect(result.length).toBe(movies.length); 14 | expect(result).toEqual([...mockTitles1, ...mockTitles2, ...mockTitles3]); 15 | }); 16 | 17 | it('should return an array of movie titles when the function is called with valid input', () => { 18 | const result = getAllTitles(list1); 19 | expect(Array.isArray(result)).toBe(true); 20 | expect(result.length).toBe(list1.length); 21 | expect(result).toEqual(mockTitles1); 22 | }); 23 | 24 | it('should return an array of movie titles when the function is called with valid input', () => { 25 | const result = getAllTitles(list2); 26 | expect(Array.isArray(result)).toBe(true); 27 | expect(result.length).toBe(list2.length); 28 | expect(result).toEqual(mockTitles2); 29 | }); 30 | 31 | it('should return an array of movie titles when the function is called with valid input', () => { 32 | const result = getAllTitles(list3); 33 | expect(Array.isArray(result)).toBe(true); 34 | expect(result.length).toBe(list3.length); 35 | expect(result).toEqual(mockTitles3); 36 | }); 37 | 38 | it('should return an array empty when the function is called with array empty', () => { 39 | const result = getAllTitles([]); 40 | expect(Array.isArray(result)).toBe(true); 41 | expect(result).toEqual([]); 42 | }); 43 | 44 | }); 45 | -------------------------------------------------------------------------------- /tests/02-getMovieById.test.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | const { getMovieById } = require("../src/getMovieById"); 3 | 4 | 5 | describe('getMovieById', () => { 6 | 7 | it('should return the movie object with the given id', () => { 8 | const movie = getMovieById(5); 9 | expect(movie).toEqual(movies[4]); 10 | }); 11 | 12 | it('should return the movie object with the given id', () => { 13 | const movie = getMovieById(7); 14 | expect(movie).toEqual(movies[6]); 15 | }); 16 | 17 | it('should return the movie object with the given id', () => { 18 | const movie = getMovieById(12); 19 | expect(movie).toEqual(movies[11]); 20 | }); 21 | 22 | it('should return undefined if no movie with the given id is found', () => { 23 | const movie = getMovieById(100); 24 | expect(movie).toBeUndefined(); 25 | }); 26 | 27 | it('should return undefined if the id parameter is not provided', () => { 28 | const movie = getMovieById(); 29 | expect(movie).toBeUndefined(); 30 | }); 31 | 32 | it('should return undefined if the id parameter is not a number', () => { 33 | const movie = getMovieById("1"); 34 | expect(movie).toBeUndefined(); 35 | }); 36 | 37 | it('should return undefined if the id parameter is negative', () => { 38 | const movie = getMovieById(-1); 39 | expect(movie).toBeUndefined(); 40 | }); 41 | 42 | it('should return undefined if the id parameter is zero', () => { 43 | const movie = getMovieById(0); 44 | expect(movie).toBeUndefined(); 45 | }); 46 | }); 47 | -------------------------------------------------------------------------------- /tests/03-moviesWithActor.test.js: -------------------------------------------------------------------------------- 1 | const movies = require("../data/movies"); 2 | const { moviesWithActor } = require("../src/moviesWithActor"); 3 | 4 | describe('moviesWithActor', () => { 5 | 6 | it('should return an array of movies that includes the given actor in its cast', () => { 7 | const actor = "Keanu Reeves"; 8 | const result = moviesWithActor(actor); 9 | 10 | expect(result).toEqual([movies[2]]); 11 | }); 12 | 13 | it('should return an empty array if no movie includes the given actor in its cast', () => { 14 | const actor = "Robert Downey Jr."; 15 | 16 | const result = moviesWithActor(actor); 17 | 18 | expect(result).toEqual([movies[7], movies[21]]); 19 | }); 20 | 21 | it('should return an empty array if the input is not a string', () => { 22 | const actor = 123; 23 | const expectedMovies = []; 24 | 25 | const result = moviesWithActor(actor); 26 | 27 | expect(result).toEqual(expectedMovies); 28 | }); 29 | 30 | it('should return an empty array if the input is an empty string', () => { 31 | const actor = ""; 32 | const expectedMovies = []; 33 | 34 | const result = moviesWithActor(actor); 35 | 36 | expect(result).toEqual(expectedMovies); 37 | }); 38 | 39 | it('should return an empty array if the input actor does not exist in the list of movies', () => { 40 | const actor = "Brad Pitt"; 41 | 42 | const result = moviesWithActor(actor); 43 | 44 | expect(result).toEqual([movies[15]]); 45 | }); 46 | }); 47 | -------------------------------------------------------------------------------- /tests/04-bestRatedFilm.test.js: -------------------------------------------------------------------------------- 1 | const { list1 } = require("../data/list1"); 2 | const { list2 } = require("../data/list2"); 3 | const { list3 } = require("../data/list3"); 4 | const { bestRatedFilm } = require("../src/bestRatedFilm") 5 | 6 | describe('bestRatedFilm', () => { 7 | 8 | it('should return the movie with the highest rating when given an array of movies with valid ratings', () => { 9 | 10 | const [,,,mockMovie] = list1 11 | 12 | const result = bestRatedFilm(list1); 13 | 14 | expect(result).toEqual(mockMovie); 15 | }); 16 | 17 | it('should return the first movie in the array when given an array of movies with only one movie', () => { 18 | const [,mockMovie] = list2 19 | 20 | const result = bestRatedFilm(list2); 21 | 22 | expect(result).toEqual(mockMovie); 23 | }); 24 | 25 | it('should return the first movie in the array when given an array of movies with equal ratings', () => { 26 | const [,,,,,mockMovie] = list3 27 | 28 | const result = bestRatedFilm(list3); 29 | 30 | expect(result).toEqual(mockMovie); 31 | }); 32 | 33 | it('should return undefined when given an empty array', () => { 34 | const movies = []; 35 | 36 | const result = bestRatedFilm(movies); 37 | 38 | expect(result).toBeUndefined(); 39 | }); 40 | 41 | }); 42 | -------------------------------------------------------------------------------- /tests/05-titlesAndDirectors.test.js: -------------------------------------------------------------------------------- 1 | const { list2 } = require("../data/list2"); 2 | const { list3 } = require("../data/list3"); 3 | const { titlesAndDirectors } = require("../src/titlesAndDirectors"); 4 | 5 | describe('titlesAndDirectors', () => { 6 | 7 | it('should iterate through the movies array and log the title and director of each movie', () => { 8 | const consoleSpy = jest.spyOn(console, 'log'); 9 | 10 | titlesAndDirectors(list2); 11 | 12 | expect(consoleSpy).toHaveBeenCalledWith('Título: Esqueceram de Mim - Diretor: Chris Columbus'); 13 | expect(consoleSpy).toHaveBeenCalledWith('Título: Clube da Luta - Diretor: David Fincher'); 14 | expect(consoleSpy).toHaveBeenCalledWith('Título: Gladiador - Diretor: Ridley Scott'); 15 | 16 | consoleSpy.mockRestore(); 17 | }); 18 | 19 | it('should handle an empty movies array', () => { 20 | const movies = []; 21 | 22 | const consoleSpy = jest.spyOn(console, 'log'); 23 | 24 | titlesAndDirectors(movies); 25 | 26 | expect(consoleSpy).not.toHaveBeenCalled(); 27 | 28 | consoleSpy.mockRestore(); 29 | }); 30 | 31 | it('should handle movies array with a single movie object', () => { 32 | const consoleSpy = jest.spyOn(console, 'log'); 33 | 34 | titlesAndDirectors(list3); 35 | 36 | expect(consoleSpy).toHaveBeenCalledWith('Título: Pantera Negra - Diretor: Ryan Coogler'); 37 | expect(consoleSpy).toHaveBeenCalledWith('Título: Vingadores: Ultimato - Diretor: Anthony Russo, Joe Russo'); 38 | 39 | consoleSpy.mockRestore(); 40 | }); 41 | 42 | it('should handle a null movies parameter', () => { 43 | const movies = null; 44 | 45 | expect(() => { 46 | titlesAndDirectors(movies); 47 | }).toThrow(TypeError); 48 | }); 49 | 50 | it('should handle a non-array movies parameter', () => { 51 | const movies = 'not an array'; 52 | 53 | expect(() => { 54 | titlesAndDirectors(movies); 55 | }).toThrow(TypeError); 56 | }); 57 | }); 58 | -------------------------------------------------------------------------------- /tests/06-filmSorted.test.js: -------------------------------------------------------------------------------- 1 | const { filmSorted } = require("../src/filmSorted"); 2 | const { moviesList2Mock, expectedList2Mock, expectedList1Mock, moviesList1Mock } = require("./mocks/mock"); 3 | 4 | describe('filmSorted', () => { 5 | 6 | it('should return a sorted list of movies based on their release year', () => { 7 | 8 | const result = filmSorted(moviesList1Mock); 9 | expect(result).toEqual(expectedList1Mock); 10 | }); 11 | 12 | it('should return an empty list if the input list is empty', () => { 13 | const movies = []; 14 | const expected = []; 15 | const result = filmSorted(movies); 16 | expect(result).toEqual(expected); 17 | }); 18 | 19 | it('should return a new sorted list and does not modify the original list', () => { 20 | const result = filmSorted(moviesList2Mock); 21 | expect(result).toEqual(expectedList2Mock); 22 | expect(result).not.toBe(moviesList2Mock); 23 | }); 24 | 25 | }); 26 | -------------------------------------------------------------------------------- /tests/07-filmsAvailable.test.js: -------------------------------------------------------------------------------- 1 | const { list2 } = require("../data/list2"); 2 | const { list3 } = require("../data/list3"); 3 | const { filmsAvailable } = require("../src/filmsAvailable"); 4 | 5 | describe('filmsAvailable', () => { 6 | 7 | it("should return an array of available movie titles when given an array of movie objects with 'disponivel' property set to true", () => { 8 | const result = filmsAvailable(list2); 9 | expect(result).toEqual([ 10 | "Clube da Luta", 11 | "Gladiador", 12 | "A Chegada", 13 | "Amor Além da Vida", 14 | "Interestelar", 15 | ]); 16 | }); 17 | 18 | it('should return an empty array when given an empty array of movie objects', () => { 19 | const movies = []; 20 | const result = filmsAvailable(movies); 21 | expect(result).toEqual([]); 22 | }); 23 | 24 | it("should return an empty array when given an array of movie objects with all 'disponivel' properties set to false", () => { 25 | const movies = [ 26 | { titulo: 'Movie 1', disponivel: false }, 27 | { titulo: 'Movie 2', disponivel: false }, 28 | { titulo: 'Movie 3', disponivel: false } 29 | ]; 30 | const result = filmsAvailable(movies); 31 | expect(result).toEqual([]); 32 | }); 33 | 34 | it("should return an array of available movie titles when given an array of movie objects with only one movie object and 'disponivel' property set to true", () => { 35 | const movies = [ 36 | { titulo: 'Movie 1', disponivel: true } 37 | ]; 38 | const result = filmsAvailable(movies); 39 | expect(result).toEqual(['Movie 1']); 40 | }); 41 | 42 | it("should return an empty array when given an array of movie objects with only one movie object and 'disponivel' property set to false", () => { 43 | const movies = [ 44 | { titulo: 'Movie 1', disponivel: false } 45 | ]; 46 | const result = filmsAvailable(movies); 47 | expect(result).toEqual([]); 48 | }); 49 | 50 | it("should return an array of available movie titles when given an array of movie objects with multiple movie objects and some 'disponivel' properties set to true and some set to false", () => { 51 | const result = filmsAvailable(list3); 52 | expect(result).toEqual([ 53 | "Pantera Negra", 54 | "Vingadores: Ultimato", 55 | "Mad Max: Estrada da Fúria", 56 | "Um Lugar Silencioso", 57 | "Se Beber, Não Case", 58 | "Star Wars: Episódio IV - Uma Nova Esperança", 59 | ]); 60 | }); 61 | }); 62 | -------------------------------------------------------------------------------- /tests/08-nolanFilms.test.js: -------------------------------------------------------------------------------- 1 | const { list1 } = require("../data/list1"); 2 | const { list2 } = require("../data/list2"); 3 | const { list3 } = require("../data/list3"); 4 | const { nolanFilms } = require("../src/nolanFilms"); 5 | 6 | describe('nolanFilms', () => { 7 | 8 | it('should return a list of movies directed by Christopher Nolan, sorted by rating in descending order', () => { 9 | const movies = [ 10 | { title: 'Inception', diretor: 'Christopher Nolan', avaliacao: 9.2 }, 11 | { title: 'The Dark Knight', diretor: 'Christopher Nolan', avaliacao: 9.0 }, 12 | { title: 'Interstellar', diretor: 'Christopher Nolan', avaliacao: 8.6 }, 13 | { title: 'Dunkirk', diretor: 'Christopher Nolan', avaliacao: 8.0 }, 14 | ]; 15 | 16 | const expected = [ 17 | { title: 'Inception', diretor: 'Christopher Nolan', avaliacao: 9.2 }, 18 | { title: 'The Dark Knight', diretor: 'Christopher Nolan', avaliacao: 9.0 }, 19 | { title: 'Interstellar', diretor: 'Christopher Nolan', avaliacao: 8.6 }, 20 | { title: 'Dunkirk', diretor: 'Christopher Nolan', avaliacao: 8.0 }, 21 | ]; 22 | 23 | const result = nolanFilms(movies); 24 | 25 | expect(result).toEqual(expected); 26 | }); 27 | 28 | it('should return an empty list when no movies are directed by Christopher Nolan', () => { 29 | 30 | const expected = []; 31 | 32 | const result = nolanFilms(list3); 33 | 34 | expect(result).toEqual(expected); 35 | }); 36 | 37 | it('should return an empty list when input is an empty list', () => { 38 | const movies = []; 39 | 40 | const expected = []; 41 | 42 | const result = nolanFilms(movies); 43 | 44 | expect(result).toEqual(expected); 45 | }); 46 | 47 | it('should return a list of movies directed by Christopher Nolan, sorted by rating in descending order, when all movies are directed by Christopher Nolan', () => { 48 | const [,,,,,expected] = list2 49 | 50 | const result = nolanFilms(list2); 51 | 52 | expect(result).toEqual([expected]); 53 | }); 54 | 55 | it('should return a list of movies directed by Christopher Nolan, sorted by rating in descending order, when some movies are directed by Christopher Nolan and some are not', () => { 56 | const movies = [ 57 | { title: 'Inception', diretor: 'Christopher Nolan', avaliacao: 9.2 }, 58 | { title: 'The Dark Knight', diretor: 'Christopher Nolan', avaliacao: 9.0 }, 59 | { title: 'Interstellar', diretor: 'Steven Spielberg', avaliacao: 8.6 }, 60 | { title: 'Dunkirk', diretor: 'Quentin Tarantino', avaliacao: 8.0 }, 61 | ]; 62 | 63 | const expected = [ 64 | { title: 'Inception', diretor: 'Christopher Nolan', avaliacao: 9.2 }, 65 | { title: 'The Dark Knight', diretor: 'Christopher Nolan', avaliacao: 9.0 }, 66 | ]; 67 | 68 | const result = nolanFilms(movies); 69 | 70 | expect(result).toEqual(expected); 71 | }); 72 | 73 | it('should return a list that contains only movies directed by Christopher Nolan', () => { 74 | const movies = [ 75 | { title: 'Inception', diretor: 'Christopher Nolan', avaliacao: 9.2 }, 76 | { title: 'The Dark Knight', diretor: 'Christopher Nolan', avaliacao: 9.0 }, 77 | { title: 'Interstellar', diretor: 'Steven Spielberg', avaliacao: 8.6 }, 78 | { title: 'Dunkirk', diretor: 'Quentin Tarantino', avaliacao: 8.0 }, 79 | ]; 80 | 81 | const result = nolanFilms(movies); 82 | 83 | result.forEach(movie => { 84 | expect(movie.diretor).toBe('Christopher Nolan'); 85 | }); 86 | }); 87 | }); 88 | -------------------------------------------------------------------------------- /tests/09-findActorForTheMovie.test.js: -------------------------------------------------------------------------------- 1 | const { findActorForTheMovie } = require("../src/findActorForTheMovie"); 2 | 3 | describe('findActorForTheMovie', () => { 4 | 5 | it('should return the first two actors of a movie\'s cast when given a valid movie title', () => { 6 | const result = findActorForTheMovie("Matrix"); 7 | expect(result).toEqual(["Keanu Reeves", "Laurence Fishburne"]); 8 | }); 9 | 10 | it('should return the first two actors of a movie\'s cast when given a valid movie title', () => { 11 | const result = findActorForTheMovie("Homem de Ferro"); 12 | expect(result).toEqual(["Robert Downey Jr.", "Gwyneth Paltrow"]); 13 | }); 14 | 15 | it('should return an error message when given an invalid movie title', () => { 16 | const result = findActorForTheMovie("Invalid Movie"); 17 | expect(result).toEqual("Filme não encontrado."); 18 | }); 19 | 20 | it('should return an error message when the movie\'s cast is undefined', () => { 21 | const result = findActorForTheMovie("Undefined Cast Movie"); 22 | expect(result).toEqual("Filme não encontrado."); 23 | }); 24 | 25 | it('should return an error message when the movie title is null', () => { 26 | const result = findActorForTheMovie(null); 27 | expect(result).toEqual("Filme não encontrado."); 28 | }); 29 | 30 | it('should return an error message when the movie title is an empty string', () => { 31 | const result = findActorForTheMovie(""); 32 | expect(result).toEqual("Filme não encontrado."); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /tests/10-countGenres.test.js: -------------------------------------------------------------------------------- 1 | const { list2 } = require("../data/list2"); 2 | const movies = require("../data/movies"); 3 | const { countGenres } = require("../src/countGenres"); 4 | 5 | describe('countGenres', () => { 6 | 7 | it('should return an empty object when the input array is empty', () => { 8 | const movies = []; 9 | const result = countGenres(movies); 10 | expect(result).toEqual({}); 11 | }); 12 | 13 | it('should return an object with the count of genres when the input array has one or more movies with one or more genres', () => { 14 | const result = countGenres(movies); 15 | expect(result).toEqual({ 16 | "Aventura": 9, 17 | "Ação": 10, 18 | "Biografia": 1, 19 | "Comédia": 3, 20 | "Crime": 1, 21 | "Drama": 12, 22 | "Família": 1, 23 | "Fantasia": 4, 24 | "Ficção Científica": 7, 25 | "Romance": 3, 26 | "Suspense": 3, 27 | "Terror": 3, 28 | }); 29 | }); 30 | 31 | it('should return an object with the count of genres when the input array has one or more movies with one or more genres', () => { 32 | const result = countGenres(list2); 33 | expect(result).toEqual({ 34 | "Aventura": 1, 35 | "Ação": 1, 36 | "Comédia": 1, 37 | "Drama": 4, 38 | "Família": 1, 39 | "Fantasia": 1, 40 | "Ficção Científica": 2, 41 | "Romance": 1, 42 | }); 43 | }); 44 | 45 | it('should return an object with the count of genres when the input array has one or more movies with one or more genres, even if some genres are repeated', () => { 46 | const movies = [ 47 | { genero: ['Action', 'Adventure'] }, 48 | { genero: ['Comedy', 'Action'] }, 49 | { genero: ['Drama', 'Romance'] } 50 | ]; 51 | const result = countGenres(movies); 52 | expect(result).toEqual({ Action: 2, Adventure: 1, Comedy: 1, Drama: 1, Romance: 1 }); 53 | }); 54 | 55 | it('should return an empty object when the input array has one or more movies with no genres', () => { 56 | const movies = [ 57 | { genero: [] }, 58 | { genero: ['Drama'] }, 59 | { genero: [] } 60 | ]; 61 | const result = countGenres(movies); 62 | expect(result).toEqual({ Drama: 1}); 63 | }); 64 | 65 | }); 66 | -------------------------------------------------------------------------------- /tests/11-averageRatingByGenre.test.js: -------------------------------------------------------------------------------- 1 | const { averageRatingByGenre } = require("../src/averageRatingByGenre"); 2 | 3 | describe('averageRatingByGenre', () => { 4 | 5 | it('should return the average rating of movies for a given genre', () => { 6 | const genre = 'Ação'; 7 | const expected = 'A média de avaliação dos filmes do gênero Ação é 7.72.'; 8 | const result = averageRatingByGenre(genre); 9 | expect(result).toEqual(expected); 10 | }); 11 | 12 | it('should return a message if there are no movies for a given genre', () => { 13 | const genre = 'Filme Clássico'; 14 | const expected = 'Não há filmes do gênero Filme Clássico.'; 15 | const result = averageRatingByGenre(genre); 16 | expect(result).toEqual(expected); 17 | }); 18 | 19 | it('should return the average rating with two decimal places', () => { 20 | const genre = 'Comédia'; 21 | const expected = 'A média de avaliação dos filmes do gênero Comédia é 7.97.'; 22 | const result = averageRatingByGenre(genre); 23 | expect(result).toEqual(expected); 24 | }); 25 | 26 | it('should return an error if the genre parameter is not provided', () => { 27 | const expected = 'O parâmetro é obrigatório.'; 28 | const result = averageRatingByGenre(); 29 | expect(result).toEqual(expected); 30 | }); 31 | 32 | it('should return an error if the genre parameter is not a string', () => { 33 | const genre = 123; 34 | const expected = 'O parâmetro tem que ser uma string.'; 35 | const result = averageRatingByGenre(genre); 36 | expect(result).toEqual(expected); 37 | }); 38 | 39 | it('should return an error if the genre parameter is an empty string', () => { 40 | const genre = ''; 41 | const expected = 'O parâmetro é obrigatório.'; 42 | const result = averageRatingByGenre(genre); 43 | expect(result).toEqual(expected); 44 | }); 45 | }); 46 | -------------------------------------------------------------------------------- /tests/12-filmSeparation.test.js: -------------------------------------------------------------------------------- 1 | const { list1 } = require("../data/list1"); 2 | const { list2 } = require("../data/list2"); 3 | const { list3 } = require("../data/list3"); 4 | const { filmSeparation } = require("../src/filmSeparation"); 5 | const { detailsMocklist2, detailsMocklist3, noDetailsMockList1, noDetailsMockList2 } = require("./mocks/separateMock"); 6 | 7 | describe('filmSeparation', () => { 8 | 9 | it('should correctly separate movies by genre when there are multiple genres for each movie', () => { 10 | const result = filmSeparation(list2) 11 | 12 | expect(result).toEqual(detailsMocklist2); 13 | }); 14 | 15 | it('should correctly sort movies alphabetically by title when there are multiple movies', () => { 16 | const result = filmSeparation(list3) 17 | 18 | expect(result).toEqual(detailsMocklist3); 19 | }); 20 | 21 | it('should correctly include movie details when \'details\' parameter is false', () => { 22 | const result = filmSeparation(list1, false) 23 | 24 | expect(result).toEqual(noDetailsMockList1); 25 | }); 26 | 27 | it('should correctly include movie details when \'details\' parameter is false', () => { 28 | const result = filmSeparation(list2, false) 29 | 30 | expect(result).toEqual(noDetailsMockList2); 31 | }); 32 | 33 | it('should correctly handle empty input', () => { 34 | const movies = []; 35 | 36 | const expectedOutput = {}; 37 | 38 | expect(filmSeparation(movies)).toEqual(expectedOutput); 39 | }); 40 | 41 | it('should correctly handle input with no genres', () => { 42 | const movies = [ 43 | { id: 1, titulo: 'Movie 1', genero: [] }, 44 | { id: 2, titulo: 'Movie 2', genero: [] }, 45 | ]; 46 | 47 | const expectedOutput = {}; 48 | 49 | expect(filmSeparation(movies)).toEqual(expectedOutput); 50 | }); 51 | 52 | it('should correctly handle input with no movies', () => { 53 | const movies = []; 54 | 55 | const expectedOutput = {}; 56 | 57 | expect(filmSeparation(movies)).toEqual(expectedOutput); 58 | }); 59 | }); 60 | -------------------------------------------------------------------------------- /tests/13-listOverdueLoans.test.js: -------------------------------------------------------------------------------- 1 | const { list2 } = require("../data/list2"); 2 | const { list3 } = require("../data/list3"); 3 | const { listOverdueLoans } = require("../src/listOverdueLoans"); 4 | const { list2OverdueLoansMock, list3OverdueLoansMock } = require("./mocks/listMock"); 5 | 6 | describe('listOverdueLoans', () => { 7 | 8 | it('should return an empty array when passed an empty array of movies', () => { 9 | const movies = []; 10 | const result = listOverdueLoans(movies); 11 | expect(result).toEqual([]); 12 | }); 13 | 14 | it('should return an array of overdue loans when passed an array of movies with overdue loans', () => { 15 | 16 | const result = listOverdueLoans(list2); 17 | 18 | expect(result).toEqual(list2OverdueLoansMock); 19 | }); 20 | 21 | it('should return an empty array when passed an array of movies with no overdue loans', () => { 22 | const result = listOverdueLoans(list3); 23 | expect(result).toEqual(list3OverdueLoansMock); 24 | }); 25 | 26 | it('should return an empty array when passed an array of movies with no loans', () => { 27 | const movies = [ 28 | { 29 | id: 1, 30 | titulo: 'Movie 1', 31 | emprestimos: [] 32 | }, 33 | { 34 | id: 2, 35 | titulo: 'Movie 2', 36 | emprestimos: [] 37 | } 38 | ]; 39 | const result = listOverdueLoans(movies); 40 | expect(result).toEqual([]); 41 | }); 42 | 43 | it('should return an empty array when passed an array of movies with loans that are not yet due', () => { 44 | const [,,,,,movie] = list3 45 | 46 | const result = listOverdueLoans([movie]); 47 | expect(result).toEqual([]); 48 | }); 49 | 50 | }); 51 | -------------------------------------------------------------------------------- /tests/14-classifyMovies.test.js: -------------------------------------------------------------------------------- 1 | const { list2 } = require("../data/list2"); 2 | const { list3 } = require("../data/list3"); 3 | const movies = require("../data/movies"); 4 | const { classifyMovies } = require("../src/classifyMovies"); 5 | const { classifyMoviesList2Mock, filmeExtraMock, classifyMoviesList3Mock } = require("./mocks/listMock"); 6 | 7 | describe('classifyMovies', () => { 8 | 9 | it('should return an object with keys', () => { 10 | const movies = []; 11 | const result = classifyMovies(movies); 12 | expect(result).toHaveProperty('avaliacao'); 13 | expect(result).toHaveProperty('disponibilidade'); 14 | expect(result.disponibilidade).toHaveProperty('disponiveis'); 15 | expect(result.disponibilidade).toHaveProperty('naoDisponiveis'); 16 | 17 | }); 18 | 19 | it('should contain an object with three keys in the \'avaliacao\' key', () => { 20 | const moviesList = [...movies, filmeExtraMock ] 21 | 22 | const result = classifyMovies(moviesList); 23 | 24 | expect('0-4.9' in result.avaliacao).toBe(true); 25 | expect('5.0-7.9' in result.avaliacao).toBe(true); 26 | expect('8.0-10.0' in result.avaliacao).toBe(true); 27 | }); 28 | 29 | it('should sort movies within each rating interval by title', () => { 30 | 31 | const result = classifyMovies(list2); 32 | 33 | expect(result).toEqual(classifyMoviesList2Mock); 34 | }); 35 | 36 | it('should contain an array of movies sorted by title in each key of the \'avaliacao\' object', () => { 37 | const result = classifyMovies(list3); 38 | expect(result.avaliacao['0-4.9']).toEqual([]); 39 | expect(result.avaliacao['5.0-7.9']).toEqual(classifyMoviesList3Mock.avaliacao['5.0-7.9']); 40 | expect(result.avaliacao['8.0-10.0']).toEqual(classifyMoviesList3Mock.avaliacao['8.0-10.0']); 41 | }); 42 | 43 | it('should return an object with empty arrays for both \'disponiveis\' and \'naoDisponiveis\' keys when no movies are passed', () => { 44 | const movies = []; 45 | const result = classifyMovies(movies); 46 | expect(result.disponibilidade.disponiveis).toEqual([]); 47 | expect(result.disponibilidade.naoDisponiveis).toEqual([]); 48 | }); 49 | 50 | it('should return an object with empty arrays for all keys in the \'avaliacao\' object when no movies are passed', () => { 51 | const movies = []; 52 | const result = classifyMovies(movies); 53 | expect(result.avaliacao['0-4.9']).toEqual([]); 54 | expect(result.avaliacao['5.0-7.9']).toEqual([]); 55 | expect(result.avaliacao['8.0-10.0']).toEqual([]); 56 | }); 57 | 58 | it('should return an object with empty array for the \'naoDisponiveis\' key when all movies have \'disponivel\' set to true', () => { 59 | const result = classifyMovies(list3); 60 | expect(result.disponibilidade.naoDisponiveis).toEqual([]); 61 | }); 62 | }); 63 | -------------------------------------------------------------------------------- /tests/mocks/listMock.js: -------------------------------------------------------------------------------- 1 | const list2OverdueLoansMock = [ 2 | { 3 | "dataDevolucao": "2023-10-18", 4 | "dataEmprestimo": "2023-09-18", 5 | "id": 15, 6 | "nomePessoa": "Ricardo", 7 | "titulo": "Esqueceram de Mim", 8 | }, 9 | { 10 | "dataDevolucao": "2023-08-15", 11 | "dataEmprestimo": "2023-05-15", 12 | "id": 16, 13 | "nomePessoa": "Fernanda", 14 | "titulo": "Clube da Luta", 15 | }, 16 | { 17 | "dataDevolucao": "2023-11-15", 18 | "dataEmprestimo": "2023-10-15", 19 | "id": 18, 20 | "nomePessoa": "Carlos", 21 | "titulo": "A Chegada", 22 | }, 23 | { 24 | "dataDevolucao": "2023-08-05", 25 | "dataEmprestimo": "2023-07-05", 26 | "id": 20, 27 | "nomePessoa": "Sophie", 28 | "titulo": "Interestelar", 29 | }, 30 | ] 31 | 32 | const list3OverdueLoansMock = [ 33 | { 34 | "dataDevolucao": "2024-01-15", 35 | "dataEmprestimo": "2023-12-15", 36 | "id": 25, 37 | "nomePessoa": "Fernanda", 38 | "titulo": "Se Beber, Não Case", 39 | }, 40 | ] 41 | 42 | const classifyMoviesList2Mock = { 43 | avaliacao: { 44 | '0-4.9': [], 45 | '5.0-7.9': [ 46 | { 47 | titulo: "A Chegada", 48 | diretor: "Denis Villeneuve", 49 | genero: ["Ficção Científica", "Drama"], 50 | anoLancamento: 2016, 51 | avaliacao: 7.9, 52 | }, 53 | { 54 | titulo: "Amor Além da Vida", 55 | diretor: "Vincent Ward", 56 | genero: ["Romance", "Fantasia"], 57 | anoLancamento: 1998, 58 | avaliacao: 7.1, 59 | }, 60 | { 61 | titulo: "Esqueceram de Mim", 62 | diretor: "Chris Columbus", 63 | genero: ["Comédia", "Família"], 64 | anoLancamento: 1990, 65 | avaliacao: 7.6, 66 | } 67 | ], 68 | '8.0-10.0': [ 69 | { 70 | titulo: "Clube da Luta", 71 | diretor: "David Fincher", 72 | genero: ["Drama"], 73 | anoLancamento: 1999, 74 | avaliacao: 8.8, 75 | }, 76 | { 77 | titulo: "Gladiador", 78 | diretor: "Ridley Scott", 79 | genero: ["Ação", "Drama", "Aventura"], 80 | anoLancamento: 2000, 81 | avaliacao: 8.5, 82 | }, 83 | { 84 | titulo: "Interestelar", 85 | diretor: "Christopher Nolan", 86 | genero: ["Ficção Científica", "Drama"], 87 | anoLancamento: 2014, 88 | avaliacao: 8.6, 89 | } 90 | ] 91 | }, 92 | disponibilidade: { 93 | disponiveis: [ 94 | { titulo: 'Clube da Luta' }, 95 | { titulo: 'Gladiador' }, 96 | { titulo: 'A Chegada' }, 97 | { titulo: 'Amor Além da Vida' }, 98 | { titulo: 'Interestelar' }, 99 | ], 100 | naoDisponiveis: [ 101 | { titulo: 'Esqueceram de Mim' } 102 | ], 103 | }, 104 | }; 105 | 106 | const classifyMoviesList3Mock = { 107 | avaliacao: { 108 | '0-4.9': [], 109 | '5.0-7.9': [ 110 | { 111 | titulo: "Pantera Negra", 112 | diretor: "Ryan Coogler", 113 | genero: ["Ação", "Aventura", "Fantasia"], 114 | anoLancamento: 2018, 115 | avaliacao: 7.3, 116 | }, 117 | { 118 | titulo: "Se Beber, Não Case", 119 | diretor: "Todd Phillips", 120 | genero: ["Comédia"], 121 | anoLancamento: 2009, 122 | avaliacao: 7.7, 123 | }, 124 | { 125 | titulo: "Um Lugar Silencioso", 126 | diretor: "John Krasinski", 127 | genero: ["Suspense", "Drama", "Terror"], 128 | anoLancamento: 2018, 129 | avaliacao: 7.5, 130 | } 131 | ], 132 | '8.0-10.0': [ 133 | { 134 | titulo: "Mad Max: Estrada da Fúria", 135 | diretor: "George Miller", 136 | genero: ["Ação", "Aventura", "Ficção Científica"], 137 | anoLancamento: 2015, 138 | avaliacao: 8.1, 139 | }, 140 | { 141 | titulo: "Star Wars: Episódio IV - Uma Nova Esperança", 142 | diretor: "George Lucas", 143 | genero: ["Ficção Científica", "Aventura", "Fantasia"], 144 | anoLancamento: 1977, 145 | avaliacao: 8.6, 146 | }, 147 | { 148 | titulo: "Vingadores: Ultimato", 149 | diretor: "Anthony Russo, Joe Russo", 150 | genero: ["Ação", "Aventura", "Ficção Científica"], 151 | anoLancamento: 2019, 152 | avaliacao: 8.4, 153 | }, 154 | ] 155 | }, 156 | disponibilidade: { 157 | disponiveis: [ 158 | { titulo: 'Pantera Negra' }, 159 | { titulo: 'Um Lugar Silencioso' }, 160 | { titulo: 'Se Beber, Não Case' }, 161 | { titulo: 'Vingadores: Ultimato' }, 162 | { titulo: 'Mad Max: Estrada da Fúria' }, 163 | { titulo: 'Star Wars: Episódio IV - Uma Nova Esperança' }, 164 | ], 165 | naoDisponiveis: [], 166 | }, 167 | }; 168 | 169 | const filmeExtraMock = { 170 | id: 35, 171 | titulo: "A volta dos que não foram 2: O retorno", 172 | diretor: "JavaScript", 173 | genero: ["Comédia", "Família"], 174 | anoLancamento: 1990, 175 | paisOrigem: "Por que 'tudo junto' se escreve separado e 'separado' se escreve tudo junto?", 176 | idiomaOriginal: "Inglês", 177 | estudio: { 178 | nome: "20th Century Fox", 179 | localizacao: "Los Angeles, EUA" 180 | }, 181 | duracao: 103, 182 | elenco: ["Joe Pesci", "Daniel Stern"], 183 | avaliacao: 3.5, 184 | disponivel: false, 185 | emprestimos: [ 186 | { 187 | nomePessoa: "Ricardo", 188 | dataEmprestimo: "2023-09-18", 189 | dataDevolucao: "2023-10-18" 190 | } 191 | ] 192 | } 193 | 194 | 195 | 196 | module.exports = { 197 | list2OverdueLoansMock, 198 | list3OverdueLoansMock, 199 | classifyMoviesList2Mock, 200 | filmeExtraMock, 201 | classifyMoviesList3Mock 202 | } -------------------------------------------------------------------------------- /tests/mocks/mock.js: -------------------------------------------------------------------------------- 1 | const mockTitles1 = [ 2 | 'Cidade de Deus', 3 | 'Jogos Mortais', 4 | 'Matrix', 5 | 'Senhor dos Anéis: A Sociedade do Anel', 6 | 'Tropa de Elite', 7 | 'O Grito', 8 | 'Pearl Harbor', 9 | 'Homem de Ferro', 10 | 'Diário de uma Paixão', 11 | 'O Alto da Compadecida', 12 | '300', 13 | 'Rei Arthur', 14 | 'O Jogo da Imitação', 15 | 'A Lagoa Azul' 16 | ] 17 | 18 | const mockTitles2 = [ 19 | 'Esqueceram de Mim', 20 | 'Clube da Luta', 21 | 'Gladiador', 22 | 'A Chegada', 23 | 'Amor Além da Vida', 24 | 'Interestelar' 25 | ] 26 | 27 | const mockTitles3 = [ 28 | 'Pantera Negra', 29 | 'Vingadores: Ultimato', 30 | 'Mad Max: Estrada da Fúria', 31 | 'Um Lugar Silencioso', 32 | 'Se Beber, Não Case', 33 | 'Star Wars: Episódio IV - Uma Nova Esperança' 34 | ] 35 | 36 | const moviesList2Mock = [ 37 | { id: 23, 38 | titulo: "Mad Max: Estrada da Fúria", 39 | diretor: "George Miller", 40 | genero: ["Ação", "Aventura", "Ficção Científica"], 41 | anoLancamento: 2015, }, 42 | { id: 24, 43 | titulo: "Um Lugar Silencioso", 44 | diretor: "John Krasinski", 45 | genero: ["Suspense", "Drama", "Terror"], 46 | anoLancamento: 2018, }, 47 | { id: 25, 48 | titulo: "Se Beber, Não Case", 49 | diretor: "Todd Phillips", 50 | genero: ["Comédia"], 51 | anoLancamento: 2009, } 52 | ]; 53 | const expectedList2Mock = [ 54 | { id: 25, 55 | titulo: "Se Beber, Não Case", 56 | diretor: "Todd Phillips", 57 | genero: ["Comédia"], 58 | anoLancamento: 2009, 59 | }, 60 | { id: 23, 61 | titulo: "Mad Max: Estrada da Fúria", 62 | diretor: "George Miller", 63 | genero: ["Ação", "Aventura", "Ficção Científica"], 64 | anoLancamento: 2015, 65 | }, 66 | { id: 24, 67 | titulo: "Um Lugar Silencioso", 68 | diretor: "John Krasinski", 69 | genero: ["Suspense", "Drama", "Terror"], 70 | anoLancamento: 2018, 71 | } 72 | ]; 73 | 74 | const moviesList1Mock = [ 75 | { id: 12, 76 | titulo: "Rei Arthur", 77 | diretor: "Antoine Fuqua", 78 | genero: ["Ação", "Aventura"], 79 | anoLancamento: 2004, 80 | }, 81 | { id: 7, 82 | titulo: "Pearl Harbor", 83 | diretor: "Michael Bay", 84 | genero: ["Ação", "Drama", "Romance"], 85 | anoLancamento: 2001, 86 | }, 87 | { id: 11, 88 | titulo: "300", 89 | diretor: "Zack Snyder", 90 | genero: ["Ação", "Drama"], 91 | anoLancamento: 2006, 92 | }, 93 | ]; 94 | const expectedList1Mock = [ 95 | { id: 7, 96 | titulo: "Pearl Harbor", 97 | diretor: "Michael Bay", 98 | genero: ["Ação", "Drama", "Romance"], 99 | anoLancamento: 2001, 100 | }, 101 | { id: 12, 102 | titulo: "Rei Arthur", 103 | diretor: "Antoine Fuqua", 104 | genero: ["Ação", "Aventura"], 105 | anoLancamento: 2004, 106 | }, 107 | { id: 11, 108 | titulo: "300", 109 | diretor: "Zack Snyder", 110 | genero: ["Ação", "Drama"], 111 | anoLancamento: 2006, 112 | }, 113 | ]; 114 | 115 | module.exports = { 116 | mockTitles1, 117 | mockTitles2, 118 | mockTitles3, 119 | moviesList2Mock, 120 | expectedList2Mock, 121 | expectedList1Mock, 122 | moviesList1Mock 123 | } -------------------------------------------------------------------------------- /tests/mocks/separateMock.js: -------------------------------------------------------------------------------- 1 | const detailsMocklist2 = 2 | { 3 | "Aventura": [{"anoLancamento": 2000, "avaliacao": 8.5, "diretor": "Ridley Scott", "id": 17, "titulo": "Gladiador"}], 4 | "Ação": [{"anoLancamento": 2000, "avaliacao": 8.5, "diretor": "Ridley Scott", "id": 17, "titulo": "Gladiador"}], 5 | "Comédia": [{"anoLancamento": 1990, "avaliacao": 7.6, "diretor": "Chris Columbus", "id": 15, "titulo": "Esqueceram de Mim"}], 6 | "Drama": [{"anoLancamento": 2016, "avaliacao": 7.9, "diretor": "Denis Villeneuve", "id": 18, "titulo": "A Chegada"}, {"anoLancamento": 1999, "avaliacao": 8.8, "diretor": "David Fincher", "id": 16, "titulo": "Clube da Luta"}, {"anoLancamento": 2000, "avaliacao": 8.5, "diretor": "Ridley Scott", "id": 17, "titulo": "Gladiador"}, {"anoLancamento": 2014, "avaliacao": 8.6, "diretor": "Christopher Nolan", "id": 20, "titulo": "Interestelar"}], 7 | "Família": [{"anoLancamento": 1990, "avaliacao": 7.6, "diretor": "Chris Columbus", "id": 15, "titulo": "Esqueceram de Mim"}], 8 | "Fantasia": [{"anoLancamento": 1998, "avaliacao": 7.1, "diretor": "Vincent Ward", "id": 19, "titulo": "Amor Além da Vida"}], 9 | "Ficção Científica": [{"anoLancamento": 2016, "avaliacao": 7.9, "diretor": "Denis Villeneuve", "id": 18, "titulo": "A Chegada"}, {"anoLancamento": 2014, "avaliacao": 8.6, "diretor": "Christopher Nolan", "id": 20, "titulo": "Interestelar"}], 10 | "Romance": [{"anoLancamento": 1998, "avaliacao": 7.1, "diretor": "Vincent Ward", "id": 19, "titulo": "Amor Além da Vida"}] 11 | } 12 | 13 | const detailsMocklist3 = { 14 | "Aventura": [{"anoLancamento": 2015, "avaliacao": 8.1, "diretor": "George Miller", "id": 23, "titulo": "Mad Max: Estrada da Fúria"}, {"anoLancamento": 2018, "avaliacao": 7.3, "diretor": "Ryan Coogler", "id": 21, "titulo": "Pantera Negra"}, {"anoLancamento": 1977, "avaliacao": 8.6, "diretor": "George Lucas", "id": 26, "titulo": "Star Wars: Episódio IV - Uma Nova Esperança"}, {"anoLancamento": 2019, "avaliacao": 8.4, "diretor": "Anthony Russo, Joe Russo", "id": 22, "titulo": "Vingadores: Ultimato"}], 15 | "Ação": [{"anoLancamento": 2015, "avaliacao": 8.1, "diretor": "George Miller", "id": 23, "titulo": "Mad Max: Estrada da Fúria"}, {"anoLancamento": 2018, "avaliacao": 7.3, "diretor": "Ryan Coogler", "id": 21, "titulo": "Pantera Negra"}, {"anoLancamento": 2019, "avaliacao": 8.4, "diretor": "Anthony Russo, Joe Russo", "id": 22, "titulo": "Vingadores: Ultimato"}], 16 | "Comédia": [{"anoLancamento": 2009, "avaliacao": 7.7, "diretor": "Todd Phillips", "id": 25, "titulo": "Se Beber, Não Case"}], 17 | "Drama": [{"anoLancamento": 2018, "avaliacao": 7.5, "diretor": "John Krasinski", "id": 24, "titulo": "Um Lugar Silencioso"}], 18 | "Fantasia": [{"anoLancamento": 2018, "avaliacao": 7.3, "diretor": "Ryan Coogler", "id": 21, "titulo": "Pantera Negra"}, {"anoLancamento": 1977, "avaliacao": 8.6, "diretor": "George Lucas", "id": 26, "titulo": "Star Wars: Episódio IV - Uma Nova Esperança"}], 19 | "Ficção Científica": [{"anoLancamento": 2015, "avaliacao": 8.1, "diretor": "George Miller", "id": 23, "titulo": "Mad Max: Estrada da Fúria"}, {"anoLancamento": 1977, "avaliacao": 8.6, "diretor": "George Lucas", "id": 26, "titulo": "Star Wars: Episódio IV - Uma Nova Esperança"}, {"anoLancamento": 2019, "avaliacao": 8.4, "diretor": "Anthony Russo, Joe Russo", "id": 22, "titulo": "Vingadores: Ultimato"}], 20 | "Suspense": [{"anoLancamento": 2018, "avaliacao": 7.5, "diretor": "John Krasinski", "id": 24, "titulo": "Um Lugar Silencioso"}], 21 | "Terror": [{"anoLancamento": 2018, "avaliacao": 7.5, "diretor": "John Krasinski", "id": 24, "titulo": "Um Lugar Silencioso"}] 22 | } 23 | 24 | const noDetailsMockList1 = { 25 | "Aventura": ["A Lagoa Azul", "O Alto da Compadecida", "Rei Arthur", "Senhor dos Anéis: A Sociedade do Anel"], 26 | "Ação": ["300", "Homem de Ferro", "Matrix", "Pearl Harbor", "Rei Arthur", "Tropa de Elite"], 27 | "Biografia": ["O Jogo da Imitação"], 28 | "Comédia": ["O Alto da Compadecida"], 29 | "Crime": ["Cidade de Deus"], 30 | "Drama": ["300", "A Lagoa Azul", "Cidade de Deus", "Diário de uma Paixão", "O Jogo da Imitação", "Pearl Harbor", "Tropa de Elite"], 31 | "Fantasia": ["Senhor dos Anéis: A Sociedade do Anel"], 32 | "Ficção Científica": ["Homem de Ferro", "Matrix"], 33 | "Romance": ["Diário de uma Paixão", "Pearl Harbor"], 34 | "Suspense": ["Jogos Mortais", "O Grito"], 35 | "Terror": ["Jogos Mortais", "O Grito"] 36 | } 37 | 38 | const noDetailsMockList2 = { 39 | "Aventura": ["Gladiador"], "Ação": ["Gladiador"], 40 | "Comédia": ["Esqueceram de Mim"], 41 | "Drama": ["A Chegada", "Clube da Luta", "Gladiador", "Interestelar"], 42 | "Família": ["Esqueceram de Mim"], 43 | "Fantasia": ["Amor Além da Vida"], 44 | "Ficção Científica": ["A Chegada", "Interestelar"], 45 | "Romance": ["Amor Além da Vida"]} 46 | 47 | 48 | 49 | module.exports = { 50 | detailsMocklist2, 51 | detailsMocklist3, 52 | noDetailsMockList1, 53 | noDetailsMockList2 54 | } --------------------------------------------------------------------------------