enunciados + leetcode
Enunciados como los de una entrevista real para resolver por tu cuenta, con el tiempo que te darían, y problemas de LeetCode recomendados para cada tecnología y seniority. Nada se corrige acá: resolvelo en tu editor, en voz alta, y marcá lo que ya practicaste.
Una tienda tiene este flujo: login en /login, listado en /products con tarjetas data-testid="product-card" que contienen un botón "Agregar", un carrito en /cart con data-testid="cart-total" y un checkout en /checkout con campos de dirección y un botón "Confirmar compra". La confirmación muestra data-testid="order-id". La API de productos es GET /api/products y la de órdenes es POST /api/orders.
Automatizá con Cypress o Playwright el flujo completo de comprar dos productos y verificar que la orden se crea con el total correcto. Agregá un segundo test donde POST /api/orders responde 500 (interceptado) y verificá que la UI muestra un mensaje de error sin perder el carrito.
# requisitos
cy.session o storageState) y no por la UI en cada test.cy.intercept y alias, o page.waitForResponse, en lugar de sleeps./api/orders además de lo que muestra la UI.# si te sobra tiempo, te van a preguntar
El endpoint POST /api/users recibe { "name": string, "email": string, "role": "admin" | "viewer" }, requiere el header Authorization: Bearer <token> y responde 201 con { "id": string, "name", "email", "role", "createdAt" }. Responde 400 si falta un campo o el email es inválido, 401 sin token, 403 si el token no es de un admin y 409 si el email ya existe. GET /api/users/:id devuelve el usuario creado o 404.
Escribí la suite de tests de API con la herramienta que prefieras (Playwright request, Cypress cy.request, Supertest, Postman con Newman o REST Assured). Si no tenés el servicio, podés levantar un mock con json-server o MSW que cumpla el contrato.
# requisitos
GET devuelve el mismo usuario.# si te sobra tiempo, te van a preguntar
Este test de Playwright falla cerca de una de cada cinco corridas en CI: await page.goto("/orders"); await page.click("text=Filtrar"); await page.waitForTimeout(1000); const rows = await page.$$(".table tr"); expect(rows.length).toBe(5);. La tabla se carga desde GET /api/orders?status=open, que tarda entre 300 ms y 2 s, y mientras carga muestra un spinner. La suite comparte una base de datos con otros tests que también crean órdenes.
Identificá todas las causas posibles de flakiness y reescribí el test para que sea estable. Si usás Cypress, adaptá el mismo escenario.
# requisitos
waitForTimeout y esperar la respuesta de la API o el estado de la UI.expect(locator).toHaveCount(5), en lugar de $$ con conteo inmediato.data-testid).# si te sobra tiempo, te van a preguntar