
    Ph82                     B   d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
Z
ddlmZ ddlmZ ddlZddl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mZ dd	lmZ dd
lmZ ddl m!Z! ejD                  d        Z#ejD                  d        Z$ejD                  d        Z%d Z&d Z'd Z(ejR                  j                  d        Z*ejR                  j                  d        Z+ejR                  j                  d        Z,ejR                  j                  d        Z-ejR                  j                  d        Z.ejR                  j                  d        Z/ejR                  j                  d        Z0d Z1ejR                  j                  d        Z2e3dk(  r ejh                  e5dg       yy)u   
Phase 1 导入功能测试
    N)Path)datetime)AsyncSessioncreate_async_engineasync_sessionmaker)select)Base)RawOrderProcessedFile)ImportService)calculate_file_sha1)ExcelReaderc                 h  K   t        dd      } | j                         4 d{   }|j                  t        j                  j
                         d{    ddd      d{    t        | d      }| | j                          d{    y7 p7 A7 3# 1 d{  7  sw Y   CxY w7  w)u   创建测试数据库zsqlite+aiosqlite:///:memory:F)echoN)expire_on_commit)r   beginrun_syncr	   metadata
create_allr   dispose)engineconnasync_sessions      a   /Users/jinjunqian/PycharmProjects/订单处理新版/ordersys/backend/tests/test_phase1_import.pytest_dbr      s      !!?eLF||~~mmDMM44555 ~ 'vFM

..
 5 ~~~ sb   "B2BB2-BBBB2%B&)B2B0B2BB2B-!B$"B-)B2c               #   x   K   t        j                         } t        |        t        j                  |        yw)u   创建临时目录N)tempfilemkdtempr   shutilrmtree)temp_dirs    r   temp_directoryr"   '   s,      !H
x.
MM(s   8:c                     g dg dg dg dg dg dg dg dg d	g d
g dg dg dg dd}t        j                  |      }| dz  }|j                  |d       |S )u   创建示例Excel文件)ORDER001r$   ORDER002)   测试店铺r&   r&   )   交易成功r'   u   交易关闭)2025-01-15 10:30:00r(   z2025-01-16 14:20:00)   Nike 运动鞋u	   Nike T恤u   Adidas 外套)u   颜色:黑色;尺码:42u   颜色:白色;尺码:Lu   颜色:蓝色;尺码:XL)NK001NK002AD001)SP001SP002SP003)SKU001SKU002SKU003)      r3   )     @g     h@     @)r5   g     x@r6   )   尽快发货r7    )r8   r8   u	   大客户)   原始订单编号   网店名称   交易状态   付款时间   线上宝贝名称u   线上销售属性u   线上商家编码u   商品编号u	   SKU编号   数量   订单单价u   订单金额u   买家留言u   卖家备注test_orders.xlsxF)index)pd	DataFrameto_excel)r"   datadf
excel_paths       r   sample_excel_filerH   /   sg     CHH]Nn933--<-D" 
d	B"44JKK
%K(    c                    t        |       }t        |       }||k(  }|st        j                  d|fd||f      dt        j                         v st        j
                  |      rt        j                  |      nddt        j                         v st        j
                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d}t        |      }d	}||k(  }|st        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                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            dx}x}}y)u   测试文件哈希计算==)z%(py0)s == %(py2)shash1hash2)py0py2zassert %(py4)spy4N(   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenrO   py1py3py6assert %(py8)spy8)
