From 12c50f3c630601dad8c6c441a8dfb4821e22d2c2 Mon Sep 17 00:00:00 2001 From: habinezadalvan Date: Tue, 20 Aug 2019 17:40:04 +0200 Subject: [PATCH] bug(fixing create article mocking tests):Only cloudinary function is mocked instead of the whole creating article route [Finishes #168000401] --- src/controllers/articles.controller.js | 13 +++----- src/helpers/cloudinaryHelper.js | 11 +++++++ src/middlewares/fakecloud.js | 9 ------ .../validators/socialLogin-mock.js | 2 -- .../20190813125249-create-article.js | 3 -- src/models/article.js | 1 - src/routes/api/article/article.routes.js | 3 -- src/routes/index.js | 2 -- src/seeders/20190814094408-demo-article.js | 1 - test/mock/mock.cloud.js | 30 ------------------- test/test.articles.js | 2 -- 11 files changed, 15 insertions(+), 62 deletions(-) create mode 100644 src/helpers/cloudinaryHelper.js delete mode 100644 src/middlewares/fakecloud.js delete mode 100644 test/mock/mock.cloud.js diff --git a/src/controllers/articles.controller.js b/src/controllers/articles.controller.js index b815a2f..6bed399 100644 --- a/src/controllers/articles.controller.js +++ b/src/controllers/articles.controller.js @@ -1,10 +1,11 @@ import 'dotenv/config'; import slug from 'slug'; import uniqid from 'uniqid'; -import cloudinary from 'cloudinary'; import models from '../models'; import Userservice from '../services/user.service'; import articleService from '../services/article.service'; +import cloudinaryHelper from '../helpers/cloudinaryHelper'; + const db = models.Article; /** @@ -25,17 +26,11 @@ class Articles { static async createArticles(req, res) { const userId = req.auth.id; const findUser = await Userservice.getOneUser(userId); - let images = req.files; - images = await Promise.all( - images.map(async (file) => { - const { secure_url } = await cloudinary.v2.uploader.upload(file.path); - return secure_url; - }) - ); + const images = await cloudinaryHelper(req.files); if (findUser) { const { title } = req.body; - const tags = req.body.taglist.split(' '); + const tags = req.body.taglist ? req.body.taglist.split(' ') : []; const article = { slug: `${slug(title)}-${uniqid()}`, title, diff --git a/src/helpers/cloudinaryHelper.js b/src/helpers/cloudinaryHelper.js new file mode 100644 index 0000000..43b9cd9 --- /dev/null +++ b/src/helpers/cloudinaryHelper.js @@ -0,0 +1,11 @@ +import 'dotenv/config'; +import cloudinary from 'cloudinary'; + +export default async (images = []) => Promise.all( + images.map(async (file) => { + const { secure_url } = process.env.NODE_ENV === 'test' + ? 'image.jpg' + : await cloudinary.v2.uploader.upload(file.path); + return secure_url; + }) +); diff --git a/src/middlewares/fakecloud.js b/src/middlewares/fakecloud.js deleted file mode 100644 index 1211f3e..0000000 --- a/src/middlewares/fakecloud.js +++ /dev/null @@ -1,9 +0,0 @@ -import fakeUpload from '../../test/mock/mock.cloud'; - -const fakeCloud = (req, res, next) => { - req.auth = fakeUpload.auth; - req.body = fakeUpload.body; - req.files = fakeUpload.files; - next(); -}; -export default fakeCloud; diff --git a/src/middlewares/validators/socialLogin-mock.js b/src/middlewares/validators/socialLogin-mock.js index 561072d..8b3ae42 100644 --- a/src/middlewares/validators/socialLogin-mock.js +++ b/src/middlewares/validators/socialLogin-mock.js @@ -6,8 +6,6 @@ dotenv.config(); export const mock = (req, res, next) => { if (req.url.includes('login/')) { res.redirect(`/auth/fake?provider=${req.url.split('/')[2]}`); - } else if (req.url.includes('articles') && req.method === 'POST') { - res.redirect(307, '/fake'); } else { next(); } diff --git a/src/migrations/20190813125249-create-article.js b/src/migrations/20190813125249-create-article.js index af0bb9c..936dd9d 100644 --- a/src/migrations/20190813125249-create-article.js +++ b/src/migrations/20190813125249-create-article.js @@ -24,9 +24,6 @@ module.exports = { type: Sequelize.TEXT, allowNull: false, }, - taglist: { - type: Sequelize.ARRAY(Sequelize.STRING) - }, favorited: { type: Sequelize.BOOLEAN, allowNull: true, diff --git a/src/models/article.js b/src/models/article.js index 701606b..4f895de 100644 --- a/src/models/article.js +++ b/src/models/article.js @@ -4,7 +4,6 @@ module.exports = (sequelize, DataTypes) => { title: { type: DataTypes.STRING, allowNull: false }, description: { type: DataTypes.TEXT, allowNull: false }, body: { type: DataTypes.TEXT, allowNull: false }, - taglist: { type: DataTypes.ARRAY(DataTypes.STRING), allowNull: true }, favorited: { type: DataTypes.BOOLEAN, allowNull: true, defaultValue: false }, favoritedcount: { type: DataTypes.INTEGER, defaultValue: 0 }, flagged: { type: DataTypes.BOOLEAN, defaultValue: false }, diff --git a/src/routes/api/article/article.routes.js b/src/routes/api/article/article.routes.js index 2eebc1a..759afc0 100644 --- a/src/routes/api/article/article.routes.js +++ b/src/routes/api/article/article.routes.js @@ -4,13 +4,10 @@ import articleController from '../../../controllers/articles.controller'; import imageUpload from '../../../middlewares/multer'; import validate from '../../../middlewares/validators/general.validation'; import { schema } from '../../../middlewares/validators/schemas'; -import fakeCloud from '../../../middlewares/fakecloud'; import confirmEmailAuth from '../../../middlewares/emailVarification.middleware'; const router = express.Router(); -router.post('/fake', auth, fakeCloud, validate(schema.articleSchema), articleController.createArticles); - router.post('/articles', [auth, confirmEmailAuth], imageUpload.array('images', 10), validate(schema.articleSchema), articleController.createArticles); router.get('/articles', [auth, confirmEmailAuth], articleController.getAllArticles); diff --git a/src/routes/index.js b/src/routes/index.js index 445c596..63cc803 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -10,7 +10,6 @@ import oauth from './api/oauth/oauth.routes'; import error from '../middlewares/error.middleware'; import notfound from '../middlewares/404.middleware'; import { mock } from '../middlewares/validators/socialLogin-mock'; -import article from './api/article/article.routes'; dotenv.config(); @@ -38,7 +37,6 @@ const apiVersion = process.env.API_VERSION; const baseUrl = `/api/${apiVersion}`; router.get('/', (req, res) => res.status(200).json({ status: 200, data: 'Welcome to Authors Haven.' })); -router.use(article); router.use(baseUrl, api); router.use(oauth); diff --git a/src/seeders/20190814094408-demo-article.js b/src/seeders/20190814094408-demo-article.js index 494a958..3eda475 100644 --- a/src/seeders/20190814094408-demo-article.js +++ b/src/seeders/20190814094408-demo-article.js @@ -8,7 +8,6 @@ export default { title: 'faketitle', description: 'fakedescription', body: 'fakebody', - taglist: ['asdf', 'sdfsf'], favorited: true, favoritedcount: 12, flagged: true, diff --git a/test/mock/mock.cloud.js b/test/mock/mock.cloud.js deleted file mode 100644 index f833fcd..0000000 --- a/test/mock/mock.cloud.js +++ /dev/null @@ -1,30 +0,0 @@ -const fakeUpload = { - body: { - title: 'profile picture', - description: 'my pp', - body: 'andela', - taglist: 'andela python js\n' - }, - auth: { - id: 1, - email: 'admin@gmail.com', - role: 'admin', - verified: true, - iat: 1565868674, - exp: 1565955074 - }, - files: [ - { - fieldname: 'images', - originalname: 'Photo on 03-07-2019 at 10.26.jpg', - encoding: '7bit', - mimetype: 'image/jpeg', - destination: '/var/folders/tv/6sgpkc254kq8fcvsgdpmv6h40000gn/T', - filename: 'ae9255b86fcf8b3e650b89c400fc862e', - path: '/var/folders/tv/6sgpkc254kq8fcvsgdpmv6h40000gn/T/ae9255b86fcf8b3e650b89c400fc862e', - size: 190307 - } - ] -}; - -export default fakeUpload; diff --git a/test/test.articles.js b/test/test.articles.js index a7235ca..718796d 100644 --- a/test/test.articles.js +++ b/test/test.articles.js @@ -17,7 +17,6 @@ describe('Articles', () => { .post('/api/v1/articles') .set('Content-Type', 'application/json') .set('Authorization', usertoken) - .field('tagList', 'tag1, tag2, tag3') .attach('images', fs.readFileSync(`${__dirname}/mock/pic.jpeg`), 'pic.jpeg') .end((err, res) => { expect(res.status).to.be.deep.equal(400); @@ -34,7 +33,6 @@ describe('Articles', () => { .field('title', 'Title') .field('body', 'body field') .field('description', 'description is here') - .field('tagList', 'tag1, tag2, tag3') .attach('images', fs.readFileSync(`${__dirname}/mock/pic.jpeg`), 'pic.jpeg') .end((err, res) => { expect(res.status).to.be.deep.equal(201);