
    j                         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 d dlmZ d dlmZ d dlmZ d dlmZmZmZ d	 Zd
 Zd Zd Zd Zd ZdS )    N)create_content_brief)create_script_draft)!convert_script_draft_to_candidate)build_render_manifest)build_html_preview)create_shot_plan)SocialMediaDraftbuild_social_media_draftvalidate_social_media_draftc                      t          dddd          } t          |           }t          | |          }t          t	          t          |                              }||fS )Nai_life_systemsAI weekly review routinez4I use AI tools but still lose control of priorities.z>a 10-minute Sunday review that keeps AI as assistant, not boss)	pillar_idtopicaudience_problempayoff)r   r   r   r   r   r   )briefscript	candidatepreviews       Q/home/agent/jarvis_runtime/autoshortsbot/AutoShortsBot/tests/test_social_draft.py_candidate_and_previewr      sj     #(OO	  E !''F1%@@I !67G7O7O!P!PQQGg    c                  .   t                      \  } }t          | |          }t          |t                    }|sd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dt	          j                    v st          j        t                    rt          j        t                    ndt          j        |          dz  }t          t          j
        |                    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        }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        }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        }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        }	||	k    }|st          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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}}|j        }| j        }	||	k    }|st          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t          j        |	          dz  }
dd|
iz  }t          t          j
        |                    d x}x}}	|j        }| j        }	||	k    }|st          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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}}|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        }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        }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&}|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 ),Nz5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancedraftr	   )py0py1py2py4z,ai_life_systems-ai-weekly-review-routine-35s==)z4%(py2)s
{%(py2)s = %(py0)s.candidate_id
} == %(py5)sr   r   py5assert %(py7)spy7)youtubetiktok	instagram)z1%(py2)s
{%(py2)s = %(py0)s.platforms
} == %(py5)s)zYouTube ShortsTikTokzInstagram Reels)z7%(py2)s
{%(py2)s = %(py0)s.platform_labels
} == %(py5)s)r   z4If AI runs your week, you have already lost control.)z6%(py2)s
{%(py2)s = %(py0)s.title_variants
} == %(py5)s)zL%(py2)s
{%(py2)s = %(py0)s.caption
} == %(py6)s
{%(py6)s = %(py4)s.caption
}r   )r   r   r    py6zassert %(py8)spy8)z#AIz#LifeSystemsz#Productivity)z0%(py2)s
{%(py2)s = %(py0)s.hashtags
} == %(py5)s)zD%(py2)s
{%(py2)s = %(py0)s.cta
} == %(py6)s
{%(py6)s = %(py4)s.cta
})zF%(py2)s
{%(py2)s = %(py0)s.hook
} == %(py6)s
{%(py6)s = %(py4)s.hook
}#   )z@%(py2)s
{%(py2)s = %(py0)s.planned_duration_seconds
} == %(py5)szHTML timeline preview available)z9%(py2)s
{%(py2)s = %(py0)s.preview_reference
} == %(py5)shtml_timeline)z4%(py2)s
{%(py2)s = %(py0)s.preview_type
} == %(py5)sTis)z?%(py2)s
{%(py2)s = %(py0)s.requires_human_approval
} is %(py5)s )z4%(py2)s
{%(py2)s = %(py0)s.side_effects
} == %(py5)szQuality average: 8.0in)z<%(py1)s in %(py5)s
{%(py5)s = %(py3)s.quality_risk_summary
}r   py3r$   zAI-slop risk: 3zPolicy risk: low)r   r
   r   r	   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanationcandidate_id_call_reprcompare	platformsplatform_labelstitle_variantscaptionhashtagsctahookplanned_duration_secondspreview_referencepreview_typerequires_human_approvalside_effectsquality_risk_summary)r   r   r   @py_assert3@py_format5@py_assert1@py_assert4@py_format6@py_format8@py_assert5@py_format7@py_format9@py_assert0@py_assert2s                 r   ?test_build_social_media_draft_creates_approval_first_post_draftrW      s   /11Iw$Y88Ee-...............:.....:.............e.....e.............-.....-........................O!OO!OOOOOOOOOOO!OOOOOOOOOOOOO5OOOOO5OOOOOOOOOO!OOOOOOOOOOOOOOOOOOOOOOOOOOOO?@@@?@@@@@@@@@@@?@@@@@@@@@@@@@5@@@@@5@@@@@@?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ S$SS $SSSSSSSSSSS $SSSSSSSSSSSSS5SSSSS5SSSSSS SSSS$SSSSSSSSSSSSSSSSSSSSSSSSSSSS  $  $         $                         $                          =-I--=-----------=-------------5-----5------=-----------I-----I---------------------------------->EEE>EEEEEEEEEEE>EEEEEEEEEEEEE5EEEEE5EEEEEE>EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE9%	%9%%%%%%%%%%9%%%%%%%%%%%%5%%%%%5%%%%%%9%%%%%%%%%%%	%%%%%	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%:'':'''''''''':''''''''''''5'''''5'''''':''''''''''''''''''''''''''''''''''''''''''''''''')/R/)R//////////)R////////////5/////5//////)////R///////////////////////////"G&GG"&GGGGGGGGGGG"&GGGGGGGGGGGGG5GGGGG5GGGGGG"GGGG&GGGGGGGGGGGGGGGGGGGGGGGGGGGG00000000000000000000000050000050000000000000000000000000000000000000(0D0(D0000000000(D0000000000005000005000000(0000D000000000000000000000000000########################5#####5#####################################!?U%??!%???????????!%??????!???????????U?????U??????%????????????????????????????: :: ::::::::::: :::::::::::::::::::::::::::: ::::::::::::::::::::::::::::;!;;!;;;;;;;;;;;!;;;;;;;;;;;;;;;;;;;;;;;;;;;;!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r   c                  b   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/   z0%(py2)s
{%(py2)s = %(py0)s.is_valid
} is %(py5)sresultr#   r%   r&   r1   r!   )z.%(py2)s
{%(py2)s = %(py0)s.errors
} == %(py5)s)r   r   r
   is_validr8   r>   r6   r7   r9   r:   r;   r<   errors)r   r   rZ   rN   rO   rL   rP   rQ   s           r   6test_validate_social_media_draft_accepts_default_draftr]   8   s   /11Iw()A)W)U)UVVF?"d"?d""""""""""?d""""""""""""6"""""6""""""?""""d"""""""""""""""""""""""""""=B=B=B66=Br   c                     t                      \  } } t          |          d|j        |j        |j        |j        |j                  }t          j        t          d          5  t          | |           d d d            d S # 1 swxY w Y   d S )Nzother-script)	script_idtitlerH   htmlrJ   external_callsz3preview script_id must match candidate source brief)match)r   typer`   rH   ra   rJ   rb   pytestraises
