@@ -56,9 +56,9 @@ def test_admin_list_filters_by_status_csv(api_client, order_factory):
5656
5757
5858@pytest .mark .django_db
59- def test_admin_list_filters_by_product_id_distinct (api_client , product , order_factory ):
59+ def test_admin_list_filters_by_product_id_distinct (api_client , ticket_product , order_factory ):
6060 completed_order = order_factory (status = "completed" )
61- response = OrdersAdminApi (http_client = api_client ).list ({"product_id" : str (product .id )})
61+ response = OrdersAdminApi (http_client = api_client ).list ({"product_id" : str (ticket_product .id )})
6262 assert response .status_code == HTTP_200_OK
6363 assert response .json () == {
6464 "count" : 1 ,
@@ -69,19 +69,19 @@ def test_admin_list_filters_by_product_id_distinct(api_client, product, order_fa
6969
7070
7171@pytest .mark .django_db
72- def test_admin_list_filters_by_active_opr_category (api_client , product , order_factory ):
72+ def test_admin_list_filters_by_active_opr_category (api_client , ticket_product , order_factory ):
7373 """`?category_id=` 가 active OPR 가 있는 주문만 매칭한다."""
7474 completed_order = order_factory (status = "completed" )
75- response = OrdersAdminApi (http_client = api_client ).list ({"category_id" : str (product .category_id )})
75+ response = OrdersAdminApi (http_client = api_client ).list ({"category_id" : str (ticket_product .category_id )})
7676 assert response .status_code == HTTP_200_OK
7777 assert {row ["id" ] for row in response .json ()["results" ]} == {str (completed_order .id )}
7878
7979
8080@pytest .mark .django_db
81- def test_admin_list_filters_by_active_opr_category_group (api_client , product , order_factory ):
81+ def test_admin_list_filters_by_active_opr_category_group (api_client , ticket_product , order_factory ):
8282 """`?category_group_id=` 가 active OPR 가 있는 주문만 매칭한다."""
8383 completed_order = order_factory (status = "completed" )
84- response = OrdersAdminApi (http_client = api_client ).list ({"category_group_id" : str (product .category .group_id )})
84+ response = OrdersAdminApi (http_client = api_client ).list ({"category_group_id" : str (ticket_product .category .group_id )})
8585 assert response .status_code == HTTP_200_OK
8686 assert {row ["id" ] for row in response .json ()["results" ]} == {str (completed_order .id )}
8787
@@ -123,12 +123,15 @@ def test_admin_refund_action_rejects_missing_totp(api_client, mock_portone_req_c
123123
124124@pytest .mark .django_db
125125def test_admin_refund_product_action_does_partial_refund (
126- api_client , product , mock_portone_req_cancel_payment , order_factory
126+ api_client , ticket_product , mock_portone_req_cancel_payment , order_factory
127127):
128128 completed_order = order_factory (status = "completed" )
129129 target_opr = completed_order .products .first ()
130130 OrderProductRelation .objects .create (
131- order = completed_order , product = product , price = product .price , status = OrderProductRelation .OrderProductStatus .paid
131+ order = completed_order ,
132+ product = ticket_product ,
133+ price = ticket_product .price ,
134+ status = OrderProductRelation .OrderProductStatus .paid ,
132135 )
133136 response = OrdersAdminApi (http_client = api_client ).refund_product (
134137 completed_order .id , target_opr .id , totp = valid_refund_totp ()
@@ -152,17 +155,17 @@ def test_admin_refund_product_action_returns_404_for_unknown_rel(api_client, ord
152155@pytest .mark .django_db
153156def test_admin_refund_allows_expired_window (api_client , mock_portone_req_cancel_payment , order_factory ):
154157 completed_order = order_factory (status = "completed" )
155- product = completed_order .products .first ().product
156- product .refundable_ends_at = datetime (2020 , 1 , 1 , tzinfo = timezone .utc )
157- product .save ()
158+ ticket_product = completed_order .products .first ().product
159+ ticket_product .refundable_ends_at = datetime (2020 , 1 , 1 , tzinfo = timezone .utc )
160+ ticket_product .save ()
158161
159162 response = OrdersAdminApi (http_client = api_client ).refund (completed_order .id , totp = valid_refund_totp ())
160163 assert response .status_code == HTTP_204_NO_CONTENT
161164
162165
163166@pytest .mark .django_db
164- def test_admin_import_template_returns_csv (api_client , product ):
165- response = OrdersAdminApi (http_client = api_client ).import_template (product_id = str (product .id ))
167+ def test_admin_import_template_returns_csv (api_client , ticket_product ):
168+ response = OrdersAdminApi (http_client = api_client ).import_template (product_id = str (ticket_product .id ))
166169 assert response .status_code == HTTP_200_OK
167170 assert "text/csv" in response .headers ["Content-Type" ]
168171
@@ -186,15 +189,15 @@ def _csv_file(rows: str) -> BytesIO:
186189
187190
188191@pytest .mark .django_db
189- def test_admin_import_csv_persists_paid_order_from_uploaded_row (api_client , customer_user , product ):
192+ def test_admin_import_csv_persists_paid_order_from_uploaded_row (api_client , customer_user , ticket_product ):
190193 response = OrdersAdminApi (http_client = api_client ).import_csv (
191194 csv_file = _csv_file (
192195 "name,phone,email,organization,product_id,donation_price\n "
193- f"홍길동,010-1234-5678,{ customer_user .email } ,,{ product .id } ,0\n "
196+ f"홍길동,010-1234-5678,{ customer_user .email } ,,{ ticket_product .id } ,0\n "
194197 )
195198 )
196199 assert response .status_code == HTTP_201_CREATED
197- opr = OrderProductRelation .objects .get (product = product )
200+ opr = OrderProductRelation .objects .get (product = ticket_product )
198201 assert opr .status == OrderProductRelation .OrderProductStatus .paid
199202 assert opr .order .user == customer_user
200203
@@ -206,12 +209,12 @@ def test_admin_import_csv_rejects_missing_file(api_client):
206209
207210
208211@pytest .mark .django_db
209- def test_admin_import_csv_returns_400_for_invalid_rows_without_persisting (api_client , product ):
212+ def test_admin_import_csv_returns_400_for_invalid_rows_without_persisting (api_client , ticket_product ):
210213 # email 매칭되는 user 부재 → 모든 row validate 실패 → atomic rollback.
211214 response = OrdersAdminApi (http_client = api_client ).import_csv (
212215 csv_file = _csv_file (
213216 "name,phone,email,organization,product_id,donation_price\n "
214- f"홍길동,010-1234-5678,nobody@example.com,,{ product .id } ,0\n "
217+ f"홍길동,010-1234-5678,nobody@example.com,,{ ticket_product .id } ,0\n "
215218 )
216219 )
217220 assert response .status_code == HTTP_400_BAD_REQUEST
@@ -222,11 +225,11 @@ def test_admin_import_csv_returns_400_for_invalid_rows_without_persisting(api_cl
222225@freeze_time (datetime (2026 , 5 , 23 , 15 , 30 , 45 , tzinfo = timezone .utc ))
223226@pytest .mark .django_db
224227def test_admin_export_returns_xlsx_filtering_refunded_per_include_flag (
225- api_client , customer_user , product , include_refunded , order_factory
228+ api_client , customer_user , ticket_product , include_refunded , order_factory
226229):
227230 refunded_order = order_factory (status = "refunded" )
228231 response = OrdersAdminApi (http_client = api_client ).export (
229- {"product_ids" : [str (product .id )], "include_refunded" : include_refunded }
232+ {"product_ids" : [str (ticket_product .id )], "include_refunded" : include_refunded }
230233 )
231234 assert response .status_code == HTTP_200_OK
232235 assert response .headers ["Content-Type" ] == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
@@ -272,8 +275,8 @@ def test_admin_export_returns_xlsx_filtering_refunded_per_include_flag(
272275 assert df_dict ["주문상품" ].to_dict (orient = "records" ) == [
273276 {
274277 "주문 번호" : str (refunded_order .id ),
275- "상품 ID" : str (product .id ),
276- "상품명" : product .name ,
278+ "상품 ID" : str (ticket_product .id ),
279+ "상품명" : ticket_product .name ,
277280 "상태" : "refunded" ,
278281 "결제 금액" : opr .price ,
279282 "추가 기부액" : opr .donation_price ,
@@ -314,14 +317,17 @@ def test_admin_partial_update_creates_customer_info_when_missing(api_client, ord
314317
315318
316319@pytest .mark .django_db
317- def test_admin_list_filters_by_user_id (api_client , customer_user , other_user , product , order_factory ):
320+ def test_admin_list_filters_by_user_id (api_client , customer_user , other_user , ticket_product , order_factory ):
318321 completed_order = order_factory (status = "completed" )
319322 other_order = Order .objects .create (user = other_user , name = "other" )
320323 OrderProductRelation .objects .create (
321- order = other_order , product = product , price = product .price , status = OrderProductRelation .OrderProductStatus .paid
324+ order = other_order ,
325+ product = ticket_product ,
326+ price = ticket_product .price ,
327+ status = OrderProductRelation .OrderProductStatus .paid ,
322328 )
323329 PaymentHistory .objects .create (
324- order = other_order , imp_id = "imp_o" , status = PaymentHistoryStatus .completed , price = product .price
330+ order = other_order , imp_id = "imp_o" , status = PaymentHistoryStatus .completed , price = ticket_product .price
325331 )
326332
327333 response = OrdersAdminApi (http_client = api_client ).list ({"user_id" : str (customer_user .id )})
0 commit comments