
    hxi                        d Z ddlZddlmc mZ ddlmZm	Z	mZ ddl
mZ ddlmZ ddl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edefdZdefdZdefdZdefdZdefdZej        dedefd            Z  G d d          Z!dS )z Tests for the main orchestrator.    N)UTCdatedatetime)Path)patch)RawItem)Scout)NoveltyScenarioTypeSettings	Test itemtitlereturnc           	      b    t          | dddt          j        t                    |  d          S )Nzhttps://example.com/item
hackernewsuser)tzz

Some content)r   
source_urlsource_platformauthorpublished_atraw_content)r   r   nowr   )r   s    6/root/projects/ai_usecases_explorer/tests/test_main.py	_raw_itemr      sA    -$\S)))...       c                      dddddS )NTz
local dataFis_real_valuereasonhas_local_datahas_workflow_opt r$   r   r   _filter_passr%      s    !\Tglmmmr   c                      dddddS )NFzjust Q&Ar   r$   r$   r   r   _filter_failr'      s    "jEglmmmr   c                  (    t           j        ddgdddS )NClaudePythong      ?zTest summary.)scenario_type
tools_usedvalue_scoresummary)r   CODE_GEN_REVIEWr$   r   r   _classify_resultr0   !   s%    %5*"	  r   c                  "    t           j        g ddS )NzNew.)noveltysimilar_to_idsnovelty_reason)r
   NEWr$   r   r   
_dedup_newr6   *   s    {bFSSSr   tmp_pathc                 2    t          d| dz  | dz            S )Nztest-keyztest.dbreports)anthropic_api_keydb_pathobsidian_report_dirr   )r7   s    r   settingsr=   .   s,    $9$$y0   r   c                   v    e Zd ZdeddfdZdeddfdZdeddfdZdededdfdZdededdfd	Z	deddfd
Z
dS )	TestScoutr=   r   Nc                 4   t          |          }t          d          }t          j        |j        dt                                5  t          j        |j        dt                                5  t          j        |j        dt                                5  |
                    |g           }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   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        }d}	||	u }
