
    A
i.                        d Z ddlZddlmc mZ ddlZddlZddl	m	Z	m
Z
 ddlmZ ddlmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZmZ ddlmZ ej>                  d        Z ejB                  jD                  d        Z#ejB                  jD                  d        Z$ejB                  jD                  d        Z%e&dk(  r ejN                  e(dg       yy)u   
采购订单保留测试
验证：一旦订单进入待采购列表，即使状态变化也不会被删除，只会更新字段
    N)datetime	timedelta)Decimal)AsyncSessioncreate_async_engineasync_sessionmaker)select)Base)RawOrder)ProductMasterProductSourceMapping)ProcurementOrderProcurementStatus)ProcurementOrderServiceV2c                   K   t        dd      } | j                         4 d{   }|j                  t        j                  j
                         d{    ddd      d{    t        | d      } |       4 d{   }| ddd      d{    | j                          d{    y7 7 a7 S# 1 d{  7  sw Y   cxY w7 M7 :# 1 d{  7  sw Y   JxY w7 9w)u   创建测试数据库zsqlite+aiosqlite:///:memory:F)echoN)expire_on_commit)r   beginrun_syncr
   metadata
create_allr   dispose)engineconnasync_sessionsessions       l   /Users/jinjunqian/PycharmProjects/订单处理新版/ordersys/backend/tests/test_procurement_preservation.pytest_dbr      s      !!?eLF||~~mmDMM44555 ~ 'vFM'  ..
 5 ~~~
  s   "C+B5C+-B;B7B;C+%B9&C+CC+CC+CC+/C)0C+7B;9C+;CCC	C+C+C&CC&"C+c                 n  K   t        dddddddt        d      t        d      t        j                         t	        d	      z
  d
dddd      }| j                  |       | j                          d{    |j                  }t        ddddddddt        d      dd      }| j                  |       | j                          d{    t        |j                  |      }| j                  |       | j                          d{    t               }|j                  | d       d{   }|d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
d d!|
iz  }t!        t        j"                  |            dx}x}	}|d"   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
d d!|
iz  }t!        t        j"                  |            dx}x}	}| j%                  t'        t(              j+                  t(        j,                  |k(               d{   }|j/                         }d}	||	u}|st        j                  d#|fd$||	f      d%t1        j2                         v st        j4                  |      rt        j                  |      nd%t        j                  |	      d&z  }d'd(|iz  }t!        t        j"                  |            dx}}	|j,                  }||k(  }|st        j                  d|fd)||f      d%t1        j2                         v st        j4                  |      rt        j                  |      nd%t        j                  |      d*t1        j2                         v st        j4                  |      rt        j                  |      nd*d+z  }
d d!|
iz  }t!        t        j"                  |            dx}}|j6                  }d
}||k(  }|st        j                  d|fd,||f      d%t1        j2                         v st        j4                  |      rt        j                  |      nd%t        j                  |      t        j                  |      d-z  }d.d/|iz  }t!        t        j"                  |            dx}x}}|j8                  }t:        j<                  }||k(  }|st        j                  d|fd0||f      d%t1        j2                         v st        j4                  |      rt        j                  |      nd%t        j                  |      d1t1        j2                         v st        j4                  t:              rt        j                  t:              nd1t        j                  |      d2z  }d3d4|iz  }t!        t        j"                  |            dx}x}}|j                  }d5|_        | j                          d{    |j                  | d       d{   }|d   }d6}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
d d!|
iz  }t!        t        j"                  |            dx}x}	}|d7   }d6}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
d d!|
iz  }t!        t        j"                  |            dx}x}	}|d"   }d6}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
d d!|
iz  }t!        t        j"                  |            dx}x}	}| j%                  t'        t(              j+                  t(        j,                  |k(               d{   }|j/                         }d}	||	u}|st        j                  d#|fd$||	f      d%t1        j2                         v st        j4                  |      rt        j                  |      nd%t        j                  |	      d&z  }d'd(|iz  }t!        t        j"                  |            dx}}	|j                  }||k(  }|st        j                  d|fd8||f      d%t1        j2                         v st        j4                  |      rt        j                  |      nd%t        j                  |      d9t1        j2                         v st        j4                  |      rt        j                  |      nd9d+z  }
d d!|
iz  }t!        t        j"                  |            dx}}|j6                  }d5}||k(  }|st        j                  d|fd,||f      d%t1        j2                         v st        j4                  |      rt        j                  |      nd%t        j                  |      t        j                  |      d-z  }d.d/|iz  }t!        t        j"                  |            dx}x}}|j8                  }t:        j<                  }||k(  }|st        j                  d|fd0||f      d%t1        j2                         v st        j4                  |      rt        j                  |      nd%t        j                  |      d1t1        j2                         v st        j4                  t:              rt        j                  t:              nd1t        j                  |      d2z  }d3d4|iz  }t!        t        j"                  |            dx}x}}y7 +7 
7 
7 
{7 	87 7 k7 w):u   
    测试场景：订单初始状态为"已付款"进入待采购列表，
    后来更新为"交易成功"（不满足筛选条件），
    但订单仍应保留在待采购列表中
    ztest_order_001.xlsxhash001   z	ORDER-001u.   Tods女款蓝色鳄鱼压纹麻花扣乐福鞋u   颜色:蓝色;尺寸:37码z1200.00   days	   已付款   正常   小王国美妆u	   VIP客户zhttp://example.com/image.jpg	file_name	file_hashrow_idx   原始订单编号   线上宝贝名称   线上销售属性   数量   订单单价   订单金额   付款时间   交易状态   退款状态   网店名称   卖家备注   图片Ntods_blue_37TodszTODS-001u   蓝色u   37码NYF2   sku_key   品牌   货号   颜色   尺寸r-   r.   procurement_method	avg_price	is_urgentpriority_scoreproduct_master_idraw_order_idforce_rebuildcreated_orders==z%(py1)s == %(py4)spy1py4assert %(py6)spy6processed_ordersis notz%(py0)s is not %(py3)sprocurement_orderpy0py3assert %(py5)spy5)z9%(py2)s
{%(py2)s = %(py0)s.original_order_id
} == %(py4)srH   rZ   py2rQ   u4   %(py2)s
{%(py2)s = %(py0)s.交易状态
} == %(py5)srZ   r_   r]   assert %(py7)spy7zW%(py2)s
{%(py2)s = %(py0)s.procurement_status
} == %(py6)s
{%(py6)s = %(py4)s.PENDING
}r   rZ   r_   rQ   rS   assert %(py8)spy8   交易成功r   updated_ordersz*%(py2)s
{%(py2)s = %(py0)s.id
} == %(py4)sinitial_procurement_id)r   r   r   nowr   addflushidr   r   commitr   generate_procurement_orders
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationexecuter	   r   whereoriginal_order_id
scalar_one@py_builtinslocals_should_repr_global_namer3   procurement_statusr   PENDING)r   	raw_orderrH   productmappingserviceresult1@py_assert0@py_assert3@py_assert2@py_format5@py_format7procurement_resultrX   @py_assert1@py_format4@py_format6@py_assert4@py_format8@py_assert5@py_format9rk   result2count_results                           r   4test_procurement_order_preserved_after_status_changer   %   s     '&K7Y'Y'\\^iQ&77 & -I" KK	
--/<<L K7)$G KK
--/ #!**!G KK
..
 ()G77u7UUG #$))$))))$)))$))))))))))%&+!+&!++++&!+++&+++!+++++++  ' &&'7'I'I\'YZ   +557$((D((((D((((((((((((D(((((((..>.,>>>>.,>>>>>>>>>>>>.>>>>>>,>>>,>>>>>>>))8[8)[8888)[888888888888)888[8888888//L3D3L3LL/3LLLLL/3LLLLLLLLLLLLL/LLLLLL3DLLL3DLLL3LLLLLLLL.11 ,I
