8000 Updated section 5 as per videos. · anfieldeire/testing-python-apps@76317ee · GitHub
[go: up one dir, main page]

Skip to content

Commit 76317ee

Browse files
committed
Updated section 5 as per videos.
1 parent ab4b188 commit 76317ee

File tree

8 files changed

+101
-3
lines changed

8 files changed

+101
-3
lines changed

section5/starter_code/resources/item.py

Lines changed: 0 additions & 2 deletions
8000
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from flask_restful import Resource, reqparse
2-
from flask_jwt import jwt_required
32
from models.item import ItemModel
43

54

@@ -10,7 +9,6 @@ class Item(Resource):
109
required=True,
1110
help="This field cannot be left blank!")
1211

13-
@jwt_required()
1412
def get(self, name):
1513
item = ItemModel.find_by_name(name)
1614
if item:

section5/video_code/app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from flask import Flask
44
from flask_restful import Api
55

6-
from resources.item import Item, ItemList
6+
from resources.item import Item
77

88
app = Flask(__name__)
99

section5/video_code/resources/__init__.py

Whitespace-only changes.

section5/video_code/resources/item.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
from flask_restful import Resource, reqparse
2+
from models.item import ItemModel
3+
4+
5+
class Item(Resource):
6+
parser = reqparse.RequestParser()
7+
parser.add_argument('price',
8+
type=float,
9+
required=True,
10+
help="This field cannot be left blank!")
11+
12+
def get(self, name):
13+
item = ItemModel.find_by_name(name)
14+
if item:
15+
return item.json()
16+
return {'message': 'Item not found'}, 404
17+
18+
def post(self, name):
19+
if ItemModel.find_by_name(name):
20+
return {'message': "An item with name '{}' already exists.".format(name)}, 400
21+
22+
data = Item.parser.parse_args()
23+
24+
item = ItemModel(name, **data)
25+
26+
try:
27+
item.save_to_db()
28+
except:
29+
return {"message": "An error occurred inserting the item."}, 500
30+
31+
return item.json(), 201
32+
33+
def delete(self, name):
34+
item = ItemModel.find_by_name(name)
35+
if item:
36+
item.delete_from_db()
37+
38+
return {'message': 'Item deleted'}
39+
40+
def put(self, name):
41+
data = Item.parser.parse_args()
42+
43+
item = ItemModel.find_by_name(name)
44+
45+
if item is None:
46+
item = ItemModel(name, **data)
47+
else:
48+
item.price = data['price']
49+
50+
item.save_to_db()
51+
52+
return item.json()
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""
2+
BaseTest
3+
4+
This class should be the parent class to each non-unit test.
5+
It allows for instantiation of the database dynamically
6+
and makes sure that it is a new, blank database each time.
7+
"""
8+
9+
from unittest import TestCase
10+
from app import app
11+
from db import db
12+
13+
14+
class BaseTest(TestCase):
15+
def setUp(self):
16+
# Make sure database exists
17+
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'
18+
with app.app_context():
19+
db.init_app(app)
20+
db.create_all()
21+
# Get a test client
22+
self.app = app.test_client()
23+
self.app_context = app.app_context
24+
25+
def tearDown(self):
26+
# Database is blank
27+
with app.app_context():
28+
db.session.remove()
29+
db.drop_all()

section5/video_code/tests/integration/__init__.py

Whitespace-only changes.

section5/video_code/tests/integration/models/__init__.py

Whitespace-only changes.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from models.item import ItemModel
2+
from tests.base_test import BaseTest
3+
4+
5+
class ItemTest(BaseTest):
6+
def test_crud(self):
7+
with self.app_context():
8+
item = ItemModel('test', 19.99)
9+
10+
self.assertIsNone(ItemModel.find_by_name('test'),
11+
"Found an item with name {}, but expected not to.".format(item.name))
12+
13+
item.save_to_db()
14+
15+
self.assertIsNotNone(ItemModel.find_by_name('test'))
16+
17+
item.delete_from_db()
18+
19+
self.assertIsNone(ItemModel.find_by_name('test'))

0 commit comments

Comments
 (0)
0