
    j                         d dl Zd dlmc mZ d dlmZmZm	Z	m
Z
mZ d dlmZ d dlmZ defdZdefdZd Zd	 Zd
 Zd Zd Zd Zd ZdS )    N)ContentPillarDEFAULT_PILLARSfind_pillar"validate_candidate_against_pillarsvalidate_pillar_registry)VideoCandidateScriptQualityScorereturnc                  ,    t          dddddd          S )N	         low)hook_strengthnoveltyclarity	retentionai_slop_riskpolicy_riskr	        L/home/agent/jarvis_runtime/autoshortsbot/AutoShortsBot/tests/test_pillars.py_scorer      s+       r   c                  ~    ddddddddd	d
dt                      ddd}|                    |            t          di |S )Nzdelivery-sms-trap-35stext_delivery_scamszDelivery SMS Trapyoutubetiktok#   z1This delivery text is designed to make you panic.zVShow a fake delivery SMS, reveal pressure as the red flag, then open the app yourself.zLPhone SMS mockup with urgent fee, suspicious link, and screenshot checklist.z!If it makes you hurry, slow down.z)Follow for one red flag before you click.)z#ScamAwarenessz#CyberSafety)z0No real brands, URLs, QR codes, or phone numberszEBeginner delivery-scam screens create higher saves and family shares.)candidate_idpillartitle	platformsduration_secondshookscript_outlinevisual_conceptcaptionctahashtagsquality_scorepolicy_notes
hypothesisr   )r   updater   )	overridesdatas     r   
_candidater2      sd    /'$*Crh6:6M] D  	KK	!!D!!!r   c                     t          dt                    } 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}| j
        }|j        } |            }||v }|st          j        d	|fd
||f          t          j        |          dt	          j                    v st          j        |           rt          j        |           ndt          j        |          t          j        |          t          j        |          dz  }	dd|	iz  }
t          t          j	        |
                    d x}x}x}x}}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}}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}}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}}d S )Nr   )is not)z%(py0)s is not %(py3)sr"   )py0py3assert %(py5)spy5deliveryin)zh%(py1)s in %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.positioning
}.casefold
}()
})py1r6   r8   py7py9zassert %(py11)spy11c              3      K   | ]}d |v V  	dS )zone normal screenNr   ).0rules     r   	<genexpr>zOtest_default_registry_contains_digital_red_flags_positioning.<locals>.<genexpr>1   s(      KKt"d*KKKKKKr   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}any)r5   py2py4z0beautiful AI visuals with no visible viewer pain)z-%(py1)s in %(py5)s
{%(py5)s = %(py3)s.no_go
}r<   r6   r8   assert %(py7)sr=   r   )z4%(py1)s in %(py5)s
{%(py5)s = %(py3)s.platform_fit
})r   r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationpositioningcasefoldvisual_rulesrD   no_goplatform_fit)r"   @py_assert2@py_assert1@py_format4@py_format6@py_assert0@py_assert4@py_assert6@py_assert8@py_format10@py_format12@py_assert3@py_format5@py_format8s                 r   <test_default_registry_contains_digital_red_flags_positioningrc   ,   sw   .@@F66666+6+4644666:66666666666:666666:6666666666666666666666+66664666666666666666666666666666666666666KKv7JKKKK3KKKKKKKKKKKKKKKK3KKKKK3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=MM=MMMMMMMMMM=MMMMM=MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM+++9+++++++++++9++++++9++++++++++++++++++++++++++++++++++++++++++++++++++++r   c                     d t           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}|| 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 S )Nc                     h | ]	}|j         
S r   )	pillar_id)rA   r"   s     r   	<setcomp>z^test_default_registry_prioritizes_scam_self_defense_pillars_not_ai_workflow.<locals>.<setcomp>7   s    AAAv&"AAAr   r   r:   )z%(py1)s in %(py3)s
pillar_ids)r<   r6   r7   r8   login_account_trapspayment_invoice_red_flagsmarketplace_buyer_scamsfake_support_popup_scamsai_life_systems)	r   rI   rJ   rN   rK   rL   rM   rO   rP   )rh   rZ   rV   rX   rY   s        r   Ktest_default_registry_prioritizes_scam_self_defense_pillars_not_ai_workflowrn   6   s   AAAAAJ . J.......... J..... ...........J.....J........................... . J.......... J..... ...........J.....J...........................&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444444444444444444444444$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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222%3%3333333333%33333%3333333333333333333333333333333333333333333*
**********
****************
*****
*****************************r   c                     t          ddddddddd	
	  	        } t          ddddddddd	
	  	        }t          | |f          }|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}|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}	}d S )Ndupznormal usersfirstclearr&   rB   nor   
