Upload 4.7

This commit is contained in:
Andrew Trieu
2023-05-31 14:44:06 +03:00
parent 15043bbd4b
commit 4dda427795
5 changed files with 2920 additions and 50 deletions

View File

@@ -2,7 +2,8 @@ module.exports = {
'env': {
'node': true,
'commonjs': true,
'es2021': true
'es2021': true,
'jest': true
},
'extends': 'eslint:recommended',
'overrides': [

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1",
"test": "jest --verbose",
"dev": "nodemon index.js"
},
"author": "",
@@ -14,6 +14,7 @@
"cors": "^2.8.5",
"dotenv": "^16.1.1",
"express": "^4.18.2",
"jest": "^29.5.0",
"mongoose": "^7.2.2"
},
"devDependencies": {

View File

@@ -0,0 +1,58 @@
const listHelper = require('../utils/list_helper')
const testBlogs = [
{
'title': 'My blog',
'author': 'Andrew',
'url': 'www.andrew.eu',
'likes': 1000,
'id': '64771b55a9c07824450982c5'
},
{
'title': 'My blog',
'author': 'Andrew',
'url': 'www.andrew.eu',
'likes': 3000,
'id': '64771b89a9c07824450982c8'
},
{
'title': 'Another blog 2',
'author': 'Hans',
'url': 'www.andrew.eu',
'likes': 5000,
'id': '64771caaa9c07824450982cb'
}
]
test('dummy returns one', () => {
const blogs = []
const result = listHelper.dummy(blogs)
expect(result).toBe(1)
})
describe('total likes', () => {
test('empty - zero', () => {
expect(listHelper.sumLikes([])).toBe(0)
})
test('one correct', () => {
expect(listHelper.sumLikes([testBlogs[0]])).toBe(1000)
})
test('sum correct', () => {
expect(listHelper.sumLikes(testBlogs)).toBe(9000)
})
})
test('favorite blog', () => {
expect(listHelper.favoriteBlog(testBlogs)).toEqual(testBlogs[2])
})
test('most blogs', () => {
expect(listHelper.mostBlogs(testBlogs)).toEqual({ author: 'Andrew', blogs: 2 })
})
test('most likes', () => {
expect(listHelper.mostLikes(testBlogs)).toEqual({ author: 'Hans', likes: 5000 })
})

View File

@@ -0,0 +1,37 @@
const dummy = (blogs) => {
return 1
}
const sumLikes = (blogs) => {
return blogs.reduce((sum, blog) => sum + blog.likes, 0)
}
const favoriteBlog = (blogs) => {
return blogs.reduce((max, blog) => max.likes > blog.likes ? max : blog)
}
const mostBlogs = (blogs) => {
const authors = blogs.map(blog => blog.author)
const uniqueAuthors = [...new Set(authors)]
const authorBlogs = uniqueAuthors.map(author => {
return { author: author, blogs: authors.filter(a => a === author).length }
})
return authorBlogs.reduce((max, author) => max.blogs > author.blogs ? max : author)
}
const mostLikes = (blogs) => {
const authors = blogs.map(blog => blog.author)
const uniqueAuthors = [...new Set(authors)]
const authorLikes = uniqueAuthors.map(author => {
return { author: author, likes: blogs.filter(blog => blog.author === author).reduce((sum, blog) => sum + blog.likes, 0) }
})
return authorLikes.reduce((max, author) => max.likes > author.likes ? max : author)
}
module.exports = {
dummy,
sumLikes,
favoriteBlog,
mostBlogs,
mostLikes
}