From f4361d4a4973e98d2368596056f9257e1487565d Mon Sep 17 00:00:00 2001 From: "A. Urquiola" Date: Sun, 10 Sep 2023 15:13:44 +0200 Subject: [PATCH] solution 4.8: Pruebas de lista de blogs, paso 1 --- controllers/blogs.js | 2 +- models/{blogs.js => blog.js} | 0 package.json | 5 +-- tests/blog.test.js | 24 +++++++-------- tests/note_api.test.js | 59 ++++++++++++++++++++++++++++++++++++ tests/teardown.js | 3 ++ utils/list_helper.js | 8 ++--- utils/logger.js | 8 +++-- 8 files changed, 88 insertions(+), 21 deletions(-) rename models/{blogs.js => blog.js} (100%) create mode 100644 tests/note_api.test.js create mode 100644 tests/teardown.js diff --git a/controllers/blogs.js b/controllers/blogs.js index 183ec0c..2b74166 100644 --- a/controllers/blogs.js +++ b/controllers/blogs.js @@ -1,5 +1,5 @@ const blogsRouter = require('express').Router() -const Blog = require('../models/blogs') +const Blog = require('../models/blog') blogsRouter.get('/', (request, response) => { Blog.find({}).then((blogs) => { diff --git a/models/blogs.js b/models/blog.js similarity index 100% rename from models/blogs.js rename to models/blog.js diff --git a/package.json b/package.json index 40dc464..d5881e4 100644 --- a/package.json +++ b/package.json @@ -31,9 +31,10 @@ "eslint": "8.49.0", "jest": "29.6.4", "nodemon": "3.0.1", - "supertest": "6.3.3" + "supertest": "^6.3.3" }, "jest": { - "testEnvironment": "node" + "testEnvironment": "node", + "globalTeardown": "./tests/teardown.js" } } diff --git a/tests/blog.test.js b/tests/blog.test.js index 509b6d5..2f95fed 100644 --- a/tests/blog.test.js +++ b/tests/blog.test.js @@ -118,7 +118,7 @@ describe('Authors with more blogs', () => { test('lodash - with empty list', () => { const blogs = [{}] const result = listHelper.mostBlogs(blogs) - console.log(result) + // console.log(result) expect(result).toEqual({ author: undefined, entries: 1 }) }) @@ -134,13 +134,13 @@ describe('Authors with more blogs', () => { }, ] const result = listHelper.mostBlogs(blogs) - console.log(result) + // console.log(result) expect(result).toEqual({ author: 'Robert C. Martin', entries: 1 }) }) test('lodash - with big list', () => { const result = listHelper.mostBlogs(bigbloglist) - console.log(result) + // console.log(result) expect(result).toEqual({ author: 'Robert C. Martin', entries: 3 }) }) @@ -148,7 +148,7 @@ describe('Authors with more blogs', () => { test('Vanilla JS - with empty list', () => { const blogs = [{}] const result = listHelper.mostBlogsVanilla(blogs) - console.log(result) + // console.log(result) expect(result).toEqual({ author: undefined, entries: 1 }) }) @@ -164,13 +164,13 @@ describe('Authors with more blogs', () => { }, ] const result = listHelper.mostBlogsVanilla(blogs) - console.log(result) + // console.log(result) expect(result).toEqual({ author: 'Robert C. Martin', entries: 1 }) }) test('Vanilla JS - with big list', () => { const result = listHelper.mostBlogsVanilla(bigbloglist) - console.log(result) + // console.log(result) expect(result).toEqual({ author: 'Robert C. Martin', entries: 3 }) }) }) @@ -179,7 +179,7 @@ describe('Authors with more likes', () => { test('lodash - with empty list', () => { const blogs = [{}] const result = listHelper.mostLikes(blogs) - console.log(result) + // console.log(result) expect(result).toEqual({ author: undefined, likes: undefined }) }) @@ -195,13 +195,13 @@ describe('Authors with more likes', () => { }, ] const result = listHelper.mostLikes(blogs) - console.log(result) + // console.log(result) expect(result).toEqual({ author: 'Robert C. Martin', likes: 2 }) }) test('lodash - with big blog list', () => { const result = listHelper.mostLikes(bigbloglist) - console.log(result) + // console.log(result) expect(result).toEqual({ author: 'Edsger W. Dijkstra', likes: 17 }) }) @@ -209,7 +209,7 @@ describe('Authors with more likes', () => { test('VanillaJS - with empty list', () => { const blogs = [{}] const result = listHelper.mostLikesVanilla(blogs) - console.log(result) + // console.log(result) expect(result).toEqual({ author: undefined, likes: undefined }) }) @@ -225,13 +225,13 @@ describe('Authors with more likes', () => { }, ] const result = listHelper.mostLikesVanilla(blogs) - console.log(result) + // console.log(result) expect(result).toEqual({ author: 'Robert C. Martin', likes: 2 }) }) test('VanillaJS -with big blog list', () => { const result = listHelper.mostLikesVanilla(bigbloglist) - console.log(result) + // console.log(result) expect(result).toEqual({ author: 'Edsger W. Dijkstra', likes: 17 }) }) }) diff --git a/tests/note_api.test.js b/tests/note_api.test.js new file mode 100644 index 0000000..f05d49a --- /dev/null +++ b/tests/note_api.test.js @@ -0,0 +1,59 @@ +const mongoose = require('mongoose') +const supertest = require('supertest') +const app = require('../app') +const api = supertest(app) +const Blog = require('../models/blog') +const initialBlogs = [ + { + title: 'Cinco ecuaciones que cambiaron el mundo', + author: 'A. Pacheco', + url: 'https://unlibroenmimochila.blogspot.com/2018/02/cinco-ecuaciones-que-cambiaron-el-mundo.html', + likes: 2, + }, + { + title: 'El tortuoso camino de la justicia transicional', + author: 'Rafael Rojas', + url: 'https://www.librosdelcrepusculo.com.mx/2023/09/el-tortuoso-camino-de-la-justicia.html', + likes: 1, + }, +] +beforeEach(async () => { + await Blog.deleteMany({}) + let blogObject = new Blog(initialBlogs[0]) + await blogObject.save() + blogObject = new Blog(initialBlogs[1]) + await blogObject.save() +}) + +test('notes are returned as json', async () => { + await api + .get('/api/blogs') + .expect(200) + .expect('Content-Type', /application\/json/) +}, 100000) + +test('all notes are returned', async () => { + const response = await api.get('/api/blogs') + // console.log(response.body) + expect(response.body).toHaveLength(initialBlogs.length) +}) + +test('a specific note is within the returned notes', async () => { + const response = await api.get('/api/blogs') + // console.log(response.body[0]) + + const contents = response.body.map((r) => r.title) + // console.log(contents) + expect(contents).toContain('El tortuoso camino de la justicia transicional') +}) + +test('unknown endpoint in api url', async () => { + const response = await api.get('/api/blogs-url-dont-exist') + // console.log(response.body) + + expect(response.body.error).toBe('unknown endpoint') +}) + +afterAll(async () => { + await mongoose.connection.close() +}) diff --git a/tests/teardown.js b/tests/teardown.js new file mode 100644 index 0000000..6b4e8f0 --- /dev/null +++ b/tests/teardown.js @@ -0,0 +1,3 @@ +module.exports = () => { + process.exit(0) +} diff --git a/utils/list_helper.js b/utils/list_helper.js index 8c7f5db..ad9e093 100644 --- a/utils/list_helper.js +++ b/utils/list_helper.js @@ -29,7 +29,7 @@ const mostBlogs = (blogs) => { author, entries: blogs.length, })) - console.log(_.maxBy(authorEntries, 'entries')) + // console.log(_.maxBy(authorEntries, 'entries')) return _.maxBy(authorEntries, 'entries') } } @@ -47,7 +47,7 @@ const mostBlogsVanilla = (blogs) => { return result }, {}) - console.log(groupByAuthor) + // console.log(groupByAuthor) let authorMoreBlogs = '' @@ -58,7 +58,7 @@ const mostBlogsVanilla = (blogs) => { } } - console.log(authorMoreBlogs, '-', groupByAuthor[authorMoreBlogs]) + // console.log(authorMoreBlogs, '-', groupByAuthor[authorMoreBlogs]) return { author: authorMoreBlogs, entries: groupByAuthor[authorMoreBlogs], @@ -102,7 +102,7 @@ const mostLikesVanilla = (blogs) => { return result }, {}) - console.log(groupByAuthor) + // console.log(groupByAuthor) let authorMoreLikes = '' diff --git a/utils/logger.js b/utils/logger.js index 6c71d8b..adc81f6 100644 --- a/utils/logger.js +++ b/utils/logger.js @@ -1,9 +1,13 @@ const info = (...params) => { - console.log(...params) + if (process.env.NODE_ENV !== 'test') { + console.log(...params) + } } const error = (...params) => { - console.error(...params) + if (process.env.NODE_ENV !== 'test') { + console.error(...params) + } } module.exports = {