newsletter	rf   audiencerQ   tonehook_patternsrS   rT   rU   monetization_anglesecondFisz0%(py2)s
{%(py2)s = %(py0)s.is_valid
} is %(py5)sresultr5   rE   r8   rH   r=   zpillar ids must be uniquer:   z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.errors
}rG   r   r   is_validrI   rJ   rK   rL   rM   rN   rO   rP   errors)
rq   r   r   rW   r[   r`   rY   rb   rZ   rV   s
             r   5test_pillar_registry_validation_rejects_duplicate_idsr   A   s8   !'
 
 
E !'
 
 
F &ufo66F?#e#?e##########?e############6#####6######?####e###########################&7&-7&-7777777777&-77777&77777777777&77777&777777-77777777777777777777777777777r   c                  H   t          t                      t                    } | 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}||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}}d S )NTr   r   r   r   rH   r=   r   )==)z.%(py2)s
{%(py2)s = %(py0)s.errors
} == %(py5)sr   r2   r   r   rI   rJ   rK   rL   rM   rN   rO   rP   r   )r   rW   r[   r`   rY   rb   s         r   3test_candidate_passes_known_pillar_and_platform_fitr   _   s   /
oNNF?"d"?d""""""""""?d""""""""""""6"""""6""""""?""""d"""""""""""""""""""""""""""=B=B=B66=Br   c                  H   t          t          d          t                    } | 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
}| 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}}d S )Nunknown_pillar)r"   Fr   r   r   r   rH   r=   zunknown pillar: unknown_pillarr:   r   rG   r   )r   rW   r[   r`   rY   rb   rZ   rV   s           r   %test_candidate_rejects_unknown_pillarr   f   s   /*+++_ F ?#e#?e##########?e############6#####6######?####e###########################+<v}<+}<<<<<<<<<<+}<<<<<+<<<<<<<<<<<v<<<<<v<<<<<<}<<<<<<<<<<<<<<<<<<<<<<<<<<<<<r   c                  r   t          ddddddddd	
	  	        f} t          t          dd          |           }|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}|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}}d S )Nnarrowzspecific audienceznarrow test pillarrr   rt   ru   rv   rx   ry   rz   r   )r"   r$   Fr   r   r   r   rH   r=   z3platform tiktok is not configured for pillar narrowr:   r   rG   )r   r   r2   r   rI   rJ   rK   rL   rM   rN   rO   rP   r   )	registryr   rW   r[   r`   rY   rb   rZ   rV   s	            r   2test_candidate_rejects_platform_not_fit_for_pillarr   o   s   (,#"%+
	
 
	
 
	
H 0(.CDDDh F ?#e#?e##########?e############6#####6######?####e###########################@QFMQ@MQQQQQQQQQQ@MQQQQQ@QQQQQQQQQQQFQQQQQFQQQQQQMQQQQQQQQQQQQQQQQQQQQQQQQQQQQQr   c                     t          ddddddddd	  	        } t          | f          }|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}|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}}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}}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}}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}}d S )N r   rz   Fr   r   r   r   rH   r=   zpillar_id is requiredr:   r   rG   zaudience is requiredz%at least one hook pattern is requiredz%at least one platform fit is requiredr   )	r"   r   rW   r[   r`   rY   rb   rZ   rV   s	            r   =test_registry_validation_rejects_empty_required_pillar_fieldsr      s   
 
 
F &vi00F?#e#?e##########?e############6#####6######?####e###########################"3fm3"m3333333333"m33333"33333333333f33333f333333m333333333333333333333333333!2V]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2V22222V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222222CfmC2mCCCCCCCCCC2mCCCCC2CCCCCCCCCCCfCCCCCfCCCCCCm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2CfmC2mCCCCCCCCCC2mCCCCC2CCCCCCCCCCCfCCCCCfCCCCCCm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Cr   )builtinsrK   _pytest.assertion.rewrite	assertionrewriterI   autoshorts.config.pillarsr   r   r   r   r   autoshorts.ideas.candidater   autoshorts.scripting.qualityr
   r   r2   rc   rn   r   r   r   r   r   r   r   r   <module>r      s>                               6 5 5 5 5 5 ; ; ; ; ; ;"    "~ " " " "*, , ,+ + +8 8 8<  = = =R R R.D D D D Dr   