├── LICENSE ├── README.md └── fields.json /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 GetNinjas 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Pré-requisitos 2 | 3 | #### O que é permitido: 4 | - ES6 5 | - Linters no geral tanto para JS como para CSS 6 | - Task runners/build tools como Webpack, Gulp, Grunt e afins. 7 | 8 | #### O que não é permitido: 9 | - Frameworks de JS no geral (React, Vue, Angular, Ember e afins) 10 | - Bibliotecas de utilidades (Underscore, Lodash e afins) 11 | - Frameworks/Bibliotecas CSS (Bootstrap, Foundation, Materializecss e afins) . Você pode utilizar qualquer metodologia de arquitetura de código. 12 | 13 | Se preferir, o uso de Sass/Scss é liberado, contanto que seu uso seja justificável. 14 | 15 | O uso de ferramentas de teste é liberado (jest, jasmine, mocha, chai, sinon, supertest). 16 | 17 | O objetivo desse teste é avaliar: 18 | - organização; 19 | - semântica; 20 | - funcionamento e usabilidade 21 | - uso e abuso das features das linguagens (HTML, CSS e JS); 22 | - uso de patterns; 23 | - performance do código; 24 | - testes de JavaScript. 25 | 26 | # Teste 27 | 28 | Você precisará criar um servidor, em Node.JS, pra servir o `fields.json`, que está na raiz do projeto, como uma API. 29 | Se preferir, o uso do Express é permitido. 30 | 31 | O formulário a ser renderizado é o de pedidos, da forma que é exibido [aqui](https://www.getninjas.com.br/moda-e-beleza/cabeleireiros). Através do `fields.json` você precisará montar os campos na view. 32 | 33 | # Informações adicionais 34 | 35 | - É necessário exibir a mensagem "este campo é requerido" para os marcados como `required: true`; 36 | - Campos do tipo `enumerable` são `select`; 37 | - O formulário não precisa fazer `POST`; 38 | - Temos uma cultura de testes unitários e de integração. Uma dessas formas, pelo menos, é essencial pra esse teste; 39 | - Se quiser, faça uma rota no Node.js pra exibir o formulário num HTML. 40 | -------------------------------------------------------------------------------- /fields.json: -------------------------------------------------------------------------------- 1 | { 2 | "_embedded": { 3 | "request_fields": [ 4 | { 5 | "name": "Qual será o serviço?", 6 | "label": "Qual será o serviço?", 7 | "placeholder": "Qual será o serviço?", 8 | "mask": "tipo de serviço", 9 | "type": "enumerable", 10 | "required": true, 11 | "values": { 12 | "Coloração": "Coloração", 13 | "Corte": "Corte", 14 | "Escova ": "Escova ", 15 | "Escova progressiva/definitiva": "Escova progressiva/definitiva", 16 | "Luzes": "Luzes", 17 | "Manicure": "Manicure", 18 | "Pedicure": "Pedicure", 19 | "Penteado": "Penteado" 20 | } 21 | }, 22 | { 23 | "name": "Para quem será o serviço?", 24 | "label": "Para quem será o serviço?", 25 | "placeholder": "Para quem será o serviço?", 26 | "mask": "indique para quem será o serviço", 27 | "type": "enumerable", 28 | "required": false, 29 | "values": { 30 | "Criança": "Criança", 31 | "Homem": "Homem", 32 | "Mulher": "Mulher" 33 | } 34 | }, 35 | { 36 | "name": "O serviço será para quantas pessoas?", 37 | "label": "O serviço será para quantas pessoas?", 38 | "placeholder": "O serviço será para quantas pessoas?", 39 | "mask": "indique o número de pessoas", 40 | "type": "enumerable", 41 | "required": false, 42 | "values": { 43 | "1": "1", 44 | "2": "2", 45 | "Mais de 3": "Mais de 3" 46 | } 47 | }, 48 | { 49 | "name": "Para quando você precisa deste serviço?", 50 | "label": "Para quando você precisa deste serviço?", 51 | "placeholder": "Para quando você precisa deste serviço?", 52 | "mask": "Indique o prazo do serviço", 53 | "type": "enumerable", 54 | "required": true, 55 | "values": { 56 | "Hoje ou nos próximos dias": "Hoje ou nos próximos dias", 57 | "Nos próximos 30 dias": "Nos próximos 30 dias", 58 | "Nos próximos 3 meses": "Nos próximos 3 meses", 59 | "Ainda não tenho previsão": "Ainda não tenho previsão" 60 | } 61 | }, 62 | { 63 | "name": "Informações Adicionais", 64 | "label": "Informações Adicionais", 65 | "type": "big_text", 66 | "placeholder": "Descreva o que você precisa", 67 | "required": false 68 | } 69 | ], 70 | "user_fields": [ 71 | { 72 | "name": "cep", 73 | "label": "CEP", 74 | "type": "cep", 75 | "placeholder": "", 76 | "required": true 77 | }, { 78 | "name": "name", 79 | "label": "Nome", 80 | "type": "small_text", 81 | "placeholder": "", 82 | "required": true 83 | }, { 84 | "name": "email", 85 | "label": "Email", 86 | "type": "email", 87 | "placeholder": "Ex: nome@email.com", 88 | "required": true 89 | }, { 90 | "name": "phone", 91 | "label": "Celular", 92 | "type": "phone", 93 | "placeholder": "", 94 | "required": true 95 | } 96 | ] 97 | } 98 | } 99 | --------------------------------------------------------------------------------