From ef06ac0b0afa5a8fb6a058ffd06cfa4aa28af8ca Mon Sep 17 00:00:00 2001 From: Gian Date: Sun, 30 Jun 2019 17:50:38 -0300 Subject: [PATCH] WIP --- back-end/src/model/fabrica-app.js | 12 ++-- back-end/src/model/fabrica.js | 105 +++++++++++++---------------- back-end/src/router/api.js | 17 ++--- back-end/test/router/api.spec.js | 107 +++++++++++++++++++++++++++--- 4 files changed, 158 insertions(+), 83 deletions(-) diff --git a/back-end/src/model/fabrica-app.js b/back-end/src/model/fabrica-app.js index a4fd788..c2b0769 100644 --- a/back-end/src/model/fabrica-app.js +++ b/back-end/src/model/fabrica-app.js @@ -4,16 +4,16 @@ import Fabrica from './fabrica' class FabricaApp { constructor() {} - logearUsuario(nombreDeUsuario) { - return Fabrica.logearUsuario(nombreDeUsuario) + logearUsuario(nombreUsuario) { + return Fabrica.logearUsuario(nombreUsuario) } - guardarJuego(fabrica, usuario, callback){ - Fabrica.guardarJuego(fabrica, usuario, callback) + guardarJuego(fabrica, nombreUsuario){ + return Fabrica.guardarJuego(fabrica, nombreUsuario) } - obtenerJuegoDeUsuario(usuario){ - return Fabrica.obtenerJuegoDeUsuario(usuario) + obtenerJuegoDeUsuario(nombreUsuario){ + return Fabrica.obtenerJuegoDeUsuario(nombreUsuario) } } diff --git a/back-end/src/model/fabrica.js b/back-end/src/model/fabrica.js index 43cea66..2fe4d93 100644 --- a/back-end/src/model/fabrica.js +++ b/back-end/src/model/fabrica.js @@ -1,76 +1,65 @@ import mongoose, {Schema} from 'mongoose' const Maquina = new Schema({ - _id: mongoose.Schema.Types.ObjectId, - costo: { - type: Number, - }, - direccion: { - type: String - }, - frecuencia: { - type: Number - }, - imagenActivaUrl: { - type: String - }, - imagenInactivaUrl: { - type: String - } + _id: mongoose.Schema.Types.ObjectId, + costo: { + type: Number, + }, + direccion: { + type: String + }, + frecuencia: { + type: Number + }, + imagenActivaUrl: { + type: String + }, + imagenInactivaUrl: { + type: String + } }); const Celda = new Schema({maquina: Maquina, seleccionada: Boolean, materia: Number, x: Number, y: Number}); const schema = mongoose.Schema({ - _id: mongoose.Schema.Types.ObjectId, - nombreUsuario: { - type: String - }, - ancho: { - type: Number, - }, - alto: { - type: Number - }, - celdas: { - type: [Celda] - }, - ganancia: { - type: Number - }, + _id: mongoose.Schema.Types.ObjectId, + nombreUsuario: { + type: String + }, + ancho: { + type: Number, + }, + alto: { + type: Number + }, + celdas: { + type: [Celda] + }, + ganancia: { + type: Number + }, }); -schema.statics.guardarJuego = async function(fabrica, usuario, callback) { - return await this.model('Fabrica') - .findOneAndUpdate({ nombreUsuario: usuario.nombre }, - { - ancho: fabrica.ancho, - alto: fabrica.alto, - celdas: fabrica.celdas, - ganancia: fabrica.ganancia - } , { upsert: true, new: true, useFindAndModify: false }) - .exec(); +schema.statics.guardarJuego = async function(fabrica, nombreUsuario) { + const query = { nombreUsuario } + const res = await this.model('Fabrica').update(query, fabrica).exec() } -schema.statics.obtenerJuegoDeUsuario = async function(usuario) { - return await this.model('Fabrica') - .find({nombreUsuario: usuario}) - .exec() +schema.statics.obtenerJuegoDeUsuario = async function(nombreUsuario) { + return await this.model('Fabrica').findOne({nombreUsuario}).exec() } schema.statics.logearUsuario = async function(nombreUsuario) { - // TODO: enviar fabricaInicial para guardar al crear. - // const fabricaInicial = { - // ancho: 10, - // alto: 10, - // celdas: [], // TODO: generar lista de celdas. - // ganancia: 0, - // nombreUsuario: nombreUsuario - // } - return await this.model('Fabrica') - .findOneAndUpdate({ nombreUsuario: nombreUsuario }, { nombreUsuario: nombreUsuario }, { upsert: true, new: true, useFindAndModify: false }) - .exec() + const fabricaInicial = { + ancho: 10, + alto: 10, + celdas: [], // TODO: generar lista de celdas. + ganancia: 0, + nombreUsuario: nombreUsuario + } + const query = { nombreUsuario } + const options = { upsert: true, new: true, useFindAndModify: false } + return await this.model('Fabrica').findOneAndUpdate(query, fabricaInicial, options).exec() } - export default mongoose.model('Fabrica', schema) \ No newline at end of file diff --git a/back-end/src/router/api.js b/back-end/src/router/api.js index 5a7c399..a5d8f64 100644 --- a/back-end/src/router/api.js +++ b/back-end/src/router/api.js @@ -1,6 +1,5 @@ import { Router } from 'express' import FabricaApp from '../model/fabrica-app' -import Fabrica from '../model/fabrica' const router = Router() const app = new FabricaApp() @@ -10,19 +9,21 @@ router.get('/', (req, res) => { }); router.post('/login', async (req, res) => { - const nombre = req.body.usuario.nombre + const nombre = req.body.nombre + const fabrica = await app.logearUsuario(nombre) + res.json({status: "ok", fabrica}) }) router.post('/fabrica', async (req, res) => { - const usuario = req.body.usuario + const nombre = req.body.usuario.nombre const fabrica = req.body.fabrica - // TODO: sorround with TRY-CATCH - await app.guardarJuego(fabrica, usuario) - res.json({status: "ok"}) + + await app.guardarJuego(fabrica, nombre) + const nuevaFabrica = await app.obtenerJuegoDeUsuario(nombre) + + res.json({status: "ok", fabrica: nuevaFabrica}) }) - - export default router diff --git a/back-end/test/router/api.spec.js b/back-end/test/router/api.spec.js index fbc896d..aec2313 100644 --- a/back-end/test/router/api.spec.js +++ b/back-end/test/router/api.spec.js @@ -3,10 +3,27 @@ import request from 'supertest' import { OK } from 'http-status-codes' import app from '../../src/server' import chai from 'chai' +import FabricaApp from '../../src/model/fabrica-app'; const { assert } = chai; describe('API', () => { + let nombreUsuario + let fabricaInicial + let usuario + + beforeEach(() => { + nombreUsuario = 'pepe' + usuario = { nombre: nombreUsuario } + fabricaInicial = { + ancho: 10, + alto: 10, + celdas: [], // TODO: generar lista de celdas. + ganancia: 0, + nombreUsuario + } + }) + it('/api devuelve ok', (done) => { request(app) .get('/api') @@ -15,26 +32,94 @@ describe('API', () => { }) describe('/login', () => { - it('Logea el usuario y devuelve una fabrica vacia', (done) => { - request(app) + + describe('para un usuario nuevo', () => { + + it('logea el usuario y devuelve una fabrica nueva', (done) => { + request(app) + .post('/api/login') + .send(usuario) + .expect(OK) + .expect((res) => { + assert.equal(res.body.fabrica.nombreUsuario, nombreUsuario) + assert.equal(res.body.fabrica.ganancia, 0) + }) + .end(done); + }) + }); + + describe('para un usuario existente', () => { + + it('devuelve la fabrica del usuario', async (done) => { + const fabrica = {...fabricaInicial, ganancia: 10 } + + await request(app) + .post('/api/login') + .send(usuario) + + await request(app) + .post('/api/fabrica') + .send({ usuario: nombreUsuario , fabrica}) + + request(app) + .post('/api/login') + .send(usuario) + .expect(OK) + .expect((res) => { + assert.equal(res.body.fabrica.nombreUsuario, nombreUsuario) + assert.equal(res.body.fabrica.ganancia, fabrica.ganancia) + }) + .end(done); + }) + + it('no lo vuelve a guardar', async (done) => { + let id + + await request(app) + .post('/api/login') + .send(usuario) + .expect(OK) + .expect((res) => { + assert.equal(res.body.fabrica.nombreUsuario, nombreUsuario) + id = res.body.fabrica._id + }) + + request(app) + .post('/api/login') + .send(usuario) + .expect(OK) + .expect((res) => { + assert.equal(res.body.fabrica.nombreUsuario, nombreUsuario) + assert.equal(res.body.fabrica._id, id) + }) + .end(done); + }) + }); + }); + + describe('/fabrica', () => { + + it('guarda la fabrica', async (done) => { + let idDeFabrica + await request(app) .post('/api/login') - .send({ usuario: { nombre: 'pepe' }}) + .send(usuario) .expect(OK) .expect((res) => { - assert.include(res.body, []); + assert.equal(res.body.fabrica.nombreUsuario, nombreUsuario) + idDeFabrica = res.body.fabrica._id }) - .end(done); - }) - }); - describe('/fabrica', () => { - it('Guarda la fabrica', (done) => { + const fabrica = {...fabricaInicial, ganancia: 10 } + request(app) .post('/api/fabrica') - .send({ usuario: 'Pepe' , fabrica: {}}) + .send({ usuario , fabrica}) .expect(OK) .expect((res) => { - assert.include(res.body, []); + assert.equal(res.body.fabrica.nombreUsuario, nombreUsuario) + assert.equal(res.body.fabrica.ganancia, fabrica.ganancia) + assert.equal(res.body.fabrica._id, idDeFabrica) }) .end(done); })