Skip to content

Commit 405445d

Browse files
committed
chore(init): Adds project files from curriculum
0 parents  commit 405445d

12 files changed

+432
-0
lines changed

.babelrc

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"plugins": ["@babel/plugin-transform-modules-commonjs"]
3+
}

.editorconfig

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
root = true
2+
3+
[*]
4+
indent_style = space
5+
indent_size = 2
6+
charset = utf-8
7+
trim_trailing_whitespace = true
8+
insert_final_newline = true

.eslintrc

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"env": {
3+
"browser": true
4+
},
5+
"parserOptions": {
6+
"ecmaVersion": 2018,
7+
"sourceType": "module"
8+
},
9+
"extends": "eslint:recommended",
10+
"rules": {
11+
"no-console": "warn"
12+
}
13+
}

.gitignore

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
coverage/
2+
node_modules/
3+
.DS_Store
4+
*.log
5+
6+
# Editor directories and files
7+
.idea
8+
.vscode
9+
*.suo
10+
*.ntvs*
11+
*.njsproj
12+
*.sln
13+
*.sw*

README.md

+298
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,298 @@
1+
# Tarjeta de crédito válida
2+
3+
## Índice
4+
5+
* [1. Preámbulo](#1-preámbulo)
6+
* [2. Resumen del proyecto](#2-resumen-del-proyecto)
7+
* [3. Objetivos de aprendizaje](#3-objetivos-de-aprendizaje)
8+
* [4. Consideraciones generales](#4-consideraciones-generales)
9+
* [5. Criterios de aceptación mínimos del proyecto](#5-criterios-de-aceptación-mínimos-del-proyecto)
10+
* [6. Pistas, tips y lecturas complementarias](#6-pistas-tips-y-lecturas-complementarias)
11+
12+
***
13+
14+
## 1. Preámbulo
15+
16+
El [algoritmo de Luhn](https://es.wikipedia.org/wiki/Algoritmo_de_Luhn),
17+
también llamado algoritmo de módulo 10, es un método de suma de verificación,
18+
se utiliza para validar números de identificación; tales como el IMEI de los
19+
celulares, tarjetas de crédito, etc.
20+
21+
Este algoritmo es simple. Obtenemos la reversa del número a verificar (que
22+
solamente contiene dígitos [0-9]); a todos los números que ocupan una posición
23+
par se les debe multiplicar por dos, si este número es mayor o igual a 10,
24+
debemos sumar los dígitos del resultado; el número a verificar será válido si
25+
la suma de sus dígitos finales es un múltiplo de 10.
26+
27+
![gráfica de algoritmo de Luhn](https://www.101computing.net/wp/wp-content/uploads/Luhn-Algorithm.png)
28+
29+
## 2. Resumen del proyecto
30+
31+
En este proyecto tendrás que construir una aplicación web que le permita a un
32+
usuario validar el número de una tarjeta de crédito. Además, tendrás que
33+
implementar funcionalidad para ocultar todos los dígitos de una tarjeta menos
34+
los últimos cuatro.
35+
36+
La temática es libre. Tú debes pensar en qué situaciones de la vida real se
37+
necesitaría validar una tarjeta de crédito y pensar en cómo debe ser esa
38+
experiencia de uso (qué pantallas, explicaciones, mensajes, colores, ¿marca?)
39+
etc.
40+
41+
## 3. Objetivos de aprendizaje
42+
43+
Trabajando en parejas aprenderán a construir una aplicación web que interactuará
44+
con lx usuarix final a través del navegador, utilizando HTML, CSS y JavaScript
45+
como tecnologías.
46+
47+
Dicho en palabras sencillas, aprenderás a:
48+
49+
* Organizar tu tiempo y priorizar tareas en un entorno de
50+
**alta incertidumbre**.
51+
* Entender las **necesidades del usuario** y cómo proponer una solución.
52+
* Entender la importancia del proceso de prototipado durante la creación de un
53+
producto digital.
54+
* Conocer los principios básicos del diseño visual.
55+
* Utilizar etiquetas semánticas de HTML y elementos de formulario.
56+
* Mostrar elementos de formulario en la pantalla usando **HTML** y **CSS**.
57+
* Utilizar diversos tipos de selectores en CSS: de elemento, de clase, de id.
58+
* Utilizar el modelo de cajas de CSS (border, margin, padding).
59+
* Definir reglas de estilo en CSS.
60+
* Permitir al usuario interactuar con elementos del DOM y hacer que la
61+
aplicación responda cuando ocurran esos **eventos del DOM**.
62+
* Manipular _**strings**_ (cadenas de texto).
63+
* Usar **control de flujo** (bucles, condicionales, ...).
64+
* Actualizar la pantalla con los resultados (**manipular el DOM**) a través de
65+
**innerHTML** o **textContent**.
66+
* **Implementar funciones** dada una descripción de su comportamiento.
67+
* Verificar que tus funciones hagan las cosas para las que fueron creadas
68+
(**pruebas unitarias (_unit tests_) con [Jest](https://jestjs.io/es-ES/)**).
69+
* Configurar tu cuenta de git.
70+
* Hacer _fork_ y _clonar_ el repositorio del proyecto.
71+
* Mantener actualizado los cambios en tu repositorio remoto
72+
(commit, pull, push).
73+
* Desplegar tu proyecto en [GitHub Pages](https://pages.github.com).
74+
75+
## 4. Consideraciones generales
76+
77+
* El equipo de coaches te dará un tiempo sugerido e indicaciones sobre si trabajar
78+
sola o en equipo. Recuerda que cada una aprende a diferente ritmo.
79+
* El proyecto será entregado subiendo tu código a GitHub (commit/push) y la
80+
interfaz será desplegada usando GitHub pages. Si no sabes lo que es GitHub, no
81+
te preocupes, lo aprenderás durante este proyecto.
82+
83+
## 5. Criterios de aceptación mínimos del proyecto
84+
85+
Usa solo caracteres numéricos (dígitos) en la tarjeta a validar [0-9].
86+
87+
### Definición del producto
88+
89+
En el `README.md`, cuéntanos cómo pensaste en los usuarios y cuál fue tu proceso
90+
para definir el producto final a nivel de experiencia y de interfaz.
91+
92+
* Quiénes son los principales usuarios de producto.
93+
* Cuáles son los objetivos de estos usuarios en relación con tu producto.
94+
* Cómo crees que el producto que estás creando está resolviendo sus problemas.
95+
96+
### Interfaz de usuario (UI)
97+
98+
La interfaz debe permitir al usuario:
99+
100+
* Insertar el número que queremos validar.
101+
* Ver el resultado si es válido o no.
102+
* Ocultar todos los dígitos de su número de tarjeta menos los últimos
103+
4 caracteres.
104+
* No debe poder ingresar un campo vacío.
105+
106+
### UX (Diseño de experiencia de usuario)
107+
108+
Antes de iniciar a codear, debes entender el problema que quieres solucionar y
109+
cómo tu aplicación lo soluciona.
110+
111+
* Trabaja tu primer prototipo con papel y lápiz (blanco y negro).
112+
* Luego valida esta solución con una compañera (pedir feedback).
113+
* Toma lo aprendido al momento de validar tu primer prototipo y desarrolla un
114+
nuevo prototipo usando alguna herramienta para diseño de prototipos
115+
([Balsamiq](https://balsamiq.com/), [Figma](https://www.figma.com/),
116+
[Google Slides](https://www.google.com/intl/es/slides/about/), etc.)
117+
Estos puntos los presentarás en el `README.md`.
118+
119+
### Scripts / Archivos
120+
121+
#### General
122+
123+
##### `README.md`
124+
125+
Debe contener lo siguiente:
126+
127+
* Un título con el nombre de tu proyecto.
128+
* Un resumen de 1 o 2 líneas de qué se trata tu proyecto.
129+
* La imagen final de tu proyecto.
130+
* Investigación UX:
131+
1. Explicar quiénes son los usuarios y los objetivos en relación con el
132+
producto.
133+
2. Explicar cómo el producto soluciona los problemas/necesidades de dichos
134+
usuarios.
135+
3. Luego colocarás la foto de tu primer prototipo en papel.
136+
4. Agregar un resumen del feedback recibido indicando las mejoras a realizar.
137+
5. Imagen del prototipo final.
138+
139+
#### Visualmente (HTML y CSS)
140+
141+
Deberás maquetar de forma exacta el prototipo final que hiciste en la herramienta
142+
de diseño de prototipos que escogiste utilizando HTML y CSS. En este momento elegirás
143+
los colores, tipo de fuente, etc a usar.
144+
145+
A continuación describimos los archivos que utilizarás:
146+
147+
##### `src/index.html`
148+
149+
En este archivo va el contenido que se mostrará al usuario (esqueleto HTML).
150+
Encontrarás 3 etiquetas iniciales, las cuales si deseas puedes borrar y empezar
151+
de cero:
152+
153+
* `<header>`: encabezado de tu proyecto.
154+
* `<main>`: contenido principal de tu proyecto.
155+
* `<footer>`: pie de página de tu proyecto.
156+
157+
##### `src/style.css`
158+
159+
Este archivo debe contener las reglas de estilo. Queremos que escribas tus
160+
propias reglas, por eso NO está permitido el uso de frameworks de CSS
161+
(Bootstrap, materialize, etc).
162+
163+
#### Funcionalmente (JavaScript - pruebas unitarias)
164+
165+
* La lógica del proyecto debe estar implementada completamente en JavaScript.
166+
* En este proyecto NO está permitido usar librerías o frameworks, sólo JavaScript
167+
puro también conocido como Vanilla JavaScript.
168+
* No se debe utilizar la _pseudo-variable_ `this`.
169+
170+
Vas a tener 2 archivos JavaScript separando responsabilidades, a continuación
171+
indicamos qué harás en cada archivo:
172+
173+
##### `src/validator.js`
174+
175+
Acá escribirás las funciones necesarias para que el usuario pueda verificar la
176+
tarjeta de crédito y ocultar los dígitos de su número de tarjeta.
177+
Esta función debe ser pura e independiente del DOM.
178+
179+
Para esto debes implementar el **objeto `validator`**, el cual ya se encuentra
180+
_exportado_ en el _boilerplate_. Este objeto (`validator`) contiene
181+
dos métodos (`isValid` y `maskify`):
182+
183+
* **`validator.isValid(creditCardNumber)`**: `creditCardNumber` es un `string`
184+
con el número de tarjeta que se va a verificar. Esta función debe retornar un
185+
`boolean` dependiendo si es válida de acuerdo al [algoritmo de Luhn](https://es.wikipedia.org/wiki/Algoritmo_de_Luhn).
186+
187+
* **`validator.maskify(creditCardNumber)`**: `creditCardNumber` es un `string` con
188+
el número de tarjeta y esta función debe retornar un `string` donde todos menos
189+
los últimos cuatro caracteres sean reemplazados por un numeral (`#`) o 🐱.
190+
Esta función deberá siempre mantener los últimos cuatro caracteres intactos, aún
191+
cuando el `string` sea de menor longitud.
192+
193+
Ejemplo de uso
194+
195+
```js
196+
maskify('4556364607935616') === '############5616'
197+
maskify( '64607935616') === '#######5616'
198+
maskify( '1') === '1'
199+
maskify( '') === ''
200+
```
201+
202+
##### `src/index.js`
203+
204+
Acá escribirás todo el código que tenga que ver con la interacción del DOM
205+
(seleccionar, actualizar y manipular elementos del DOM y eventos).
206+
Es decir, en este archivo deberás invocar las funciones `isValid` y `maskify`
207+
según sea necesario para actualizar el resultado en la pantalla (UI).
208+
209+
##### `test/validator.spec.js`
210+
211+
En este archivo tendrás que completar las pruebas unitarias de las funciones
212+
`validator.isValid(creditCardNumber)` y `validator.maskify(creditCardNumber)`
213+
implementadas en `validator.js` utilizando [Jest](https://jestjs.io/es-ES/).
214+
Tus pruebas unitarias deben dar un 70% en _coverage_ (cobertura),
215+
_statements_ (sentencias), _functions_ (funciones) y _lines_ (líneas); y un
216+
mínimo del 50% de _branches_ (ramas).
217+
218+
***
219+
220+
## 6. Pistas, tips y lecturas complementarias
221+
222+
### Primeros pasos
223+
224+
1. Antes que nada, asegúrate de tener un :pencil: editor de texto en
225+
condiciones, algo como [Atom](https://atom.io/) o
226+
[Code](https://code.visualstudio.com/).
227+
2. Para ejecutar los comandos a continuación necesitarás una :shell:
228+
[UNIX Shell](https://github.com/Laboratoria/bootcamp/tree/master/topics/shell),
229+
que es un programita que interpreta líneas de comando (command-line
230+
interpreter) así como tener [git](https://github.com/Laboratoria/bootcamp/tree/master/topics/scm/01-git)
231+
instalado. Si usas un sistema operativo "UNIX-like", como GNU/Linux o MacOS,
232+
ya tienes una _shell_ (terminal) instalada por defecto (y probablemente `git`
233+
también). Si usas Windows puedes usar la versión completa de [Cmder](https://cmder.net/)
234+
que incluye [Git bash](https://git-scm.com/download/win) y si tienes Windows 10
235+
o superior puedes usar [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10).
236+
3. Una de las integrantes del equipo debe realizar un :fork_and_knife:
237+
[fork](https://help.github.com/articles/fork-a-repo/) del repo de tu cohort,
238+
tus _coaches_ te compartirán un _link_ a un repo y te darán acceso de lectura
239+
en ese repo. La otra integrante del equipo deber hacer un fork **del
240+
repositorio de su compañera** y
241+
[configurar](https://gist.github.com/BCasal/026e4c7f5c71418485c1) un `remote`
242+
hacia el mismo.
243+
4. :arrow_down: [Clona](https://help.github.com/articles/cloning-a-repository/)
244+
tu _fork_ a tu computadora (copia local).
245+
5. 📦 Instala las dependencias del proyecto con el comando `npm install`. Esto
246+
asume que has instalado [Node.js](https://nodejs.org/) (que incluye [npm](https://docs.npmjs.com/)).
247+
6. Si todo ha ido bien, deberías poder ejecutar las :traffic_light:
248+
pruebas unitarias (unit tests) con el comando `npm test`.
249+
7. Para ver la interfaz de tu programa en el navegador, usa el comando
250+
`npm start` para arrancar el servidor web y dirígete a
251+
`http://localhost:5000` en tu navegador.
252+
8. A codear se ha dicho! :rocket:
253+
254+
### Recursos y temas relacionados
255+
256+
A continuación un video de Michelle que te lleva a través del algoritmo de Luhn
257+
y un par de cosas más que debes saber para resolver este proyecto. ¡Escúchala
258+
con detenimiento y sigue sus consejos! :)
259+
260+
[![tips credit card](https://img.youtube.com/vi/f0zL6Ot9y_w/0.jpg)](https://www.youtube.com/watch?v=f0zL6Ot9y_w)
261+
262+
[Link](https://www.youtube.com/watch?v=f0zL6Ot9y_w)
263+
264+
Terminal y shell de UNIX:
265+
266+
[![Playlist de Terminal y shell de UNIX](https://img.youtube.com/vi/GB35Eyb-J4c/0.jpg)](https://www.youtube.com/playlist?list=PLiAEe0-R7u8nGH5TEHfSTeDNIvjZFe_Yd)
267+
268+
[Link](https://www.youtube.com/playlist?list=PLiAEe0-R7u8nGH5TEHfSTeDNIvjZFe_Yd)
269+
270+
Control de versiones y trabajo colaborativo con Git y GitHub:
271+
272+
[![Playlist de control de versiones y trabajo colaborativo](https://img.youtube.com/vi/F1EoBbvhaqU/0.jpg)](https://www.youtube.com/playlist?list=PLiAEe0-R7u8k9o3PbT3_QdyoBW_RX8rnV)
273+
274+
[Link](https://www.youtube.com/playlist?list=PLiAEe0-R7u8k9o3PbT3_QdyoBW_RX8rnV)
275+
276+
Diseño de experiencia de usuario (User Experience Design):
277+
278+
* Ideación
279+
* Prototipado (sketching)
280+
* Testeo e Iteración
281+
282+
Desarrollo Front-end:
283+
284+
* Valores
285+
* Tipos
286+
* Variables
287+
* Control de flujo
288+
* Tests unitarios
289+
* [Documentación de NPM](https://docs.npmjs.com/)
290+
291+
Organización del Trabajo:
292+
293+
* [Metodologías Ágiles](https://www.youtube.com/watch?v=v3fLx7VHxGM)
294+
* [Scrum en menos de 2 minutos](https://www.youtube.com/watch?v=TRcReyRYIMg)
295+
* [Scrum en Detalle](https://www.youtube.com/watch?v=nOlwF3HRrAY&t=297s). No
296+
esperamos que hagas todo eso desde este proyecto. Iremos profundizando poco a
297+
poco a lo largo del -_bootcamp_.
298+
* [Blog: cómo funciona el algoritmo de Luhn](http://www.quobit.mx/asi-funciona-el-algoritmo-de-luhn-para-generar-numeros-de-tarjetas-de-credito.html).

package.json

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"name": "card-validation",
3+
"version": "1.0.0",
4+
"main": "src/index.html",
5+
"license": "MIT",
6+
"scripts": {
7+
"htmlhint": "htmlhint src/*.html test/*.html",
8+
"eslint": "eslint --ext .js src/ test/",
9+
"pretest": "npm run eslint && npm run htmlhint",
10+
"test": "jest --verbose --coverage",
11+
"open-coverage-report": "opener ./coverage/lcov-report/index.html",
12+
"start": "serve ./src",
13+
"deploy": "gh-pages -d src"
14+
},
15+
"dependencies": {
16+
"@babel/core": "^7.6.2",
17+
"@babel/plugin-transform-modules-commonjs": "^7.6.0",
18+
"babel-jest": "^24.9.0",
19+
"eslint": "^5.9.0",
20+
"gh-pages": "^2.1.1",
21+
"htmlhint": "^0.11.0",
22+
"jest": "^24.9.0",
23+
"opener": "^1.5.1",
24+
"serve": "^11.0.0"
25+
}
26+
}

src/index.html

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<title>Tarjeta de crédito válida</title>
6+
<link rel="stylesheet" href="style.css" />
7+
</head>
8+
<body>
9+
<header></header>
10+
<main></main>
11+
<footer></footer>
12+
<script src="index.js" type="module"></script>
13+
</body>
14+
</html>

src/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import validator from './validator.js';
2+
3+
console.log(validator);

src/style.css

Whitespace-only changes.

src/validator.js

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
const validator = {
2+
// ...
3+
};
4+
5+
export default validator;

test/.eslintrc

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"env": {
3+
"jest": true
4+
}
5+
}

0 commit comments

Comments
 (0)