Upload 4.7
This commit is contained in:
@@ -2,7 +2,8 @@ module.exports = {
|
|||||||
'env': {
|
'env': {
|
||||||
'node': true,
|
'node': true,
|
||||||
'commonjs': true,
|
'commonjs': true,
|
||||||
'es2021': true
|
'es2021': true,
|
||||||
|
'jest': true
|
||||||
},
|
},
|
||||||
'extends': 'eslint:recommended',
|
'extends': 'eslint:recommended',
|
||||||
'overrides': [
|
'overrides': [
|
||||||
|
|||||||
2869
part4/bloglist/package-lock.json
generated
2869
part4/bloglist/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,7 @@
|
|||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node index.js",
|
"start": "node index.js",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1",
|
"test": "jest --verbose",
|
||||||
"dev": "nodemon index.js"
|
"dev": "nodemon index.js"
|
||||||
},
|
},
|
||||||
"author": "",
|
"author": "",
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"dotenv": "^16.1.1",
|
"dotenv": "^16.1.1",
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
|
"jest": "^29.5.0",
|
||||||
"mongoose": "^7.2.2"
|
"mongoose": "^7.2.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
58
part4/bloglist/tests/list.test.js
Normal file
58
part4/bloglist/tests/list.test.js
Normal 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 })
|
||||||
|
})
|
||||||
37
part4/bloglist/utils/list_helper.js
Normal file
37
part4/bloglist/utils/list_helper.js
Normal 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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user