
    p"j}                        d dl mZ d dlZd dlmc mZ d dlZd dl	m
Z
 d dlZd dlmZmZmZmZmZmZ dd	Zdd
ZddZddZddZddZddZddZdS )    )annotationsN)Path)build_update_gatebuild_website_candidatebuild_website_companion_packageexport_companion_candidateresolve_review_video_pathvalidate_companion_spectmp_pathr   returndict[str, object]c                    | dz  }|                     d           ddddddt          |          t          | d	z            d
S )Nz
review.mp4s
   fake-videoerf-018-fake-reviewsv1zFake Reviews Have One Easy Tellz	video-shazpack-shazNAPPROVED_FOR_PRIVATE_YOUTUBE_UPLOAD erf-018-fake-reviews v1 video-sha pack-shazmissing.mp4)candidate_idversiontitlesha256posting_pack_sha256approval_commandmedia_cache_pathoutput)write_bytesstr)r   videos     V/home/agent/jarvis_runtime/autoshortsbot/AutoShortsBot/tests/test_website_companion.pyreview_packager      sZ    |#E	m$$$.2)lJJh.//	 	 	    c                     i dddddddddd	d
dddddddddddddgddgdd ddddgdd d d!d"d#d$d%S )&Nidfake-reviewsslugr   z7Fake Reviews: What to check before you trust five stars
shortTitleFake Reviewshookz:A wall of perfect reviews can make a risky shop feel safe.categoryzShopping Red Flags	riskLevelmediumvisibleScreenzIA shopping page with many similar five-star reviews and repeated phrases.redFlagzCMany reviews sound copied, vague, or posted in a short time window.
whyItWorksz#People use reviews as social proof.	saferMovez0Read the newest low-star reviews before you buy.ifAlreadyClickedz1Save the receipt and watch for shipping problems.	checklistz#Do many reviews use the same words?videoUrlvisualBriefzpDirect phone-screen view of a suspicious review section; no fake brands, no real URLs, readable example UI only.relateddelivery-sms-traptoolRelevancezUsually no tool is required.z0Fake reviews: red flags before you trust ratingsz2Learn how fake reviews make risky shops look safe.z)Fake Reviews: One red flag before you buyz5Fake reviews make a risky shop look safer than it is.)affiliateCategoryseoTitlemetaDescriptionsocialTitlebody r9   r   r   companion_specr:   !   s   n 	J 	n	
 	L 	( 	X 	d 	X 	; 	G 	PQ 	;< 	D 	  J  	'(!" 	7#$ "FOBG-   r   Nonec                    t          dddt                                } | 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}||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}||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g}||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    }|slt          j        d|fd||f          t          j        |          t          j        |          d	z  }d
d|iz  }t          t          j        |                    d x}x}}| d         }|j        }d} ||          }|ssdt          j        |          t          j        |          t          j        |          t          j        |          dz  }t          t          j        |                    d x}x}x}}d S )Nr   r   )r   r   reviewspecr"   r!   ==z%(py1)s == %(py4)spy1py4assert %(py6)spy6sourcer   r   r1   r2   screenImageAltr)   r0   zDirect phone-screen viewLassert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.startswith
}(%(py5)s)
}rD   py3py5py7)r   r:   
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanation
startswith)		candidate@py_assert0@py_assert3@py_assert2@py_format5@py_format7@py_assert4@py_assert6@py_format8s	            r   1test_build_website_candidate_merges_review_sourcer^   <   sU   '@Vcg/h/ho}oo  A  A  AIV................................................X~.H2HH.2HHHHHHHHHHH.2HHHHHH.HHHH2HHHHHHHHHHHHHHHHHHHHHHHHHHHHXy)1T1)T1111111111)T11111)1111T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Y8$7#88#88888888888#8888888888#8888888888888888888888888888%&K.*:*:?*KK&*KKKKKKKKKKK&*KKKKKK&KKKK*KKKKKKKKKKKKKKKKKKKKKKKKKKKK]#J#.J/IJ../IJJJJJJJJ#JJJJ.JJJJ/IJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJr   c                     t                      } | d= t          j        t          d          5  t	          |            d d d            d S # 1 swxY w Y   d S )Nr,   )match)r:   pytestraises
ValueErrorr
   )r?   s    r   ;test_validate_companion_spec_rejects_missing_required_fieldrd   G   s    D[	z	5	5	5 & &%%%& & & & & & & & & & & & & & & & & &s   A

AAc                   t          |           }t          |          }|d         }t          |          }t          |          }||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	        |          dt          j                    v st	          j        t                    rt	          j	        t                    nd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}x}}d S )Nr   r@   )zp%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py12)s
{%(py12)s = %(py5)s(%(py10)s
{%(py10)s = %(py6)s(%(py8)s)
})
}r	   r>   r   r   )py0rD   rL   rM   rG   py8py10py12zassert %(py14)spy14)r   r	   r   r   rO   rP   @py_builtinslocals_should_repr_global_namerQ   rR   rS   )	r   r>   rX   @py_assert7@py_assert9@py_assert11r[   @py_format13@py_format15s	            r   ;test_resolve_review_video_path_prefers_existing_media_cachers   O   s   H%%F$V,,U@R9SUS9S5T5TU5T0U0UU,0UUUUUUUUUUU,0UUUUUUUUUUUUU$UUUUU$UUUUUUUUUUUUUVUUUUUVUUUUUU,UUUUUUUUUUUUUUUUUUUUUUUUUUUUUSUUUUUSUUUUUU9SUUUU5TUUUU0UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUr   c                n	   | dz  }| dz  }| dz  }|                     t          j        t          |                     d           |                     t          j        t	                                d           t          |||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        }t          j        |                                          d         }
t%          |
          }||k    }|st          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        t$                    rt          j        t$                    ndt          j        |
          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}x}
}|j        }|j        } |            }
|
sddt          j
                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |
          dz  }t          t          j        |                    d x}x}}
