Skip to content

Commit 1e4a4fb

Browse files
committed
orders test case added
1 parent 739acfd commit 1e4a4fb

2 files changed

Lines changed: 97 additions & 3 deletions

File tree

items/tests.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import jwt
33
from django.test import TestCase, Client
44
from django.core.cache import cache
5-
65
from my_settings import SECRET_KEY, ALGORITHM
76
from items.models import Item, Category, Review
87
from users.models import User

orders/tests.py

Lines changed: 97 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,98 @@
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

Comments
 (0)