..
 77u7UUG
 #$))$))))$)))$))))))))))#$))$))))$)))$))))))))))%&+!+&!++++&!+++&+++!+++++++ ! &&'7'I'I\'YZ L %//1$((D((((D((((((((((((D(((((((9#99999#9999999999999999999#9999#99999999));^;)^;;;;)^;;;;;;;;;;;;);;;^;;;;;;;//L3D3L3LL/3LLLLL/3LLLLLLLLLLLLL/LLLLLL3DLLL3DLLL3LLLLLLLLS $   V  Vs   A0n52n3An5n ?n5n#$n5+n&,En51n)2N7n5)n,*n5n/Gn5
n2Nn5 n5#n5&n5)n5,n5/n52n5c                 2  K   t        dddddddt        d      t        d      t        j                         t	        d	      z
  d
dddd      }| j                  |       | j                          d{    |j                  }t        ddddddddt        d      dd      }| j                  |       | j                          d{    t        |j                  |      }| j                  |       | j                          d{    t               }|j                  | d       d{   }|d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
d d!|
iz  }t!        t        j"                  |            dx}x}	}| j%                  t'        t(              j+                  t(        j,                  |k(               d{   }|j/                         }|j                  }|j0                  }t        d"      |_        t        d"      |_        d#|_        | j                          d{    |j                  | d$       d{   }|d%   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
d d!|
iz  }t!        t        j"                  |            dx}x}	}|d&   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
d d!|
iz  }t!        t        j"                  |            dx}x}	}| j%                  t'        t(              j+                  t(        j,                  |k(               d{   }|j/                         }d}	||	u}|st        j                  d'|fd(||	f      d)t7        j8                         v st        j:                  |      rt        j                  |      nd)t        j                  |	      d*z  }d+d,|iz  }t!        t        j"                  |            dx}}	|j                  }||k(  }|st        j                  d|fd-||f      d)t7        j8                         v st        j:                  |      rt        j                  |      nd)t        j                  |      d.t7        j8                         v st        j:                  |      rt        j                  |      nd.d/z  }
d d!|
iz  }t!        t        j"                  |            dx}}|j0                  }d"}t        |      }||k(  }|s
t        j                  d|fd0||f      d)t7        j8                         v st        j:                  |      rt        j                  |      nd)t        j                  |      d1t7        j8                         v st        j:                  t              rt        j                  t              nd1t        j                  |      t        j                  |      d2z  }d3d4|iz  }t!        t        j"                  |            dx}x}x}}|j4                  }d#}||k(  }|st        j                  d|fd5||f      d)t7        j8                         v st        j:                  |      rt        j                  |      nd)t        j                  |      t        j                  |      d6z  }d7d8|iz  }t!        t        j"                  |            dx}x}}|j<                  }t>        j@                  }||k(  }|st        j                  d|fd9||f      d)t7        j8                         v st        j:                  |      rt        j                  |      nd)t        j                  |      d:t7        j8                         v st        j:                  t>              rt        j                  t>              nd:t        j                  |      d;z  }d<d=|iz  }t!        t        j"                  |            dx}x}}y7 7 7 7 ]7 7 67 7 ۭw)>uq   
    测试场景：使用 force_rebuild=True 时，
    现有的采购订单应该被更新而不是删除
    ztest_order_002.xlsxhash002r!   z	ORDER-002u   MaxMara女款黑色羊毛大衣u   颜色:黑色;尺寸:40码z3500.00   r#   r%   r&   r'    zhttp://example.com/image2.jpgr(   Nmaxmara_black_40MaxMarazMM-001u   黑色u   40码LAF<   r<   rF   rI   rK   rL   rN   rO   rR   rS   z3200.00u   已更新备注TrT   ri   rU   rW   rX   rY   r\   r]   rj   
