
    h                         d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
mZ ddlmZmZ d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zedk(  r ej6                  edg       yy)uV   
Phase 3 简化测试
测试产品分类、聚合服务和采购管理的基本功能
    N)Decimal)ProductClassifier)ProductCategoryProcurementPriorityc                     t               } | j                  dd      \  }}t        j                  }||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                  t              rt	        j                  t              ndt	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d
x}}d}||kD  }|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                  dd      \  }}t        j                  }||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                  t              rt	        j                  t              ndt	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d
x}}d}||kD  }|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                  dd      \  }}t        j                  }||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                  t              rt	        j                  t              ndt	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d
x}}d}||kD  }|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                  dd      \  }}t        j                  }||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                  t              rt	        j                  t              ndt	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d
x}}d}||kD  }|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                  dd      \  }}t        j                  }||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                  t              rt	        j                  t              ndt	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d
x}}d}||kD  }|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                  dd      \  }}t        j                   }||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                  t              rt	        j                  t              ndt	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d
x}}d}||kD  }|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}}y
)!u   测试产品分类器u   YSL口红999号	   圣罗兰==z*%(py0)s == %(py4)s
{%(py4)s = %(py2)s.MC
}categoryr   py0py2py4assert %(py6)spy6Ng333333?>z%(py0)s > %(py3)s
confidencer   py3assert %(py5)spy5u   NIKE运动T恤NIKE)z*%(py0)s == %(py4)s
{%(py4)s = %(py2)s.AT
}u   ADIDAS跑步鞋ADIDASz*%(py0)s == %(py4)s
{%(py4)s = %(py2)s.SS
}u   卡地亚手表u	   卡地亚)z*%(py0)s == %(py4)s
{%(py4)s = %(py2)s.AP
}u   LV手提包u   路易威登)z*%(py0)s == %(py4)s
{%(py4)s = %(py2)s.LA
}u   Calvin Klein文胸zCalvin Klein)z*%(py0)s == %(py4)s
{%(py4)s = %(py2)s.NY
})r   classify_productr   MC
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationATSSAPLANY

classifierr   r   @py_assert3@py_assert1@py_format5@py_format7@py_assert2@py_format4@py_format6s
             a   /Users/jinjunqian/PycharmProjects/订单处理新版/ordersys/backend/tests/test_phase3_simple.pytest_product_classifierr7      s   "$J &667H+VHj&)))8)))))8)))))))8)))8)))))))))))))))))))):::: &667GPHj&)))8)))))8)))))))8)))8)))))))))))))))))))):::: &667H(SHj&)))8)))))8)))))))8)))8)))))))))))))))))))):::: &667H+VHj&)))8)))))8)))))))8)))8)))))))))))))))))))):::: &66}nUHj&)))8)))))8)))))))8)))8)))))))))))))))))))):::: &667K^\Hj&)))8)))))8)))))))8)))8))))))))))))))))))))::::    c                  	   t               } | j                  dd      \  }}t        j                  }||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                  t              rt	        j                  t              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}}| j                  dd      \  }}|t        v }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      nddt        j                         v st	        j                  t              rt	        j                  t              nddz  }
