Add REST API blog example with full CRUD and unit tests

This commit is contained in:
lowiee0812 2025-06-03 20:28:43 +08:00
parent a5f9742398
commit 6f54c4a1f6
3 changed files with 126 additions and 0 deletions

View file

@ -0,0 +1,53 @@
import unittest
from app import app
class BlogPostTestCase(unittest.TestCase):
def setUp(self):
self.client = app.test_client()
self.sample_post = {"title": "Test Post", "content": "This is a test post"}
def test_create_post_success(self):
response = self.client.post('/api/posts', json=self.sample_post)
self.assertEqual(response.status_code, 201)
def test_create_post_missing_field(self):
response = self.client.post('/api/posts', json={"title": "Only title"})
self.assertEqual(response.status_code, 400)
def test_get_all_posts(self):
self.client.post('/api/posts', json=self.sample_post)
response = self.client.get('/api/posts')
self.assertEqual(response.status_code, 200)
def test_get_single_post_success(self):
post_resp = self.client.post('/api/posts', json=self.sample_post)
post_id = post_resp.get_json()['id']
response = self.client.get(f'/api/posts/{post_id}')
self.assertEqual(response.status_code, 200)
def test_get_single_post_not_found(self):
response = self.client.get('/api/posts/999')
self.assertEqual(response.status_code, 404)
def test_update_post_success(self):
post_resp = self.client.post('/api/posts', json=self.sample_post)
post_id = post_resp.get_json()['id']
response = self.client.put(f'/api/posts/{post_id}', json={"title": "Updated"})
self.assertEqual(response.status_code, 200)
def test_update_post_not_found(self):
response = self.client.put('/api/posts/999', json={"title": "Nothing"})
self.assertEqual(response.status_code, 404)
def test_delete_post_success(self):
post_resp = self.client.post('/api/posts', json=self.sample_post)
post_id = post_resp.get_json()['id']
response = self.client.delete(f'/api/posts/{post_id}')
self.assertEqual(response.status_code, 204)
def test_delete_post_not_found(self):
response = self.client.delete('/api/posts/999')
self.assertEqual(response.status_code, 404)
if __name__ == '__main__':
unittest.main()