t          j        |j                            d                    }|d         d         }|j        }d} ||          }|ssdt          j        |          t          j        |          t          j        |          t          j        |          dz  }	t          t          j        |	                    d x}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 S )"Nreview.json	spec.jsonwebsiteutf-8encodingFreview_package_pathcompanion_spec_pathwebsite_rootrun_generatorr!   r@   )z,%(py2)s
{%(py2)s = %(py0)s.slug
} == %(py5)splanrf   py2rM   assert %(py7)srN   r   )zP%(py2)s
{%(py2)s = %(py0)s.video_path
} == %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}r   )rf   r   rE   rG   rg   zassert %(py10)srh   zjassert %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.candidate_json_path
}.exists
}()
}rf   r   rE   rG   rH   r   #APPROVED_FOR_PRIVATE_YOUTUBE_UPLOADrJ   rK   r#   r$   rB   rC   rF   rG   )
write_textjsondumpsr   r:   r   r"   rO   rP   rk   rl   rm   rQ   rR   rS   
video_pathloads	read_textr   candidate_json_pathexistsrT   )r   review_path	spec_pathr~   r   @py_assert1r[   rW   @py_format6r]   @py_assert5rn   @py_format9@py_format11rZ   payloadrV   rX   r\   rY   s                       r   =test_export_companion_candidate_writes_website_candidate_jsonr   U   s   ]*K;&Ii'L4:nX&>&>??'RRRN$4$455HHH%'%!	  D 9&&9&&&&&&&&&&9&&&&&&&&&&&&4&&&&&4&&&&&&9&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&?[4:k.C.C.E.E#F#FGY#Z[d#Z[[[?[[[[[[[[[[[?[[[[[[[[[[[[[4[[[[[4[[[[[[?[[[[[[[[[[[d[[[[[d[[[[[[#Z[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[#,#*,**,,,,,,,,,,,,,,,4,,,,,4,,,,,,#,,,,*,,,,,,,,,,,,,,,,,,,,,,,,,,j1;;W;MMNNG8/0b0;b<ab;;<abbbbbbbb0bbbb;bbbb<abbbbbbbbbbbbbbbbbbbbbbbbbbbb< 2N2 N2222222222 N22222 2222N22222222222222222222222222222r   c           
        t          |           }t          |t                                }d|d<   t          ||t	          t          |d                                       }|j        }| }|sxddt          j                    v st          j
        |          rt          j        |          ndt          j        |          dz  }t          t          j        |                    d x}}|j        }| }|sxddt          j                    v st          j
        |          rt          j        |          ndt          j        |          dz  }t          t          j        |                    d x}}|j        }|sxd	dt          j                    v st          j
        |          rt          j        |          ndt          j        |          dz  }t          t          j        |                    d }d S )
Nr=   z%A fake page sends you to badsite.com.r*   r   z/assert not %(py2)s
{%(py2)s = %(py0)s.allowed
}gaterf   r   z9assert not %(py2)s
{%(py2)s = %(py0)s.no_real_scam_data
}:assert %(py2)s
{%(py2)s = %(py0)s.website_payload_sha256
})r   r   r:   r   r   r   allowedrk   rl   rO   rm   rQ   rR   rS   no_real_scam_datawebsite_payload_sha256)r   r>   rU   r   r   rW   @py_format4@py_format3s           r   ,test_build_update_gate_blocks_unsafe_payloadr   k   s   H%%F'vN<L<LMMMIBIiVYS@R9S5T5T0U0UVVD||tt|%%%%%%%%%%%%%%%%%t%%%%%t%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&4&&&&&4&&&&&&&&&&&&&&&&&&&&&&&&&&r   c                   | dz  }| dz  }| dz  }|                     t          j        t          |                     d           |                     t          j        t	                                d           t          |||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        } |            }
|
sddt          j
                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |
          d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}}|j        }|sxddt          j
                    v st          j        |          rt          j        |          ndt          j        |          dz  }t          t          j        |                    d }d S )Nru   rv   rw   rx   ry   Fr{   r   r@   )z4%(py2)s
{%(py2)s = %(py0)s.candidate_id
} == %(py5)spackager   r   rN   zhassert %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.page_payload_json
}.exists
}()
}r   )is)z6%(py2)s
{%(py2)s = %(py0)s.update_allowed
} is %(py5)sr   r   )r   r   r   r   r:   r   r   rO   rP   rk   rl   rm   rQ   rR   rS   page_payload_jsonr   update_allowedr   )r   r   r   r~   r   r   r[   rW   r   r]   r   rZ   r   s                r   0test_website_companion_package_is_approval_boundr   w   s   ]*K;&Ii'L4:nX&>&>??'RRRN$4$455HHH-'%!	  G 9#99#99999999999#999999999999979999979999999999#9999999999999999999999999999$-$+-++---------------7-----7------$----+--------------------------!*U*!U**********!U************7*****7******!****U***************************))))))))))))))7)))))7))))))))))))))))))))))))))r   )r   r   r   r   )r   r   )r   r;   )r   r   r   r;   )
__future__r   builtinsrk   _pytest.assertion.rewrite	assertionrewriterO   r   pathlibr   ra   autoshorts.website_companionr   r   r   r   r	   r
   r   r:   r^   rd   rs   r   r   r   r9   r   r   <module>r      sW   " " " " " "                                          6K K K K& & & &V V V V3 3 3 3,	' 	' 	' 	'* * * * * *r   