Skip to content
Merged
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
47 changes: 47 additions & 0 deletions backend/controllers/listController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
const ListModel = require('../models/listCollection')

const list_create = async (req, res) =>{
const list = new ListModel(req.body)
list.save()
res.json(list)
}


const list_get = async (req,res) => {
const list = await ListModel.findById(req.params.id)
if(!list){
return res.status(404).json({ error: 'Lista não encontrada' })
}
res.json(list)
}


const list_get_all = async (req,res) => {
const lists = await ListModel.find()

if(lists.length === 0){
return res.status(404).json({ error: 'Você ainda não cadastrou nenhuma lista' })
}

res.json(lists)
}



const list_delete = async (req, res) => {
const list = await ListModel.findByIdAndDelete(req.params.id)

if (!list){
return res.status(404).json({error: 'Lista não encontrada'})
} else{
res.json(list)
}
}


module.exports = {
list_create,
list_get,
list_get_all,
list_delete
}
36 changes: 36 additions & 0 deletions backend/models/list.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
const mongoose = require('mongoose')
const Schema = mongoose.Schema

const ListSchema = new Schema({
name:{
type: String,
required: true
},

description:{
type: String,
},

author:{
type: Schema.Types.ObjectId,
ref: 'User',
require: true
},

numberOfRestaurants:{
type: Number,
default: 0
},

restaurants: [RestaurantSchema]

})

ListSchema.pre('save', function(next)){
this.numberOfRestaurants = this.restaurants.length;
next();
}


const List = mongoose.model("List", ListSchema)
module.exports = List
35 changes: 35 additions & 0 deletions backend/models/listCollection.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
const mongoose = require('mongoose')
const Schema = mongoose.Schema

const ListSchema = new Schema({
name:{
type: String,
required: true
},

description:{
type: String,
default: ""
},

// Usuários são puxados de outro schema
// author:{
// type: Schema.Types.ObjectId,
// ref: 'User',
// },
// author:{
// type: String,
// },


// Itens da lista são puxados de outro schema
restaurants: [{
type: Schema.Types.ObjectId,
ref: 'Restaurant'
}]

})


const ListModel = mongoose.model("listCollection", ListSchema)
module.exports = ListModel
16 changes: 16 additions & 0 deletions backend/routes/listRouter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const express = require("express")
const router = express.Router()

const ListController = require("../controllers/listController")

router.get('/get/:id', ListController.list_get)

router.get('/', ListController.list_get_all)

router.post('/create', ListController.list_create)

router.put('/edit/:id', ListController.list_edit)

router.delete('/delete/:id', ListController.list_delete)

module.exports = router
3 changes: 3 additions & 0 deletions backend/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ require("dotenv").config()

// import routers
const restaurantRouter = require("./routes/restaurantRouter")
const listRouter = require("./routes/listRouter")
const searchesRouter = require("./routes/searchesRouter")
const tendenciesRouter = require("./routes/tendenciesRouter")
const forumRouter = require("./routes/forumRouter")
Expand Down Expand Up @@ -44,3 +45,5 @@ app.use("/users", userRouter)
app.use("/users", followersRouter)
app.use("/reviews", reviewRouter)
app.use("/ratings", ratingRouter)
app.use("/lists", listRouter)

62 changes: 62 additions & 0 deletions backend/tests/controllers/followers/listFollowersUnit.steps.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { defineFeature, loadFeature } from 'jest-cucumber';
import axios, { AxiosResponse } from 'axios';
const mongoose = require('mongoose');
export async function connectDBForTesting() {
try {
const dbUri = "mongodb://localhost:27017";
const dbName = "test";
await mongoose.connect(dbUri, {
dbName,
autoCreate: true,
});
} catch (error) {
console.log("DB connect error");
}
}

export async function disconnectDBForTesting() {
try {
await mongoose.connection.close();
} catch (error) {
console.log("DB disconnect error");
}
}

const User = require('../../../models/User.js');
const feature = loadFeature('tests/features/followers/listFollowersUnit.feature');
const SERVER_URL = 'http://localhost:3001'