r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationrT   )rH   rM   rN   @py_assert1@py_format3@py_format5@py_assert2@py_assert5@py_assert4@py_format7@py_format9s              r   test_file_hash_calculationrk   J   s    12E 12E E>5E55EEu:::33uu:rI   c           	      	   t               }|j                  |       }t        |      }d}||k(  }|st        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                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}d
}|j                  }||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d	x}x}}|j                  |      }d |j                  D        }t        |      }|sddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }t        t        j                  |            d	x}}|j                  |      }t        |      }d}||k(  }|st        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                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}|j                  |      }|d   }|j                   }|j"                  }|j$                  }d} ||      }|sdt        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d	x}x}x}x}x}}y	)u    测试Excel读取器基本功能   rK   rS   rT   rF   rU   rY   rZ   Nr9   in)z/%(py1)s in %(py5)s
{%(py5)s = %(py3)s.columns
})rV   rW   py5assert %(py7)spy7c              3   <   K   | ]  }t        |t                y w)N)
isinstancestr).0cols     r   	<genexpr>z*test_excel_reader_basic.<locals>.<genexpr>_   s     E/Dz#s#/Ds   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}allrO   rP   rQ   
df_cleanedr<   r   zassert %(py11)s
{%(py11)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.dtype
}.name
}.startswith
}(%(py9)s)
})rV   rW   rp   rr   py9py11)r   
read_excelrT   r[   r\   r]   r^   r_   r`   ra   rb   columnsnormalize_column_namesry   
clean_dataparse_datesdtypename
startswith)rH   readerrF   rf   rg   rh   ri   rj   @py_assert0@py_format6@py_format8df_normalizedrc   @py_assert3re   r{   	df_parsed@py_assert6@py_assert8@py_assert10@py_format12s                        r   test_excel_reader_basicr   T   s   ]F 
		,	-Br7a7a<7a33rr7a-2::-:----:---------2---2---:------- 11"5ME}/D/DEE3EEEEEEEEE3EEE3EEEEEEEEEEEEEE ""=1Jz?a?a?a33zz?a "":.I^$F$**F*//F/::F:F::FFFFF$FFF*FFF/FFF:FFF:FFFFFFFFFFFrI   c                    t               }|j                  |       }t        |      }d}||k(  }|st        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                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}}|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}}
|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}}
d}	|	|v }|st        j                  d|fd|	|f      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}	}y	)u   测试Excel转换为记录rm   rK   rS   rT   recordsrU   rY   rZ   Nr   r9   r$   z%(py1)s == %(py4)srV   rQ   assert %(py6)srX   r:   r&   r>   r3   r?   r5   row_idxrn   z%(py1)s in %(py3)sfirst_recordrV   rW   assert %(py5)srp   )r   process_excel_filerT   r[   r\   r]   r^   r_   r`   ra   rb   )rH   r   r   rf   rg   rh   ri   rj   r   r   r   re   @py_format4r   s                 r   $test_excel_reader_convert_to_recordsr   j   sS   ]F''(9:Gw<1<1<133ww<1 1:L,-;;-;;;;-;;;-;;;;;;;;;;'9>9'>9999'>999'999>9999999!&Q&!Q&&&&!Q&&&!&&&Q&&&&&&&'050'50000'5000'00050000000$9$$$$9$$$9$$$$$$$$$$$$$$$$rI   c                 &  K   t               }ddlm} |j                  }t	        |       |_        	 |j                          d{   }t        |      }d}||k(  }|st        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                  |      t        j                  |      d	z  }	d
d|	iz  }
t        t        j                  |
            dx}x}}|d   }|j                  }d}||k(  }|st        j                  d|fd||f      t        j                  |      t        j                  |      t        j                  |      dz  }	d
d|	iz  }
t        t        j                  |
            dx}x}x}}||_        y7 # ||_        w xY ww)u   测试文件扫描功能r   settingsNr3   rK   rS   rT   filesrU   rY   rZ   r@   )z,%(py3)s
{%(py3)s = %(py1)s.name
} == %(py6)srV   rW   rX   )r   app.core.configr   SHARED_INBOX_DIRru   
scan_filesrT   r[   r\   r]   r^   r_   r`   ra   rb   r   )r"   rH   import_servicer   original_pathr   rf   rg   rh   ri   rj   r   s               r   test_import_service_scan_filesr   z   sK     #_N )--M #N 3H2$//115zQzQzQss55zQQx2x}}2 22} 22222} 2222x222}222 22222222$1!	 2 %2!s/   -HH HF6H :HH 	HHc           	      "  K    |        4 d{   }t               }|j                  ||       d{   }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}}t        |      }	t        |j                  |	ddd	d
      }
|j                  |
       |j                          d{    |j                  ||       d{   }d}||u}|st        j                  d|fd||f      dt	        j
                         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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dd      d{    y7 7 7 7 7 # 1 d{  7  sw Y   yxY ww)u   测试文件处理状态检查N)is)z%(py0)s is %(py3)sresultrO   rW   r   rp   rm   r   success)	file_name	file_hash
rows_totalrows_importedrows_failedstatusis notz%(py0)s is not %(py3)srK   z1%(py2)s
{%(py2)s = %(py0)s.file_hash
} == %(py4)sr   rz   r   rX   )r   check_file_processedr[   r\   r]   r^   r_   r`   ra   rb   r   r   r   addcommitr   )r   rH   dbr   r   rf   rc   r   r   r   processed_filer   re   ri   s                 r   #test_import_service_check_processedr      s     yyB& &::2?PQQv~vvv ((9:	&',,
 	~iik &::2?PQQ!!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!,9,,,,9,,,,,,v,,,v,,,,,,,,,9,,,9,,,,,,,1 yy R 	 R- yyysz   LK,L K:K/C3K:&K2'K: K5FK:L&K8'L/K:2K:5K:8L:L LLLc                   K   t               }t        |       }ddddt        j                         ddddd	d
