Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prueba 01 HectorCavilla #236

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions pruebas/01-reading-list/hectorcavilla/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"extends": "next/core-web-vitals"
}
35 changes: 35 additions & 0 deletions pruebas/01-reading-list/hectorcavilla/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
.env*.local

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts
44 changes: 44 additions & 0 deletions pruebas/01-reading-list/hectorcavilla/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# 01 - Desarrollo de una Aplicación de Lista de Libros

## Funcionalidades

- [x] **Visualización de Libros Disponibles**: La aplicación debe mostrar una lista de libros disponibles que el usuario pueda revisar.

- [x] **Creación de Lista de Lectura**: El usuario debe ser capaz de crear una lista de lectura a partir de los libros disponibles. En la UI debe quedar claro qué libros están en la lista de lectura y cuáles no. También debe ser posible mover un libro de la lista de lectura a la lista de disponibles.

- [x] **Filtrado de Libros por Género**: Los usuarios deben poder filtrar la lista de libros disponibles por género, y se mostrará un contador con el número de libros disponibles, el número de libros en la lista de lectura y el número de libros disponibles en el género seleccionado.

- [x] **Sincronización de Estado**: Debe haber una sincronización del estado global que refleje el número de libros en la lista de lectura y el número de libros todavía disponibles. Si un libro se mueve de la lista de disponibles a la lista de lectura, el recuento de ambos debe actualizarse en consecuencia.

- [x] **Persistencia de Datos**: La aplicación debe persistir los datos de la lista de lectura en el almacenamiento local del navegador. Al recargar la página, la lista de lectura debe mantenerse.

- [x] **Sincronización entre pestañas**: Si el usuario abre la aplicación en dos pestañas diferentes, los cambios realizados en una pestaña deben reflejarse en la otra. Sin necesidad de usar Backend.

- [x] **Despliegue**: La aplicación debe estar desplegada en algún servicio de hosting gratuito (Netlify, Vercel, Firebase, etc) y debe ser accesible a través de una URL pública. Indica la URL en el README.

- [ ] **Test**: La aplicación debe tener AL MENOS un test. Haz el test que consideres más importante para tu aplicación.

## Desafíos adicionales

- [ ] Implementar una funcionalidad de búsqueda en la lista de libros disponibles.
- [x] Añade un nuevo filtro para filtrar los libros por número de páginas.
- [ ] Permitir la reorganización de los libros en la lista de lectura por prioridad.
- [x] Haz que tu diseño sea responsive.

## Instrucciones para desarrollo/contribución

Ejecuta el servidor de desarrollo:

```bash
npm run dev
# or
yarn dev
# or
pnpm dev
```

URL: [http://localhost:3000](http://localhost:3000)

## Desplegado en Vercel

[Ver Aplicación Libros](https://pruebas-tecnicas-tau.vercel.app/) en acción.
27 changes: 27 additions & 0 deletions pruebas/01-reading-list/hectorcavilla/__tests__/index.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { render, screen } from "@testing-library/react";
import Home from "@/app/page";
import "@testing-library/jest-dom";

/* describe("Book Item", () => {
test("it displays a list of books", async () => {
render(<BookItem />);

const button = screen.getByRole("button", {
name: /Agregar a la lista/g,
});

expect(button).toBeInTheDocument();
});
}); */

describe("Home", () => {
it("renders a heading", () => {
render(<Home />);

const heading = screen.getByRole("heading", {
name: /Libros \(\d+\)/g,
});

expect(heading).toBeInTheDocument();
});
});
17 changes: 17 additions & 0 deletions pruebas/01-reading-list/hectorcavilla/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const nextJest = require("next/jest");

const createJestConfig = nextJest({
dir: "./",
transform: {
"^.+\\.ts?$": "ts-jest",
"^.+\\.(js|jsx)$": "babel-jest",
},
transformIgnorePatterns: ["<rootDir>/node_modules/(?!swiper)"],
});

const customJestConfig = {
moduleDirectories: ["node_modules", "<rootDir>/"],
testEnvironment: "jest-environment-jsdom",
};

module.exports = createJestConfig(customJestConfig);
7 changes: 7 additions & 0 deletions pruebas/01-reading-list/hectorcavilla/jsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}
15 changes: 15 additions & 0 deletions pruebas/01-reading-list/hectorcavilla/next.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
remotePatterns: [
{
protocol: 'https',
hostname: 'images-na.ssl-images-amazon.com',
port: '',
pathname: '/images/S/compressed.photo.goodreads.com/books/**',
},
],
}
}

module.exports = nextConfig
Loading
Loading