initial_idr^   )uR   %(py2)s
{%(py2)s = %(py0)s.订单金额
} == %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}r   )rZ   r_   rQ   rS   rg   zassert %(py10)spy10u4   %(py2)s
{%(py2)s = %(py0)s.卖家备注
} == %(py5)sra   rb   rc   rd   r   re   rf   rg   )!r   r   r   rl   r   rm   rn   ro   r   r   rp   r   rq   rr   rs   rt   ru   rv   rw   r	   r   rx   ry   rz   r1   r0   r6   r{   r|   r}   r~   r   r   )r   r   rH   r   r   r   r   r   r   r   r   r   r   rX   r   initial_amountr   r   r   r   r   @py_assert7r   @py_format11r   r   s                             r   +test_procurement_order_update_on_generationr      s     '&<7Y'Y'\\^iQ&77 &.I" KK	
--/<<L "<7)$G KK
--/ #!**!G KK
..
 ()G77u7UUG#$))$))))$)))$))))))))))  ' &&'7'I'I\'YZ   +557"%%J&33N %Y/I$Y/I.I
..
 77t7TTG %&+!+&!++++&!+++&+++!+++++++#$))$))))$)))$))))))))))  ' &&'7'I'I\'YZ   +557$((D((((D((((((((((((D(((((((-:----:------------------:---:-------))?Y?WY-??)-?????)-?????????????)??????W???W???Y???-????????))>->>)->>>>>)->>>>>>>>>>>>>)>>>->>>>>>>>//L3D3L3LL/3LLLLL/3LLLLLLLLLLLLL/LLLLLL3DLLL3DLLL3LLLLLLLLE $   V  Us   A0b2a?3Abb?bb$b+b,Cb1b2A&bbb3b4Eb9b:Sbbbbbbbbc                 R  K   t        dddddddt        d      t        d	      t        j                         t	        d
      z
  ddddd      }| j                  |       | j                          d{    |j                  }t        ddddddddt        d      dd      }| j                  |       | j                          d{    t        |j                  |      }| j                  |       | j                          d{    t               }|j                  | d       d{   }|d   }d}||k(  }	|	slt        j                  d|	fd ||f      t        j                  |      t        j                  |      d!z  }