|
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}	||	u }
|
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}
}	d S )Nr=   z!Show HN: Real workflow automationrunreturn_valueexistingis notz%(py0)s is not %(py3)sresultpy0py3assert %(py5)spy5Tis)z5%(py2)s
{%(py2)s = %(py0)s.is_real_value
} is %(py5)s)rL   py2rO   zassert %(py7)spy7)z6%(py2)s
{%(py2)s = %(py0)s.has_local_data
} is %(py5)s)r	   r   r   object_filterr%   _classifierr0   _deduplicatorr6   _process_item
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr    r"   )selfr=   scoutitemrJ   @py_assert2@py_assert1@py_format4@py_format6@py_assert4@py_assert3@py_format8s               r   3test_process_item_returns_usecase_for_valuable_itemz=TestScout.test_process_item_returns_usecase_for_valuable_item8   s%   x(((<== LLNNKKK	< 	<L*E@P@R@RSSS	< 	< L,e*,,OOO	< 	<
 (((;;F	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< "!vT!!!!!!!!!!vT!!!!!!!!!!!!v!!!!!v!!!!!!T!!!!!!!!!!!!!!!!!!!!!!!!!#+t+#t++++++++++#t++++++++++++v+++++v++++++#++++t+++++++++++++++++++++++++++$,,$,,,,,,,,,,$,,,,,,,,,,,,v,,,,,v,,,,,,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,sZ   )C,1)CB>2C>CCCC	C,C	C,C	C,,C03C0c                 8   t          |          }t          d          }t          j        |j        dt                                5  |                    |g           }d d d            n# 1 swxY w Y   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}}d S )NrA   zHow do I use ChatGPT?rB   rC   rE   rP   )z%(py0)s is %(py3)srJ   rK   rN   rO   )r	   r   r   rT   rU   r'   rX   rY   rZ   r[   r\   r]   r^   r_   r`   )	ra   r=   rb   rc   rJ   rd   re   rf   rg   s	            r   1test_process_item_returns_none_for_low_value_itemz;TestScout.test_process_item_returns_none_for_low_value_itemG   ss   x(((011\%-\^^LLL 	< 	<(((;;F	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< v~vvvs   A,,A03A0c           	         ddl m} t          |          }t                      }t	          j        |j        dt                                5  t	          j        |j        dt                                5  t	          j        |j
        dt                                5  |                    |g           }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   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        }|j        }
 ||
          }||k    }|s9t          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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}x}
}d S )Nr   )make_idrA   rB   rC   rE   rG   rI   rJ   rK   rN   rO   ==)zh%(py2)s
{%(py2)s = %(py0)s.id
} == %(py9)s
{%(py9)s = %(py4)s(%(py7)s
{%(py7)s = %(py5)s.source_url
})
}ro   rc   )rL   rR   py4rO   rS   py9zassert %(py11)spy11)#ai_usecases_explorer.models.usecasero   r	   r   r   rT   rU   r%   rV   r0   rW   r6   rX   rY   rZ   r[   r\   r]   r^   r_   r`   idr   )ra   r=   ro   rb   rc   rJ   rd   re   rf   rg   @py_assert6@py_assert8ri   @py_format10@py_format12s                  r   %test_process_item_assigns_id_from_urlz/TestScout.test_process_item_assigns_id_from_urlP   s   ??????x((({{ LLNNKKK	< 	<L*E@P@R@RSSS	< 	< L,e*,,OOO	< 	<
 (((;;F	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< "!vT!!!!!!!!!!vT!!!!!!!!!!!!v!!!!!v!!!!!!T!!!!!!!!!!!!!!!!!!!!!!!!!y4DO4GGO444y44444444444y4444444444444v44444v444444y44444444444G44444G4444444444444D44444D444444O444444444444444444444444444444444444sZ   )C16)CC7CCC
CCC1C	C1!C	"C11C58C5r7   c                    t          |          }t          j        |j        dt	                      g          5  t          j        |j        dg           5  t          j        |j        dg           5  t          j        |j        dt                                5  t          j        |j	        dt                                5  t          j        |j        dt                                5  |                    dt          ddd          	           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   g }|j        }|j        } |            }| }|}	|s/|j        }
|
j        } |            }|j        }d
}||k    }|}	|sd}|}	|	sddt'          j                    v st+          j        |          rt+          j        |          ndt+          j        |          t+          j        |          t+          j        |          dz  }|                    |           |st+          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        |          t+          j        |          dz  }dd|iz  }|                    |           |s.ddt+          j        |          iz  }|                    |           t+          j        |d          i z  }dd|iz  }t7          t+          j        |                    d x}	x}x}x}x}x}x}
x}x}x}x}x}}d S )NrA   fetchrC   rB   T        dry_runreport_dater   z[not %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s.db_path
}.exists
}()
}r=   )rR   rr   py6py8rp   )z%(py19)s
{%(py19)s = %(py17)s
{%(py17)s = %(py15)s
{%(py15)s = %(py13)s
{%(py13)s = %(py11)s.db_path
}.stat
}()
}.st_size
} == %(py22)s)rt   py13py15py17py19py22z%(py24)spy24z%(py27)spy27   zassert %(py30)spy30)r	   r   rT   _hnr   _reddit_githubrU   r%   rV   r0   rW   r6   rB   r   r;   existsstatst_sizer[   r\   rY   r]   r^   appendrZ   _format_boolopr_   r`   )ra   r=   r7   rb   re   ri   @py_assert5@py_assert7@py_assert9@py_assert0@py_assert12@py_assert14@py_assert16@py_assert18@py_assert21@py_assert20@py_assert26ry   @py_format23@py_format25@py_format28@py_format29@py_format31s                          r   "test_run_dry_run_does_not_write_dbz,TestScout.test_run_dry_run_does_not_write_db`   s   x((( LG9;;-HHH	C 	CLbAAA	C 	C LbAAA	C 	C LLNNKKK		C 	C
 L*E@P@R@RSSS	C 	C L,e*,,OOO	C 	C IIdT1b0A0AIBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C	 	H$ 	$, 	,,.. 	.. 	. 	. 	(2B 	2B2G 	2G2G2I2I 	2I2Q 	UV 	2QUV2V 	 	 	 	 			 	 	 	 	 		 	 	 	 	  	 	 	 	
  	 	 	 	 	
 % 	 	 	
 - 	 	 	
 / 	 	 	 	 	 	 	V	VV / 	 		 	 	 	2QUV 	 	 	 	 		 	 	 	 	 3; 	 	 	 	
 3; 	 	 	 	 	
 3C 	 	 	
 3H 	 	 	
 3J 	 	 	
 3R 	 	 	
 VW 	 	 	 	 	 	 	 	 	 	 	 	 	V	VV	 	 	 	 	
t	 	 	 	 	 	V	VV		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   FE>4)E')E	)D9/'D"D9"D&&D9)D&*D9-E	9D==E	 D=E	E'EE'EE'E>'E++E>.E+/E>2F>F	FF	FFFc                    t          |          }t          j        |j        dt	                      g          5  t          j        |j        dg           5  t          j        |j        dg           5  t          j        |j        dt                                5  t          j        |j	        dt                                5  t          j        |j        dt                                5  |                    dt          ddd          	           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        d
z  }|j        } |            }|sddt#          j                    v st'          j        |          rt'          j        |          ndt'          j        |          t'          j        |          dz  }t-          t'          j        |                    d x}}d S )NrA   r}   rC   rB   Fr~   r   r   r   z2026-02-27.mdzAassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}report)rL   rR   rr   )r	   r   rT   r   r   r   r   rU   r%   rV   r0   rW   r6   rB   r   r<   r   r[   r\   rY   r]   r^   r_   r`   )ra   r=   r7   rb   r   re   ri   @py_format5s           r   test_run_writes_report_filez%TestScout.test_run_writes_report_filep   s
   x((( LG9;;-HHH	D 	DLbAAA	D 	D LbAAA	D 	D LLNNKKK		D 	D
 L*E@P@R@RSSS	D 	D L,e*,,OOO	D 	D IIedAr1B1BICCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D -?}}}vv}r   c                 <   t          |          }t                      }t          j        |j        dt                                5  t          j        |j        dt                                5  t          j        |j        dt                                5  |
                    |g           }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |r|j                            |           t          j        |j        d|g          5  t          j        |j        dg           5  t          j        |j        dg           5  t          j        |j        d          5 }|                    dt#          ddd	          
           |                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrA   rB   rC   rE   r}   Tr~   r   r   r   )r	   r   r   rT   rU   r%   rV   r0   rW   r6   rX   _dbsaver   r   r   rB   r   assert_not_called)ra   r=   rb   rc   rJ   mock_filters         r   #test_run_skips_already_stored_itemsz-TestScout.test_run_skips_already_stored_items   s   x((({{ LLNNKKK	< 	<L*E@P@R@RSSS	< 	< L,e*,,OOO	< 	<
 (((;;F	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<  	#INN6""" LG4&AAA	, 	,LbAAA	, 	, LbAAA	, 	, L..		, 3>IIdT1b0A0AIBBB))+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   )C+0)CB=1C=CCCCC+C	C+C	C++C/2C//HG9)G";G	?G"GG"GG"G9"G&&G9)G&*G9-H9G=	=H G=	HHH)__name__
__module____qualname__r   rk   rm   r{   r   r   r   r   r$   r   r   r?   r?   7   s        -H -Y] - - - -( W[    5h 54 5 5 5 5 8 t X\     H  QU     ,H , , , , , , ,r   r?   )r   )"__doc__builtinsr[   _pytest.assertion.rewrite	assertionrewriterY   r   r   r   pathlibr   unittest.mockr   pytest$ai_usecases_explorer.collectors.baser   ai_usecases_explorer.mainr	   ru   r
   r   ai_usecases_explorer.settingsr   strr   dictr%   r'   r0   r6   fixturer=   r?   r$   r   r   <module>r      s   & &               ( ( ( ( ( ( ( ( ( (              8 8 8 8 8 8 + + + + + + E E E E E E E E 2 2 2 2 2 2 S 7    nd n n n nnd n n n n$    TD T T T T t     `, `, `, `, `, `, `, `, `, `,r   