diff --git a/tests/category.test.js b/tests/category.test.js new file mode 100644 index 0000000..86e0fa5 --- /dev/null +++ b/tests/category.test.js @@ -0,0 +1,47 @@ +const config = require('../server/config/config'); +const request = require('supertest'); +const app = require('../server/server'); +const mongoose = require('mongoose'); +const categoryModel = require('../server/models/category'); + +describe('Category API Tests... ', () => { + + beforeAll(async (done) => { + await mongoose.connect(config.urlDB, { useNewUrlParser: true, useCreateIndex: true }, (err) => { + if (err) { + console.error(err); + process.exit(1); + } + done(); + }); + }); + + afterAll(() => { + mongoose.connection.close(); + }); + + let newCategoryId; + + it('should create a new category and return it', async () => { + const response = await request(app) + .post('/category') + .send({ description: 'Test Category' }); + + expect(response.status).toBe(201); + expect(response.body.category).toBeDefined(); + expect(response.body.category.description).toBe('Test Category'); + newCategoryId = response.body.category._id; + }); + + it('should get all categories', async () => { + const response = await request(app).get('/category'); + expect(response.status).toBe(200); + expect(Array.isArray(response.body.categories)).toBe(true); + }); + + it('should delete the created category', async () => { + const response = await request(app) + .delete(`/category/${newCategoryId}`); + expect(response.status).toBe(200); + }); +}); diff --git a/tests/devarc.test.js b/tests/devarc.test.js deleted file mode 100644 index 667b3b3..0000000 --- a/tests/devarc.test.js +++ /dev/null @@ -1,163 +0,0 @@ -const config = require('../server/config/config'); -const request = require('supertest'); -const app = require('../server/server'); -const mongoose = require('mongoose'); -const categoryModel = require('../server/models/category'); - -var id; -var desc; - -let token; -describe('Devarc Test... ', () => { - - beforeAll(async (done) => { - await mongoose.connect(config.urlDB, { useNewUrlParser: true, useCreateIndex: true }, (err) => { - if (err) { - console.error(err); - process.exit(1); - } - done(); - }); - - }); - - - beforeAll((done) => { - request(app) - .post('/login') - .send({ - email: 'jsg8405@gmail.com', - password: '', - }) - .end((err, response) => { - token = response.body.token; // save the token! - done(); - }); - - }); - - - test('should return status 200 and text message on the initial page', async () => { - const res = await request(app).get('/'); - expect(res.statusCode).toEqual(200); - expect(res.text).toBe('Devarc is online'); - }); - - test('should return status 200 and return products', async () => { - const res = await request(app).get('/products/'); - expect(res.statusCode).toEqual(200); - expect(res.body.numProductos).toBeGreaterThan(0); - }); - - test('should return status 200 and return product 600ec6adddd7fc0015d10a6e', async () => { - const res = await request(app).get('/products/searchByID/600ec6adddd7fc0015d10a6e'); - expect(res.statusCode).toEqual(200); - expect(res.body.numProductos).toBeGreaterThan(0); - }); - - test('should return status 400 for not found product', async () => { - const res = await request(app).get('/products/searchByID/AAA'); - expect(res.statusCode).toEqual(400); - }); - - test('should return status 401 Invalid token', async () => { - const res = await request(app).get('/users'); - expect(res.statusCode).toEqual(401); - }); - - test('should return status 200 Invalid token', async () => { - return request(app) - .get('/users') - .set('token', token) - .then((response) => { - expect(response.statusCode).toBe(200); - expect(response.type).toBe('application/json'); - }); - }); - - - test('should return users', async () => { - return request(app) - .get('/users') - .set('token', token) - .then((response) => { - expect(response.body.Users).toBeGreaterThan(0); - expect(response.type).toBe('application/json'); - }); - }); - - test('should return Lenovo Mouse a1 product test', async () => { - return request(app) - .get('/products/searchByID/5f7701c99449505900f23333') - .set('token', token) - .then((response) => { - expect(response.body.numProductos).toBe(1) - expect(response.type).toBe('application/json'); - - let product = response.body.products[0]; - expect(product.avaiable).toEqual(true); - - }); - }); - - - // test('should return id category of Test8', async () => { - // var data = { 'description': 'Test8' }; - - // request(app) - // .post('/category') - // .send(data) - // .then((response) => { - // id = response.body.category._id; - // expect(response.statusCode).toBe(201); - // expect(response.body.category._id).toBe(id); - // expect(response.body.category._id).not.toBeNull(); - // }); - - - // }); - - // it('should remove Category Test8 Category and return null successfully', async () => { - - // await categoryModel.findByIdAndRemove({description : 'Test8'}) - // const cateDeleted = await categoryModel.findById({_id : id}) - // expect(cateDeleted).toBeNull() ; - - // }); - - test('should return description pañales of id 600587e86bd460001551ce6b', async () => { - let descCategory; - //Category.find({}) - categoryModel.find({ _id : '600587e86bd460001551ce6b'}) - .exec((err, category) => { - if (err) { expect(err).toBe(err); }; - descCategory = category[0].description; - expect(descCategory).toEqual('pañales'); - }); - - }); - - it('should create & save Category Test 2 successfully', async () => { - var data = { 'description': 'Test 2' }; - const validCategory = new categoryModel(data); - const savedCategory = await validCategory.save(); - id = savedCategory._id; - expect(savedCategory._id).toBeDefined(); - expect(savedCategory.description).toBe(validCategory.description); - }); - - - it('should remove Category Test 2 Category and return null successfully', async () => { - - await categoryModel.findByIdAndRemove({_id : id}) - const cateDeleted = await categoryModel.findById({_id : id}) - expect(cateDeleted).toBeNull() ; - - }); - - afterAll(() => { - mongoose.connection.close(); - }); - - -}) \ No newline at end of file diff --git a/tests/product.test.js b/tests/product.test.js new file mode 100644 index 0000000..e397972 --- /dev/null +++ b/tests/product.test.js @@ -0,0 +1,81 @@ +require('dotenv').config({ path: 'tests/.env' }); +const config = require('../server/config/config'); +const request = require('supertest'); +const app = require('../server/server'); +const mongoose = require('mongoose'); +const categoryModel = require('../server/models/category'); + +let token; +let testCategoryId; + +describe('Devarc Test... ', () => { + + beforeAll(async (done) => { + await mongoose.connect(config.urlDB, { useNewUrlParser: true, useCreateIndex: true }, (err) => { + if (err) { + console.error(err); + process.exit(1); + } + done(); + }); + }); + + beforeAll((done) => { + request(app) + .post('/login') + .send({ + email: process.env.TEST_EMAIL, + password: process.env.TEST_PASSWORD, + }) + .end((err, response) => { + token = response.body.token; // save the token! + done(); + }); + }); + + beforeAll(async () => { + const category = new categoryModel({ description: 'Test Category' }); + const savedCategory = await category.save(); + testCategoryId = savedCategory._id; + }); + + afterAll(async () => { + await categoryModel.findByIdAndRemove(testCategoryId); + mongoose.connection.close(); + }); + + + test('should return status 200 and text message on the initial page', async () => { + const res = await request(app).get('/'); + expect(res.statusCode).toEqual(200); + expect(res.text).toBe('Devarc is online'); + }); + + test('should return status 200 and return products', async () => { + const res = await request(app).get('/products/'); + expect(res.statusCode).toEqual(200); + expect(res.body.numProductos).toBeGreaterThan(0); + }); + + test('should return status 400 for not found product', async () => { + const res = await request(app).get('/products/searchByID/AAA'); + expect(res.statusCode).toEqual(400); + }); + + test('should create a new product', async () => { + const res = await request(app) + .post('/products') + .set('token', token) + .send({ + name: 'Test Product', + price: 10, + priceCost: 5, + description: 'Test Description', + category: testCategoryId + }); + expect(res.statusCode).toEqual(200); + expect(res.body.ok).toBe(true); + expect(res.body.productDB).toHaveProperty('_id'); + }); + +}) diff --git a/tests/user.test.js b/tests/user.test.js new file mode 100644 index 0000000..897e5bf --- /dev/null +++ b/tests/user.test.js @@ -0,0 +1,105 @@ +require('dotenv').config({ path: 'tests/.env' }); +const config =require('../server/config/config'); +const request = require('supertest'); +const app = require('../server/server'); +const mongoose = require('mongoose'); + +let token; +describe('User API Tests... ', () => { + + beforeAll(async (done) => { + await mongoose.connect(config.urlDB, { useNewUrlParser: true, useCreateIndex: true }, (err) => { + if (err) { + console.error(err); + process.exit(1); + } + done(); + }); + }); + + + beforeAll((done) => { + request(app) + .post('/login') + .send({ + email: process.env.TEST_EMAIL, + password: process.env.TEST_PASSWORD, + }) + .end((err, response) => { + token = response.body.token; // save the token! + done(); + }); + }); + + test('should return status 401 Invalid token', async () => { + const res = await request(app).get('/users'); + expect(res.statusCode).toEqual(401); + }); + + test('should return status 200 with a valid token', async () => { + return request(app) + .get('/users') + .set('token', token) + .then((response) => { + expect(response.statusCode).toBe(200); + expect(response.type).toBe('application/json'); + }); + }); + + test('should return users', async () => { + return request(app) + .get('/users') + .set('token', token) + .then((response) => { + expect(response.body.Users).toBeGreaterThan(0); + expect(response.type).toBe('application/json'); + }); + }); + + test('should create a new user', async () => { + const res = await request(app) + .post('/user') + .send({ + name: 'Test', + surnames: 'User', + email: 'test.user@example.com', + password: 'password123', + address: '{}', + creditCard: '{}', + mobilePhone: '1234567890' + }); + expect(res.statusCode).toEqual(201); + expect(res.body.ok).toBe(true); + expect(res.body.usuario).toHaveProperty('_id'); + }); + + test('should update a user', async () => { + const newUser = await request(app) + .post('/user') + .send({ + name: 'Test', + surnames: 'User', + email: 'test.user.to.update@example.com', + password: 'password123', + address: '{}', + creditCard: '{}', + mobilePhone: '1234567890' + }); + + const userId = newUser.body.usuario._id; + + const res = await request(app) + .put(`/user/${userId}`) + .set('token', token) + .send({ + name: 'Updated Test User' + }); + expect(res.statusCode).toEqual(201); + expect(res.body.ok).toBe(true); + expect(res.body.user.name).toBe('Updated Test User'); + }); + + afterAll(() => { + mongoose.connection.close(); + }); +})