d"d#|
iz  }t!        t        j"                  |            dx}x}	}d}d$|_        d|_        t        d      |_        d%|_        | j                          d{    |j                  | d       d{   }|d   }d&}||k(  }	|	slt        j                  d|	fd ||f      t        j                  |      t        j                  |      d!z  }
d"d#|
iz  }t!        t        j"                  |            dx}x}	}| j-                  t/        t0              j3                  t0        j4                  |k(               d{   }|j7                         j9                         }t;        |      }	|	|k(  }|s#t        j                  d|fd'|	|f      d(t=        j>                         v st        j@                  t:              rt        j                  t:              nd(d)t=        j>                         v st        j@                  |      rt        j                  |      nd)t        j                  |	      d*t=        j>                         v st        j@                  |      rt        j                  |      nd*d+z  }d,d-|iz  }t!        t        j"                  |            dx}	}|d&   }|j&                  }d}||k(  }|st        j                  d|fd.||f      d/t=        j>                         v st        j@                  |      rt        j                  |      nd/t        j                  |      t        j                  |      d0z  }d,d-|iz  }t!        t        j"                  |            dx}x}}|j$                  }d$}||k(  }|st        j                  d|fd1||f      d/t=        j>                         v st        j@                  |      rt        j                  |      nd/t        j                  |      t        j                  |      d0z  }d,d-|iz  }t!        t        j"                  |            dx}x}}|j*                  }d%}||k(  }|st        j                  d|fd2||f      d/t=        j>                         v st        j@                  |      rt        j                  |      nd/t        j                  |      t        j                  |      d0z  }d,d-|iz  }t!        t        j"                  |            dx}x}}d3|_        d4|_        | j                          d{    |j                  | d       d{   }|d   }d&}||k(  }	|	slt        j                  d|	fd ||f      t        j                  |      t        j                  |      d!z  }
d"d#|
iz  }t!        t        j"                  |            dx}x}	}| j-                  t/        t0              j3                  t0        j4                  |k(               d{   }|j7                         j9                         }t;        |      }	|	|k(  }|s#t        j                  d|fd'|	|f      d(t=        j>                         v st        j@                  t:              rt        j                  t:              nd(d)t=        j>                         v st        j@                  |      rt        j                  |      nd)t        j                  |	      d*t=        j>                         v st        j@                  |      rt        j                  |      nd*d+z  }d,d-|iz  }t!        t        j"                  |            dx}	}|d&   }|jB                  }tD        jF                  }||k(  }|st        j                  d|fd5||f      d/t=        j>                         v st        j@                  |      rt        j                  |      nd/t        j                  |      d6t=        j>                         v st        j@                  tD              rt        j                  tD              nd6t        j                  |      d7z  }d8d9|iz  }t!        t        j"                  |            dx}x}}y7 	7 	F7 		7 7 +7 7 P7 x7 `7 w):uu   
    测试场景：多次更新订单状态和字段，
    验证采购订单始终保留且字段正确更新
    ztest_order_003.xlsxhash003r!   z	ORDER-003u   Stuart Weitzman女款高跟鞋u   颜色:红色;尺寸:35.5码   z2800.00z5600.00
   r#   r%   r&   r'   u   第一次备注zhttp://example.com/image3.jpgr(   Nsw_red_35_5zStuart WeitzmanzSW-001u   红色u   35.5码APFr;   r<   rF   rI   rK   rL   rN   rO   rR   rS   u   部分发货u   已发货1件r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)slenprocurement_ordersinitial_count)rZ   rP   r[   r]   rb   rc   )u.   %(py2)s
{%(py2)s = %(py0)s.数量
} == %(py5)srX   ra   r`   r   rh   u   交易完成rd   r   re   rf   rg   )$r   r   r   rl   r   rm   rn   ro   r   r   rp   r   rq   rr   rs   rt   ru   rv   r3   r/   r1   r6   rw   r	   r   rx   ry   scalarsallr   r{   r|   r}   r~   r   r   )r   r   rH   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rX   r   result3r   r   s                           r   /test_multiple_status_changes_with_field_updatesr      s     '&;9Y'Y'\\^iR&88 &&.I" KK	
--/<<L  ;9)$G KK
--/"!**!G KK
..
')G 77u7UUG#$))$))))$)))$))))))))))M ,II$Y/I,I
..
77u7UUG#$))$))))$)))$))))))))))  ' &&'7'I'I\'YZ   ,33599;!"3"m3333"m33333333333333333!333!333"333333m333m3333333*1-##(q(#q((((#q((((((((((((#(((q((((((());^;)^;;;;)^;;;;;;;;;;;;);;;^;;;;;;;))<_<)_<<<<)_<<<<<<<<<<<<)<<<_<<<<<<< ,I+I
..
77u7UUG#$))$))))$)))$))))))))))  ' &&'7'I'I\'YZ   ,33599;!"3"m3333"m33333333333333333!333!333"333333m333m3333333*1-//L3D3L3LL/3LLLLL/3LLLLLLLLLLLLL/LLLLLL3DLLL3DLLL3LLLLLLLLU $  
 V U
 U
s   A0h'2h	3Ah'h?h'h$h'+h,B>h'*h+h'hCh'hOh'&h'h'h!Ch'h$Jh'h'h'h'h'h'h'h'!h'$h'__main__z-v))__doc__builtinsr{   _pytest.assertion.rewrite	assertionrewriterr   pytestpytest_asyncior   r   decimalr   sqlalchemy.ext.asyncior   r   r   
sqlalchemyr	   app.core.databaser
   app.models.raw_ordersr   app.models.products_masterr   r   app.models.procurement_ordersr   r   )app.services.procurement_order_service_v2r   fixturer   markasyncior   r   r   __name__main__file__     r   <module>r      s   
    (  X X  " * J M O   cM cML [M [M| cM cML zFKK4 ! r   