ValueErrorr
   )r   r   
mismatcheds      r   Btest_build_social_media_draft_rejects_preview_for_different_scriptri   A   s    /11Iwg m)\)-  J 
z)^	_	_	_ 8 8 J7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   $BB	Bc                     t                      \  } }t          | |          }t          |j        |j        |j        |j        |j        |j        |j	        |j
        |j        |j        |j        |j        d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}
|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 )NF)platform_uploadr=   r?   r@   rA   rB   rC   rD   rE   rF   rK   rG   rH   rI   rJ   r/   rY   rZ   r#   r%   r&   zhuman approval is requiredr2   z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.errors
}r4   z.social media drafts must not have side effects)r   r
   r	   r=   r?   r@   rA   rB   rC   rD   rE   rF   rK   rG   rH   r   r[   r8   r>   r6   r7   r9   r:   r;   r<   r\   )r   r   r   unsaferZ   rN   rO   rL   rP   rQ   rU   rV   s               r   Jtest_validate_social_media_draft_rejects_missing_approval_and_side_effectsro   P   s0   /11Iw$Y88E'/-+IZ!&!?"71' %)  F" )00F?#e#?e##########?e############6#####6######?####e###########################'86=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86888886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;Lv}L;}LLLLLLLLLL;}LLLLL;LLLLLLLLLLLvLLLLLvLLLLLL}LLLLLLLLLLLLLLLLLLLLLLLLLLLLLr   c                  F   t          ddddddddddddd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}|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}|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}|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 )linkedin)LinkedInr1   	   Trl   Fr/   rY   rZ   r#   r%   r&   zcandidate_id is requiredr2   rm   r4   zunsupported platform: linkedinz&at least one title variant is requiredzcaption is requiredz at least one hashtag is requiredzcta is requiredzhook is requiredz3planned_duration_seconds must be between 10 and 180z quality_risk_summary is requiredzpreview_reference is requiredzpreview_type is required)r	   r   r[   r8   r>   r6   r7   r9   r:   r;   r<   r\   )	r   rZ   rN   rO   rL   rP   rQ   rU   rV   s	            r   Ntest_validate_social_media_draft_rejects_unsupported_platform_and_blank_fieldsru   k   s
   %!" $  E" )//F?#e#?e##########?e############6#####6######?####e###########################%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66666666666666666666+<v}<+}<<<<<<<<<<+}<<<<<+<<<<<<<<<<<v<<<<<v<<<<<<}<<<<<<<<<<<<<<<<<<<<<<<<<<<3Dv}D3}DDDDDDDDDD3}DDDDD3DDDDDDDDDDDvDDDDDv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 1FM1 M1111111111 M11111 11111111111F11111F111111M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->>->>>>>>>>>>->>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>------------------------------------------------------------------..................................................................@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->>->>>>>>>>>>->>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*;fm;*m;;;;;;;;;;*m;;;;;*;;;;;;;;;;;f;;;;;f;;;;;;m;;;;;;;;;;;;;;;;;;;;;;;;;;;%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6666666666666666666666r   )builtinsr6   _pytest.assertion.rewrite	assertionrewriter8   re   autoshorts.content.briefr   autoshorts.content.script_draftr   autoshorts.content.to_candidater   autoshorts.rendering.manifestr   autoshorts.rendering.previewr   autoshorts.rendering.shot_planr   autoshorts.social.draftr	   r
   r   r   rW   r]   ri   ro   ru   r1   r   r   <module>r      s-                 9 9 9 9 9 9 ? ? ? ? ? ? M M M M M M ? ? ? ? ? ? ; ; ; ; ; ; ; ; ; ; ; ;         
 
 
< < <6  8 8 8M M M67 7 7 7 7r   