dd|
iz  }t        t	        j                  |            d}| j                  d      \  }}t        j                  }||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                  t              rt	        j                  t              ndt	        j                  |      dz  }dd	|iz  }t        t	        j                  |            dx}}| j                  d      \  }}t        j                  }||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                  t              rt	        j                  t              ndt	        j                  |      dz  }dd	|iz  }t        t	        j                  |            dx}}y)u   测试分类边界情况 Nr	   )z-%(py0)s == %(py4)s
{%(py4)s = %(py2)s.OTHER
}r   r   r   r   r           )z%(py0)s == %(py3)sr   r   r   r   u   神秘商品XYZu   未知品牌inz%(py0)s in %(py2)sr   r   assert %(py4)sr      口红r   	   运动鞋r   )r   r   r   OTHERr    r!   r"   r#   r$   r%   r&   r'   r   r)   )r.   r   r   r/   r0   r1   r2   r3   r4   r5   @py_format3s              r6   test_classification_edge_casesrE   0   s   "$J &66r4@Hj&,,,8,,,,,8,,,,,,,8,,,8,,,,,,,,,,,,,,,,,,,,:::: &667H.YHj&&&&8&&&&&&8&&&8&&&&&&&&&&&&&&&& &66x@Hj&)))8)))))8)))))))8)))8))))))))))))))))))))%66{CHj&)))8)))))8)))))))8)))8))))))))))))))))))))r8   c                     t               } | j                  ddd      }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}||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}||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   }t        D cg c]  }|j                   }}||v }|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   }
||
k  }d}|
|k  }|r|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}x}
}yc c}w )u   测试分类解释功能u   NIKE Air Jordan篮球鞋r   u   经典款篮球鞋
input_textr<   z%(py1)s in %(py3)sexplanationpy1r   r   r   Ncategory_analysisfinal_resultr   )z%(py1)s in %(py4)s)rK   r   r   r   r;   r   g      ?)<=rN   )z%(py1)s <= %(py5)sz%(py5)s <= %(py7)s)rK   r   py7assert %(py9)spy9)r   explain_classificationr    r!   r%   r"   r#   r$   r&   r'   r   value)r.   rI   @py_assert0r3   r4   r5   r   r/   r1   r2   @py_assert4@py_assert6@py_format8@py_format10s                 r6   test_classification_explanationrY   F   s#   "$J33"K &<;&&&&<;&&&<&&&&&&;&&&;&&&&&&&-+----+---------+---+-------(>[((((>[(((>(((((([((([(((((((~&z2fVe6fVe(x~~Vef6f26fffff26ffff2fff6ffffffffB+n-l;B3;BBsB;sBBBBB3;sBBB3BBB;BBBsBBBBBBBB 7gs   Mc                  l   t               } | j                  t        j                        }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	}||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
}||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}}| j                  t        j                        }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}||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}||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}}| j                  t        j                        }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}||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}||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   测试获取分类关键词rA   r<   rH   mc_keywordsrJ   r   r   Nu   粉底u   眼影u   T恤at_keywordsu	   牛仔裤u	   连衣裙rB   ss_keywordsu	   高跟鞋u   靴子)r   get_category_keywordsr   r   r    r!   r%   r"   r#   r$   r&   r'   r(   r)   )r.   r[   rT   r3   r4   r5   r\   r]   s           r6   test_get_category_keywordsr_   W   ss   "$J 22?3E3EFK"8{""""8{"""8""""""{"""{""""""""8{""""8{"""8""""""{"""{""""""""8{""""8{"""8""""""{"""{""""""" 22?3E3EFK 6[    6[   6      [   [       %;+%%%%;+%%%;%%%%%%+%%%+%%%%%%%%;+%%%%;+%%%;%%%%%%+%%%+%%%%%%% 22?3E3EFK%;+%%%%;+%%%;%%%%%%+%%%+%%%%%%%%;+%%%%;+%%%;%%%%%%+%%%+%%%%%%%"8{""""8{"""8""""""{"""{"""""""r8   c                     t               } | j                         }t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  g}|D ]  }||v }|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} y)	u   测试获取所有分类r<   r>   expected
categoriesr?   r@   r   N)r   get_all_categoriesr   r   r(   r*   r+   r)   r,   r    r!   r"   r#   r$   r%   r&   r'   )r.   rb   expected_categoriesra   r0   rD   r1   s          r6   test_get_all_categoriesre   n   s    "$J..0JO..0B0BO..0B0B
 (:%%%%x:%%%%%%x%%%x%%%%%%:%%%:%%%%%%% (r8   c                     t               } | j                  dd      \  }}t        j                  }||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                  t              rt	        j                  t              ndt	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d
x}}| j                  dd      \  }}t        j                  }||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                  t              rt	        j                  t              ndt	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d
x}}d}||kD  }|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}}y
)u   测试多关键词匹配u   NIKE运动鞋篮球鞋r   r	   r   r   r   r   r   r   Nu   雅诗兰黛小棕瓶精华   雅诗兰黛r   gffffff?r   r   r   r   r   r   )r   r   r   r)   r    r!   r"   r#   r$   r%   r&   r'   r   r-   s
             r6   test_multiple_keyword_matchingrh   |   s   "$J &667OQWXHj&)))8)))))8)))))))8)))8)))))))))))))))))))) &667TVdeHj&)))8)))))8)))))))8)))8))))))))))))))))))))::::r8   c                     t               } | j                  dd      \  }}|}| j                  d      \  }}|}||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}y)u   测试分类置信度水平u   YSL圣罗兰口红唇膏r   rA   )>=)z%(py0)s >= %(py2)shigh_confidencelow_confidencer?   r@   r   N)
r   r   r    r!   r"   r#   r$   r%   r&   r'   )r.   r   r   rk   rl   r0   rD   r1   s           r6   %test_classification_confidence_levelsrm      s    "$J &667QS^_Hj O &66x@HjN n,,,,?n,,,,,,?,,,?,,,,,,n,,,n,,,,,,,r8   c                  R   t         j                  } | j                  }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}}t         j                  } | j                  }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}}t         j                  } | j                  }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}}t         j                  t         j                  t         j                  g}t         j                  t         j                  t         j                  g}ddddt        |fdd      }||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} y)u   测试产品优先级逻辑HIGHr	   )zG%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.HIGH
}.value
} == %(py7)sr   r   r   r   rO   rP   rQ   NMEDIUM)zI%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.MEDIUM
}.value
} == %(py7)sLOW)zF%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.LOW
}.value
} == %(py7)s         )ro   rq   rr   c                 "    | j                      S )N)rS   )ppriority_valuess    r6   <lambda>z-test_product_priority_logic.<locals>.<lambda>   s    9Qr8   T)keyreverse)z%(py0)s == %(py2)ssorted_prioritiesexpected_orderr?   r@   r   )r   ro   rS   r    r!   r"   r#   r$   r%   r&   r'   rq   rr   sorted)r0   r/   rV   @py_assert5rW   rX   
prioritiesr}   r|   rD   r1   rx   s              @r6   test_product_priority_logicr      su    ##3#))3V3)V3333)V333333333333#333)333V3333333%%7%++7x7+x7777+x777777777777%777+777x7777777""1"((1E1(E1111(E111111111111"111(111E1111111 &))+>+C+CEXE_E_`J)..0C0J0JL_LcLcdN  !Aa8Oz/Q[_`.............................r8   c                  x   t         j                  } | j                  }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}}t         j                  } | j                  }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}}t         j                  } | j                  }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}}t         j                  } | j                  }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}}t         j                  } | j                  }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}}t         j                  } | j                  }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}}t         j                   } | j                  }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}}y)u   测试分类枚举值r   r	   )zE%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.MC
}.value
} == %(py7)sr   rp   rP   rQ   Nr(   )zE%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.AT
}.value
} == %(py7)sr*   )zE%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.AP
}.value
} == %(py7)sr+   )zE%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.LA
}.value
} == %(py7)sr)   )zE%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.SS
}.value
} == %(py7)sr,   )zE%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.NY
}.value
} == %(py7)srC   )zH%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.OTHER
}.value
} == %(py7)s)r   r   rS   r    r!   r"   r#   r$   r%   r&   r'   r(   r*   r+   r)   r,   rC   )r0   r/   rV   r   rW   rX   s         r6   test_category_enum_valuesr      s   +##+t+#t++++#t++++++?+++?++++++#+++t++++++++##+t+#t++++#t++++++?+++?++++++#+++t++++++++##+t+#t++++#t++++++?+++?++++++#+++t++++++++##+t+#t++++#t++++++?+++?++++++#+++t++++++++##+t+#t++++#t++++++?+++?++++++#+++t++++++++##+t+#t++++#t++++++?+++?++++++#+++t+++++++  1 &&1'1&'1111&'111111?111?111 111&111'1111111r8   c                     t               } | j                  d      \  }}t        j                  }||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                  t              rt	        j                  t              ndt	        j                  |      dz  }dd|iz  }t        t	        j                  |            d	x}}| j                  d
      \  }}t        j                  t        j                  g}||v }|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}}y	)u   测试正则模式匹配u   这是一款口红产品r	   r   r   r   r   r   r   NzNike Basketball Shoesr<   z%(py0)s in %(py3)sr   r   r   )r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r)   r(   r-   s
             r6   test_pattern_matchingr      s(   "$J &667QRHj&)))8)))))8)))))))8)))8)))))))))))))))))))) &667NOHj'**O,>,>??8?????8???????8???8???????????r8   c                     t               } | j                  dd      \  }}t        j                  }||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                  t              rt	        j                  t              ndt	        j                  |      dz  }dd	|iz  }t        t	        j                  |            d
x}}| j                  dd      \  }}t        j                  t        j                  g}||v }|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}}y
)u$   测试品牌在分类中的优先级u   新款产品rg   r	   r   r   r   r   r   r   Nu   热销商品r   r<   r   r   r   r   )r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r-   s
             r6   %test_brand_priority_in_classificationr      s(   "$J &66~~VHj&)))8)))))8)))))))8)))8))))))))))))))))))))%66~vNHj'**O,>,>??8?????8???????8???8???????????r8   __main__z-v)__doc__builtinsr"   _pytest.assertion.rewrite	assertionrewriter    pytestdecimalr   app.utils.classificationr   app.models.productsr   r   r7   rE   rY   r_   re   rh   rm   r   r   r   r   __name__main__file__ r8   r6   <module>r      sy   
    6 D F*,C"#.&- /$2@@ zFKK4 ! r8   