Skip to content

Commit 2eb2590

Browse files
authored
Merge pull request #2 from willismax/codex/create-test-module-for-flask-api
Add tasks API pytest
2 parents fa31e5b + 82b3942 commit 2eb2590

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

07.Pytest-DEMO/test_tasks_api.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import json
2+
import pytest
3+
4+
try:
5+
from flask import Flask, jsonify, request
6+
except ModuleNotFoundError:
7+
Flask = None
8+
9+
10+
@pytest.fixture
11+
def app():
12+
if Flask is None:
13+
pytest.skip("Flask not installed")
14+
app = Flask(__name__)
15+
app.config['TESTING'] = True
16+
tasks = [
17+
{'id': 1, 'title': 'existing task'}
18+
]
19+
20+
@app.route('/tasks', methods=['GET'])
21+
def list_tasks():
22+
return jsonify(tasks)
23+
24+
@app.route('/tasks', methods=['POST'])
25+
def add_task():
26+
task = request.json
27+
tasks.append(task)
28+
return jsonify(task), 201
29+
30+
@app.route('/tasks/<int:task_id>', methods=['GET'])
31+
def get_task(task_id):
32+
for task in tasks:
33+
if task['id'] == task_id:
34+
return jsonify(task)
35+
return jsonify({'message': 'task not found'}), 404
36+
37+
@app.route('/tasks/<int:task_id>', methods=['DELETE'])
38+
def delete_task(task_id):
39+
for i, task in enumerate(tasks):
40+
if task['id'] == task_id:
41+
tasks.pop(i)
42+
return jsonify({'message': 'task deleted'})
43+
return jsonify({'message': 'task not found'}), 404
44+
45+
return app
46+
47+
48+
@pytest.fixture
49+
def client(app):
50+
return app.test_client()
51+
52+
53+
def test_get_tasks(client):
54+
resp = client.get('/tasks')
55+
assert resp.status_code == 200
56+
data = resp.get_json()
57+
assert isinstance(data, list)
58+
assert len(data) == 1
59+
60+
61+
def test_add_task(client):
62+
new_task = {'id': 2, 'title': 'new task'}
63+
resp = client.post('/tasks', json=new_task)
64+
assert resp.status_code == 201
65+
assert resp.get_json() == new_task
66+
67+
resp = client.get('/tasks/2')
68+
assert resp.status_code == 200
69+
assert resp.get_json() == new_task
70+
71+
resp = client.delete('/tasks/2')
72+
assert resp.status_code == 200
73+
assert resp.get_json()['message'] == 'task deleted'
74+
75+
resp = client.get('/tasks/2')
76+
assert resp.status_code == 404

0 commit comments

Comments
 (0)