Skip to content
You signed in with another tab or window. Reload to refresh your session.
You signed out in another tab or window. Reload to refresh your session.
You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
File tree Expand file tree Collapse file tree 8 files changed +101
-3
lines changed Expand file tree Collapse file tree 8 files changed +101
-3
lines changed Original file line number Diff line number Diff line change 1
1
from flask_restful import Resource , reqparse
2
- from flask_jwt import jwt_required
3
2
from models .item import ItemModel
4
3
5
4
@@ -10,7 +9,6 @@ class Item(Resource):
10
9
required = True ,
11
10
help = "This field cannot be left blank!" )
12
11
13
- @jwt_required ()
14
12
def get (self , name ):
15
13
item = ItemModel .find_by_name (name )
16
14
if item :
Original file line number Diff line number Diff line change 3
3
from flask import Flask
4
4
from flask_restful import Api
5
5
6
- from resources .item import Item , ItemList
6
+ from resources .item import Item
7
7
8
8
app = Flask (__name__ )
9
9
Original file line number Diff line number Diff line change
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 ()
Original file line number Diff line number Diff line change
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 ()
Original file line number Diff line number Diff line change
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' ))
You can’t perform that action at this time.
0 commit comments