1- from django .test import TestCase
1+ import json
2+ import jwt
3+ import uuid
4+ from django .test import TestCase , Client
5+ from my_settings import SECRET_KEY , ALGORITHM
6+ from users .models import User
7+ from items .models import Item , Category
8+ from carts .models import Cart
9+ from .models import Order , OrderItem , OrderStatus
210
3- # Create your tests here.
11+ class OrderTest (TestCase ):
12+ def setUp (self ):
13+ self .client = Client ()
14+
15+ self .user = User .objects .create (
16+ name = '홍길동' ,
17+ email = 'test@test.com' ,
18+ password = '12345678'
19+ )
20+ self .category = Category .objects .create (name = 'test_cat' , thumbnail = 'test.jpg' )
21+ self .item = Item .objects .create (
22+ name = '테스트 상품' ,
23+ price = 1000 ,
24+ quantity = 10 ,
25+ category = self .category
26+ )
27+
28+ OrderStatus .objects .create (id = 1 , status = 'PENDING' )
29+ OrderStatus .objects .create (id = 2 , status = 'COMPLETED' )
30+ OrderStatus .objects .create (id = 3 , status = 'DECLINED' )
31+
32+ self .token = jwt .encode ({'id' : self .user .id }, SECRET_KEY , ALGORITHM )
33+ self .headers = {'HTTP_AUTHORIZATION' : self .token }
34+
35+ def test_order_post_success (self ):
36+ Cart .objects .create (user = self .user , item = self .item , quantity = 2 )
37+
38+ data = {'address' : '서울시 강남구' }
39+ response = self .client .post (
40+ '/orders/' ,
41+ data = json .dumps (data ),
42+ content_type = 'application/json' ,
43+ ** self .headers
44+ )
45+
46+ self .assertEqual (response .status_code , 201 )
47+ self .assertEqual (response .json ()['MESSAGE' ], 'ORDER_RESERVED' )
48+
49+ self .item .refresh_from_db ()
50+ self .assertEqual (self .item .quantity , 8 )
51+ self .assertFalse (Cart .objects .filter (user = self .user ).exists ())
52+
53+ def test_order_post_empty_cart_error (self ):
54+ data = {'address' : '서울시 강남구' }
55+ response = self .client .post (
56+ '/orders/' ,
57+ data = json .dumps (data ),
58+ content_type = 'application/json' ,
59+ ** self .headers
60+ )
61+
62+ self .assertEqual (response .status_code , 400 )
63+ self .assertEqual (response .json ()['MESSAGE' ], 'EMPTY_CART' )
64+
65+ def test_order_post_insufficient_stock_error (self ):
66+ Cart .objects .create (user = self .user , item = self .item , quantity = 20 )
67+
68+ data = {'address' : '서울시 강남구' }
69+ response = self .client .post (
70+ '/orders/' ,
71+ data = json .dumps (data ),
72+ content_type = 'application/json' ,
73+ ** self .headers
74+ )
75+
76+ self .assertEqual (response .status_code , 400 )
77+ self .assertIn ('INSUFFICIENT_STOCK' , response .json ()['ERROR' ])
78+
79+ def test_order_get_success (self ):
80+ order = Order .objects .create (
81+ user = self .user ,
82+ address = '서울시 강남구' ,
83+ order_number = str (uuid .uuid4 ()),
84+ order_status_id = 1
85+ )
86+ OrderItem .objects .create (order = order , item = self .item , quantity = 1 )
87+
88+ response = self .client .get (f'/orders/{ order .id } /' , ** self .headers )
89+
90+ self .assertEqual (response .status_code , 200 )
91+ self .assertEqual (response .json ()['RESULT' ]['address' ], '서울시 강남구' )
92+ self .assertEqual (response .json ()['RESULT' ]['total_price' ], 1000.0 )
93+
94+ def test_order_get_not_found_error (self ):
95+ response = self .client .get ('/orders/999/' , ** self .headers )
96+
97+ self .assertEqual (response .status_code , 404 )
98+ self .assertEqual (response .json ()['MESSAGE' ], 'ORDER_NOT_FOUND' )
0 commit comments