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

Skip to content
Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 76317ee

Browse files
committed
8000
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
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