diff --git a/part4/bloglist/controllers/blogs.js b/part4/bloglist/controllers/blogs.js index 3f6123d..c100603 100644 --- a/part4/bloglist/controllers/blogs.js +++ b/part4/bloglist/controllers/blogs.js @@ -31,4 +31,17 @@ blogsRouter.delete('/:id', async (request, response) => { response.status(204).end() }) +blogsRouter.put('/:id', async (request, response) => { + const body = request.body + + const blog = await Blog.findByIdAndUpdate(request.params.id, { + title: body.title, + author: body.author, + url: body.url, + likes: body.likes + }, { new: true }) + + response.status(200).json(blog) +}) + module.exports = blogsRouter \ No newline at end of file diff --git a/part4/bloglist/requests/update_blog.rest b/part4/bloglist/requests/update_blog.rest new file mode 100644 index 0000000..a5ea610 --- /dev/null +++ b/part4/bloglist/requests/update_blog.rest @@ -0,0 +1,7 @@ +PUT http://localhost:3001/api/blogs/6477906c6320872422793b7a +content-type: application/json + +{ + "title": "Updated blog", "author": "Hans", "url": "www.andrew.eu", "likes": 5000 + +} \ No newline at end of file diff --git a/part4/bloglist/tests/blog_api.test.js b/part4/bloglist/tests/blog_api.test.js index ce909e2..5c24e25 100644 --- a/part4/bloglist/tests/blog_api.test.js +++ b/part4/bloglist/tests/blog_api.test.js @@ -84,6 +84,40 @@ describe('adding blog', () => { }) }) +describe('deleting blog', () => { + test('a blog can be deleted', async () => { + const blogsAtStart = await helper.blogsInDb() + const blogToDelete = blogsAtStart[0] + + await api.delete(`/api/blogs/${blogToDelete.id}`).expect(204) + + const blogsAtEnd = await helper.blogsInDb() + expect(blogsAtEnd).toHaveLength(helper.initialBlogs.length - 1) + const contents = blogsAtEnd.map((r) => r.title) + expect(contents).not.toContain(blogToDelete.title) + }) +}) + +describe('updating blog', () => { + test('a blog can be updated', async () => { + const blogsAtStart = await helper.blogsInDb() + const blogToUpdate = blogsAtStart[0] + + const newBlog = { + title: 'Updated blog', + author: blogToUpdate.author, + url: blogToUpdate.url, + likes: blogToUpdate.likes + } + + await api.put(`/api/blogs/${blogToUpdate.id}`).send(newBlog).expect(200) + + const blogsAtEnd = await helper.blogsInDb() + expect(blogsAtEnd).toHaveLength(helper.initialBlogs.length) + const contents = blogsAtEnd.map((r) => r.title) + expect(contents).toContain('Updated blog') + }) +}) describe('blog id check', () => { test('blog id is defined', async () => {