Desafio Stone
Instalação
Instalar as dependências:
npm install
Rodar projeto
Método 1: Usando REPL
- Importe a função execute do arquivo src/interface.js;
- Passe a lista de compras e a lista de e-mails respectivamente.
Observe o exemplo abaixo.
franciele@franciele-Inspiron-5566:~/Projects/desafio-stone$ node
Welcome to Node.js v14.4.0.
Type ".help" for more information.
> const shoppingList = [
... {
... name: 'item 1',
... price: 25,
... amount: 2,
... },
... {
... name: 'item 2',
... price: 50,
... amount: 1,
... },
... ];
undefined
> const emailList = ['user1@gmail.com', 'user2@gmail.com', 'user3@gmail.com'];
undefined
> const { execute } = require('./src/interface');
undefined
> execute(shoppingList, emailList);
Map(3) {
'user1@gmail.com' => 34,
'user2@gmail.com' => 33,
'user3@gmail.com' => 33
}
>
Método 2: Inserindo os dados de entrada hardcoded
- Acesse src/main.js.
- Edite as listas shoppingList e emailList. Elas possuem um valor exemplo.
- Execute:
node src/main.js
Método 3: Inserindo os dados de entrada através de arquivos CSV
Na pasta data, existem dois arquivos csv com valores de exemplo.
- data/email_list.csv: Lista de e-mails.
- data/shopping_list.csv: Lista de compras. Cada linha possui o nome do item, preço e quantidade respectivamente.
Considerando as informações anteriores:
- Edite os arquivos email_list.csv e shopping_list.csv. Não é necessário inserir header.
- Execute:
node src/mainWithDataInputByCsvFile.js
Testes unitários
Cada arquivo de teste contém testes para uma função específica.
Rodar testes:
npm run test
Cobertura dos testes: 100%
npm run test-coverage
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
---|---|---|---|---|---|
All files | 100 | 100 | 100 | 100 | |
core.js | 100 | 100 | 100 | 100 | |
interface.js | 100 | 100 | 100 | 100 |
Documentação do código
Gerar documentação:
npm run jsdoc
Para acessar a documentação web, abra out/index.html.
Arquitetura
Arquitetura Clean, onde o projeto foi separado em duas camadas: "Core" e "Interface". A camada "Core" contém toda a lógica da aplicação e a camada "Interface" gerencia as formas de comunicação com a camada "Core".