o
    ix                     @   s   d dl Zd dlm  mZ d dlZd dlZd dlZd dl	m
Z
 d dlmZmZmZ ejd ee
e jd  d dlmZ d dlmZ dd Zd	d
 Zdd Zdd Zdd ZdS )    NPath)	AsyncMock	MagicMockpatch   )settings)AttachmentParserc                  C   s   t j} d}| | }|j}| }|sCtd|  dd dt v s&t| r+t| ndt|t|t|d }t	t
|d } } }}dS )uF   project_root 应指向 monorepo 根（包含 data_center/ 子目录）data_centerproject_root=u!    下找不到 data_center/ 目录zO
>assert %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).is_dir
}()
}root)py0py2py5py7N)r   project_rootis_dir
@pytest_ar_format_assertmsg@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)r   @py_assert1@py_assert3@py_assert4@py_assert6@py_format8 r    Q/lsinfo/ai/hellotax_ai/data_center/backend/tests/test_attachment_relative_path.py"test_project_root_is_monorepo_root   sD   
r"   c                  C   s   t j} | j}| }|s>tdt j dd dt v s!tt r&tt ndt| t|t|d }t	t
|d  }  }}d S )Nr   u    不是绝对路径zj
>assert %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.project_root
}.is_absolute
}()
}r   )r   r   py4py6)r   r   is_absoluter   r   r   r   r   r   r   r   )r   r   @py_assert5@py_format7r    r    r!   test_project_root_is_absolute   s   r(   c                    s  t  | t| d d ddd   fdd}t| }|d }d	}||u }|sZtd
|fd||ft|t|d }td| d d|i }tt	|d } }}|d }t
j}	|	j}||}
|
 }|std| d dt v stt
rtt
ndt|	t|dt v st|rt|ndt|
d }tt	|d }	 } }
}d}||k}	|	std|	fd||fdt v st|rt|ndt|d }td| d d|i }tt	|d }	}dS )u7   提供 base_dir 时，返回的 path 应为相对路径subfile.pdf   %PDF-fake-contentc                 S     | D ]}|V  qd S Nr    itemsitemr    r    r!   aiter"      z=test_download_attachment_returns_relative_path.<locals>.aiterc                     s   t dJ} t }t |_t gd|_t }t|d|_tdd|_t }t|d|_t|d| j_tdd| j_j	ddI d H }W d    |S 1 sRw   Y  |S )Nhttpx.AsyncClientreturn_valueFhttps://example.com/file.pdf)url	save_pathbase_dir
r   r   r   raise_for_statusaiter_bytes
__aenter__	__aexit__streamr5   download_attachmentmock_client_clsmock_responsemock_streammock_clientresultr1   r9   
mock_chunkparserr8   r    r!   run&   s*   

z;test_download_attachment_returns_relative_path.<locals>.runsuccessTisz%(py1)s is %(py4)spy1r#      下载失败: 
>assert %(py6)sr$   Npathu%   path 应为相对路径，实际为: zg
>assert not %(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.isabs
}(%(py5)s)
}os)r   r   r#   r   r   zsub/file.pdf)==)z%(py0)s == %(py3)s)r   py3u   相对路径不符合预期: z
>assert %(py5)sr   r	   strasynciorJ   r   _call_reprcomparer   r   r   r   rT   rS   isabsr   r   r   )tmp_pathrJ   rF   @py_assert0r   @py_assert2@py_format5r'   rS   r   r   @py_assert8@py_format9@py_format4@py_format6r    rG   r!   .test_download_attachment_returns_relative_path   s   zrd   c                    sX  t  t| d ddd   fdd}t| }|d }d}||u }|sUtd	|fd
||ft|t|d }td| d d|i }tt	|d } }}t
j}|j}|d }	||	}
|
std|d  d dt v stt
rtt
ndt|t|t|	t|
d }tt	|d } } }	}
dS )uL   不提供 base_dir 时，返回的 path 应为绝对路径（向后兼容）r*   r+   c                 S  r,   r-   r    r.   r    r    r!   r1   G   r2   zDtest_download_attachment_no_base_dir_returns_absolute.<locals>.aiterc                     s   t dI} t }t |_t gd|_t }t|d|_tdd|_t }t|d|_t|d| j_tdd| j_j	ddI d H }W d    |S 1 sQw   Y  |S )Nr3   r4   Fr6   )r7   r8   r:   rA   r1   rH   rI   r8   r    r!   rJ   K   s(   

zBtest_download_attachment_no_base_dir_returns_absolute.<locals>.runrK   TrL   rN   rO   rQ   rR   r$   NrS   u%   path 应为绝对路径，实际为: zc
>assert %(py8)s
{%(py8)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.isabs
}(%(py6)s)
}rT   )r   r   r#   r$   py8rW   )r\   rJ   rF   r]   r   r^   r_   r'   r   r&   @py_assert7ra   r    re   r!   5test_download_attachment_no_base_dir_returns_absoluteA   s   zrh   c                 C   s   ddl m} | d }|d d}| | }|j}| }|sKtd| dd dt v s2t|r7t	|ndt	|t	|d	 }t
t|d
 }}d
S )uA   下载接口应将相对路径拼上 project_root 后访问文件r   r   zfake.pdfs	   %PDF-fakeu   拼接后路径 u
    不存在zD
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.is_file
}()
}abs_path)r   r   r#   N)pathlibr   write_bytesis_filer   r   r   r   r   r   r   r   )r\   r   	fake_filerel_pathri   r   r   r_   r    r    r!   /test_download_attachment_resolves_relative_pathc   s   
xro   )builtinsr   _pytest.assertion.rewrite	assertionrewriter   rY   rT   sysrj   r   unittest.mockr   r   r   rS   insertrX   __file__resolveparents
app.configr   9app.services.tax_data_processor.parsers.attachment_parserr	   r"   r(   rd   rh   ro   r    r    r    r!   <module>   s   "  '"