d}|j	                  || j
                  |       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                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}|j                  }| j
                  }
||
k(  }|st        j                  d|fd||
f      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t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}x}}
|j                   }||k(  }|st        j                  d|fd||f      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}}|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                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}|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                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}|j&                  }d!d
i}||k(  }|st        j                  d|fd"||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}y7 ,w)#u   测试创建RawOrder实例r4   r$   r&   r'   r)   r3   r5   13812345678110101199001011234extra_value)r   r9   r:   r;   r<   r=   r>   r?   u   收货人手机号u   收货人身份证extra_fieldNrK   )u:   %(py2)s
{%(py2)s = %(py0)s.原始订单编号
} == %(py5)s	raw_orderrO   rP   rp   rq   rr   )zK%(py2)s
{%(py2)s = %(py0)s.file_name
} == %(py6)s
{%(py6)s = %(py4)s.name
}rH   )rO   rP   rQ   rX   rY   rZ   r   r   rz   r   rX   138****5678)u:   %(py2)s
{%(py2)s = %(py0)s.收货人手机号
} == %(py5)s1101****1234)u:   %(py2)s
{%(py2)s = %(py0)s.收货人身份证
} == %(py5)sr   )z4%(py2)s
{%(py2)s = %(py0)s.extra_fields
} == %(py5)s)r   r   r   now_create_raw_orderr      原始订单编号r[   r\   r]   r^   r_   r`   ra   rb   r   r      收货人手机号   收货人身份证extra_fields)rH   r   r   recordr   rc   rh   r   r   r   rg   ri   rj   re   s                 r   $test_import_service_create_raw_orderr      sh     #_N#$56I (&& .+2$F %66!&&	 I ''5:5':5555':55555595559555'555:55555558"3"8"88"88888"888888898889888888888"3888"3888"88888888+)++++)++++++9+++9+++++++++)+++)+++++++ ''8=8'=8888'=88888898889888'888=8888888''9>9'>9999'>99999999999999'999>9999999 !!Cm]%CC!%CCCCC!%CCCCCCC9CCC9CCC!CCC%CCCCCCCCs   AVVT,Vc                 l  K    |        4 d{   }t               }t               }|j                  |      }t        |      }|j	                  |||j
                  |       d{   \  }}}	d}
||
k(  }|st        j                  d|fd||
f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}}
d	}
||
k(  }|st        j                  d|fd||
f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |
      dz  }dd|iz  }t        t        j                  |            dx}}
t        |	      }
d	}|
|k(  }|st        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                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}
x}}|j                  t!        t"                     d{   }|j%                         j'                         }t        |      }
d}|
|k(  }|st        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                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}
x}}|d	   }|j(                  }
d}|
|k(  }|st        j                  d|fd|
|f      t        j                  |      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}
x}}|d   }|j(                  }
d}|
|k(  }|st        j                  d|fd|
|f      t        j                  |      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}
x}}|d   }|j(                  }
d}|
|k(  }|st        j                  d|fd|
|f      t        j                  |      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}
x}}ddd      d{    y7 7 7 07 # 1 d{  7  sw Y   yxY ww)u   测试批量导入Nrm   rK   )z%(py0)s == %(py3)simportedr   r   rp   r   failedrS   rT   errorsrU   rY   rZ   
raw_ordersr$   )u:   %(py3)s
{%(py3)s = %(py1)s.原始订单编号
} == %(py6)sr   r3   r4   r%   )r   r   r   r   _batch_import_recordsr   r[   r\   r]   r^   r_   r`   ra   rb   rT   executer   r
   scalarsry   r   )r   rH   r   r   r   r   r   r   r   r   rf   rc   r   r   rg   rh   ri   rj   r   r   r   s                        r    test_import_service_batch_importr      s     yyB& ++,=> ((9:	)7)M)M*//*
 $
 && x1}x1xx1v{vvv6{a{a{ass66{a zz&"233^^%))+
:#!#!####!######s###s######:###:######!#######!}=}//=:=/:====/:===}===/===:=======!}=}//=:=/:====/:===}===/===:=======!}=}//=:=/:====/:===}===/===:=======1 yy$
 4% yyysk   X4XX4AX$X%JX*X+LXX4XX4XXX4X1%X(&X1-X4c                   K    |        4 d{   }t               }ddlm} |j                  }d|_        	 |j	                  ||       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}	}|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}	}|d   }t        |      }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}x}}|j                  t        t                      d{   }|j#                         j%                         }t        |      }	d}|	|k(  }|st        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                  |	      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}	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                  |      dz  }dd |iz  }t        t        j                  |            dx}x}}|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                  |      dz  }dd |iz  }t        t        j                  |            dx}x}}|j                  t        t*                     d{   }|j#                         j%                         }t        |      }	d}|	|k(  }|st        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                  |	      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}	x}}||_        ddd      d{    y7 7 G7 :7 T# ||_        w xY w7 # 1 d{  7  sw Y   yxY ww)#u   测试完整导入流程Nr   r   Fr   r   rK   r   r   r   rX   r   rm   r   r   r   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)srT   )rO   rP   rQ   rr   zassert %(py9)sr|   r3   rS   processed_filesrU   rY   rZ   )z5%(py2)s
{%(py2)s = %(py0)s.rows_imported
} == %(py5)sr   r   rq   rr   )z.%(py2)s
{%(py2)s = %(py0)s.status
} == %(py5)sorders)r   r   r   DRY_RUN_ANALYZE_ONLYimport_filer[   r\   r`   ra   rb   rT   r]   r^   r_   r   r   r   r   ry   r   r   r
   )r   rH   r   r   r   original_dry_runr   r   r   rf   re   ri   rc   r   rg   r   @py_format10processed_resultr   rh   rj   r   r   orders_resultr   s                            r   test_import_service_full_importr      s     yyB& 	-#88(-%	=)55b:KLLF(#0y0#y0000#y000#000y0000000,',1,'1,,,,'1,,,',,,1,,,,,,,/*/a/*a////*a///*///a///////-(-A-(A----(A---(---A-------h'-3'(-A-(A----(A------3---3---'---(---A------- &(ZZ}0E%FF.668<<>O',1,'1,,,,'1,,,,,,3,,,3,,,,,,,,,,,,',,,1,,,,,,,,Q/N!//414/14444/1444444>444>444/44414444444!((5I5(I5555(I555555>555>555(555I5555555 #%**VH-=">>M"**,002Fv;#!#;!####;!######3###3######v###v###;###!####### -=H)A yy M  G ?
 -=H)A yyys   ^?^^?$^*^^L^^K(^^D2^8^*?^?
^(^?^^^	^%%^*(^?*^<0^31^<8^?c                   K    |        4 d{   }t               }ddlm} |j                  }d|_        	 |j	                  ||       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   }||v }	|	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                     d{   }|j                         j                         }t        |      }	d}|	|k(  }|st        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                  |	      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}	x}}||_        ddd      d{    y7 7 s7 Q# ||_        w xY w7 # 1 d{  7  sw Y   yxY ww)u   测试干跑模式Nr   r   Tr   skippedrK   r   r   r   rX   DRY_RUNmessagern   )z%(py1)s in %(py4)srS   rT   r   rU   rY   rZ   )r   r   r   r   r   r[   r\   r`   ra   rb   r   r   r
   r   ry   rT   r]   r^   r_   )r   rH   r   r   r   r   r   r   r   rf   re   ri   r   r   rg   rh   rj   s                    r    test_import_service_dry_run_moder     s     yyB& 	-#88(,%	=)55b:KLLF(#0y0#y0000#y000#000y00000001y 119 111119 11119111 11111111 #%**VH-=">>M"**,002Fv;#!#;!####;!######3###3######v###v###;###!####### -=H)) yy M ?
 -=H)) yyys   K(J<K($KKJ?D$K1K2D2K$K+K(6K7K(?KK	KKK(K%KK%!K(c                 d  K    |        4 d{   }t               }ddlm} |j                  }d|_        	 |j	                  ||       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                  ||       d{   }d}	||	u}|st        j                  d|fd||	f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |	      dz  }dd|iz  }t        t        j                  |            dx}}	|j                  }t        |j                         |_        |j#                  |       d{   }t%        |      }	d}|	|k(  }|st        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                  |	      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}	x}}|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      d{    y7 s7 87 7 # ||_        w xY w7 # 1 d{  7  sw Y   yxY ww)u   测试重复导入防护Nr   r   Fr   r   rK   r   r   r   rX   r   r   	processedr   r   rp   r3   rS   rT   resultsrU   rY   rZ   already_processed)r   r   r   r   r   r[   r\   r`   ra   rb   r   r]   r^   r_   r   ru   parentimport_all_pending_filesrT   )r   rH   r   r   r   r   result1r   r   rf   re   ri   r   rc   r   r   r   r   rg   rh   rj   s                        r   (test_import_service_duplicate_preventionr   -  sq     yyB&,#88(-%	=*66r;LMMG8$1	1$	1111$	111$111	1111111 -AA"FWXXI$((9D((((9D((((((9(((9(((D((((((( %55M(+,=,D,D(EH%*CCBGGG w<$1$<1$$$$<1$$$$$$3$$$3$$$$$$w$$$w$$$<$$$1$$$$$$$1:h'>+>>'+>>>>>'+>>>>'>>>+>>>>>>>>(5H% -=H)= yy N Y H -=H)= yyys   N0NN0$NNNBN&N'C#N