defineFeature(feature, test => {

let user: typeof User
let user1: typeof User

beforeAll(async () => {
await connectDBForTesting();
user1 = new User();
});
afterAll(async () => {
await disconnectDBForTesting();
});

test('Pegar lista de seguidores - teste unitário', ({ given, when, then }) => {
given(/^o usuário com id "(.*)" está armazenado no sistema com a lista de seguidores "(.*)", "(.*)", "(.*)"$/,
async (id1, id2, id3, id4) => {
let user1 = await User.findByIdAndUpdate(
{_id: id1},
{followers: [id2, id3, id4]},
{new: true}
)
});

when(/^fizer a busca pela lista de seguidores do usuário "(.*)"$/, async (id) => {
user = await User.findById(id)
});


then(/^o sistema retorna um JSON com a lista "(.*)", "(.*)", "(.*)"$/,
async (id1, id2, id3) => {
expect(user.followers).toEqual(expect.arrayContaining([id1, id2, id3]))
});
});
})
6 changes: 6 additions & 0 deletions backend/tests/features/followers/listFollowersUnit.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Feature: followers

Scenario: Pegar lista de seguidores - teste unitário
Given o usuário com id "65d1eb21077a9668192c4fe8" está armazenado no sistema com a lista de seguidores "65d1ebd4077a9668192c4feb", "65d1ebf4077a9668192c4fee", "65d1ebf4077a9668192c4fee"
When fizer a busca pela lista de seguidores do usuário "65d1eb21077a9668192c4fe8"
And o sistema retorna um JSON com a lista "65d1ebd4077a9668192c4feb", "65d1ebf4077a9668192c4fee", "65d1ebf4077a9668192c4fee"
63 changes: 0 additions & 63 deletions features/Lists.feature

This file was deleted.

16 changes: 8 additions & 8 deletions features/followers.feature
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,12 @@ Feature: seguidores/lista de seguidores
And retorna um JSON vazio

Scenario: Seguir um usuário
Given o usuário com id "258" está armazenado no sistema com a lista de usuários que segue "123, 789"
And o usuário com o id "147" está armazenado no sistema com a lista de seguidores "123, 456, 789" e com e-mail "almocin.ess@gmail.com"
Given o usuário com id "258" está armazenado no sistema com a lista de usuários que segue vazia
And o usuário com o id "147" está armazenado no sistema com a lista de seguidores vazia e com e-mail "almocin.ess@gmail.com"
When fizer uma requisição PUT com rota "/users/follow/147" e o body contendo o id "258"
Then o status do sistema é "200 OK"
And retorna um JSON com os dados do usuário com o id "147" que tem a lista de seguidores "123, 456, 789, 258"
And com os dados do usuário com id "258" tem a lista de usuários que segue "123, 789, 147"
And retorna um JSON com os dados do usuário com o id "147" que tem a lista de seguidores "258"
And com os dados do usuário com id "258" tem a lista de usuários que segue "147"
And a mensagem enviada para o e-mail cadastrado do usuário seguido tem status "success"

Scenario: Pegar lista de usuários que segue
Expand All @@ -163,13 +163,13 @@ Feature: seguidores/lista de seguidores
And contendo o id "147" e a lista de seguidores "123, 456, 789, 258"

Scenario: Deixar de seguir um usuário
Given o usuário com id "258" está armazenado no sistema com a lista de usuários que segue "123, 789, 147"
And o usuário com o id "147" está armazenado no sistema com a lista de seguidores "123, 456, 789, 258"
Given o usuário com id "258" está armazenado no sistema com a lista de usuários que segue "147"
And o usuário com o id "147" está armazenado no sistema com a lista de seguidores "258"
When fizer uma requisição PUT com rota "/users/unfollow/147"
And o body contendo o id "258"
Then o status do sistema é "200 OK"
And retorna um JSON contendo o id "147" e a lista de seguidores "123, 456, 789"
And contendo o id "258" e a lista de usuários que segue "123, 789"
And retorna um JSON contendo o id "147" e a lista de seguidores vazia
And contendo o id "258" e a lista de usuários que segue vazia


Scenario: Deixar de seguir um usuário que não segue
Expand Down
Loading