N
FN)N0N0;N<N0NN
N	NNN0N-!N$"N-)N0c                      t               } | j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}x}x}}| j                  }d
} ||      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}x}x}}| j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}x}x}}| j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}x}x}}| j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}x}x}}| j                  }d} ||      }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}x}x}}y	)u   测试敏感信息脱敏r   r   rK   )zQ%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s._mask_phone
}(%(py4)s)
} == %(py9)sr   )rO   rP   rQ   rX   r|   zassert %(py11)sr}   N1234567z123****123r   r   )zS%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s._mask_id_card
}(%(py4)s)
} == %(py9)s12345678z1234****1234)r   _mask_phoner[   r\   r]   r^   r_   r`   ra   rb   _mask_id_card)r   rc   r   rg   r   @py_assert7r   r   s           r   test_sensitive_data_maskingr   Q  s   "_N %%EmE%m4EE4EEEE4EEEEEE>EEE>EEE%EEEmEEE4EEEEEEEEEE%%=i=%i0=I=0I====0I======>===>===%===i===0===I=======%%5e5%e,55,5555,555555>555>555%555e555,5555555555 ''O(<O'(<=OO=OOOO=OOOOOO>OOO>OOO'OOO(<OOO=OOOOOOOOOO''A
A'
3AzA3zAAAA3zAAAAAA>AAA>AAA'AAA
AAA3AAAzAAAAAAA''99'/969/69999/6999999>999>999'999999/999699999999rI   c                   K   |dz  }|j                  d        |        4 d{   }t               }ddlm} |j                  }d|_        	 |j                  ||       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}||v }
|
st        j                  d|
fd||f      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dd      d{    y7 7 E# ||_        w xY w7 # 1 d{  7  sw Y   yxY ww)u!   测试无效文件的错误处理zinvalid.txtzThis is not an Excel fileNr   r   Fr   errorrK   r   r   r   rX   error_messagern   r   r   r   r   rp   )
write_textr   r   r   r   r   r[   r\   r`   ra   rb   r]   r^   r_   )r   r"   invalid_filer   r   r   r   r   r   r   rf   re   ri   r   r   s                  r    test_error_handling_invalid_filer   `  s?     "M1L78yyB&,#88(-%	=)55b,GGF(#.w.#w....#w...#...w.......",?f,,,,?f,,,?,,,,,,f,,,f,,,,,,, -=H) yy H -=H) yyyso   "GF$G$F8F*"F'#D)F*F8GF6G'F**	F33F86G8G
>G?G
G__main__z-v)6__doc__builtinsr]   _pytest.assertion.rewrite	assertionrewriter[   osr   r   asynciopathlibr   r   pandasrB   pytestsqlalchemy.ext.asyncior   r   r   
sqlalchemyr   app.core.databaser	   app.models.raw_ordersr
   r   app.services.import_servicer   app.utils.file_hashr   app.utils.excel_readerr   fixturer   r"   rH   rk   r   r   markr   r   r   r   r   r   r   r   r   __name__main__file__ rI   r   <module>r     s    	        X X  " 9 5 3 .      4G,%  2 2$ - -:  D  DF > >: "= "=J = =2  =  =F: = =. zFKK4 ! rI   