
    Dh%j*                         d dl Zd dlmc m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lmZmZ d dlmZ d dlmZmZmZmZmZmZmZ d d	lmZ d d
lmZ d Z dde!de!de"fdZ#d Z$d Z%d Z&d Z'd Z(d Z)d Z*dS )    N)Path)
TestClient)Sessionselect)get_settings)init_dbreset_db_for_tests)app)ActivityEvent	PostDraftProductionQueueItemProviderRevisionRequestReviewDecision
VideoAsset)PreparedPackageImporter)create_existing_upload_requestc                     t                      }d|_        | dz  |_        t          |          }t	          |           |t          t                    fS )Nz	sqlite://storage)r   database_urlstorage_rootr   r	   r   r
   )tmp_pathsettingsengines      U/home/agent/projects/AutoShorts_Dashboard/backend/tests/test_sprint88_quality_gate.pysetup_test_dbr      sL    ~~H'H$y0HXFv:c??""    package_quality_testitem_id
package_idreturnc                 *    |d| dddddddgdd	d
dddS )Nprepared_packagezQuality gated packageenzEveryday Red FlagsCaptionDescriptionz#onlinesafetyz%If the chatbot asks for a card, stop.TF)synthetic_mediacommercial_contentready_for_review)r    sourcequeue_item_idworking_titlelanguageseriessuggested_tiktok_captionsuggested_youtube_titlesuggested_youtube_descriptionsuggested_hashtagsscript
disclosurestatus )r   r    s     r   base_manifestr7      sC     $ 0&$-#:)6./9*.eLL$  r   c                    t          |           \  }}t          |          5 }t          ddddddd          }|                    |           |                                 |                    |           |                    t          |j        t          j	        dd	d
d                     |                    t          |j        t          j
        dd                     t          ddd|j        d          }|                    |           |                                 |                    |           |j        d d d            n# 1 swxY w Y   |                    d ddddgd                                          }|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}	}t          |          5 }|                    t                    }|                    t+          t                                        t          j        k                                                        }|                    t+          t                                        t          j        k                                                        }|                    t+          t4                                        t4          j        k                                                        }|j        }d}||k    }|st          j        d|fd"||f          dt9          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& |D             }t1          |          }|sd'd(t9          j                    v st          j        t0                    rt          j        t0                    nd(t          j        |          t          j        |          d)z  }
t#          t          j        |
                    d x}}|j        }d*}||k    }|st          j        d|fd"||f          d+t9          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-t9          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 d d            n# 1 swxY w Y   |                    d.                                          d/         }fd0|D             }t1          |          }|sd'd(t9          j                    v st          j        t0                    rt          j        t0                    nd(t          j        |          t          j        |          d)z  }
t#          t          j        |
                    d x}}d S )1Nz	bad-videopackage_badr#    badchecksumBadr)   candidate_idr    r*   	file_pathchecksumr,   r5   descprivatedraft)video_asset_idprovidertitledescriptionprivacy_statusr5   cap)rD   rE   captionr5   z	Bad queue	in_reviewmanualrF   r5   r*   rD   actual_package_id/api/videos/z/rejectzVisual quality below standardVisual qualityz
Voice-over)reason
categoriesjsonvideor5   rejected==z%(py1)s == %(py4)spy1py4assert %(py6)spy6z.%(py2)s
{%(py2)s = %(py0)s.status
} == %(py5)spy0py2py5assert %(py7)spy7c              3   ,   K   | ]}|j         d k    V  dS )rV   N)r5   ).0ds     r   	<genexpr>zOtest_reject_sets_video_drafts_and_queue_out_of_active_review.<locals>.<genexpr>;   s)      ::a18z)::::::r   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}all)ra   rb   r\   needs_changesqueuez0%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py5)sdecisionz#/api/videos?status=ready_for_reviewitemsc              3   0   K   | ]}|d          k    V  dS )idNr6   )rg   vvideo_ids     r   ri   zOtest_reject_sets_video_drafts_and_queue_out_of_active_review.<locals>.<genexpr>?   s,      22qqw("222222r   ) r   r   r   addcommitrefreshr   rq   r   youtubetiktokr   postrT   
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationgetexecr   whererD   rj   firstr   r5   @py_builtinslocals_should_repr_global_namern   )r   r   clientsessionrU   rl   result@py_assert0@py_assert3@py_assert2@py_format5@py_format7draftsrn   @py_assert1@py_assert4@py_format6@py_format8readyrs   s                      @r   <test_reject_sets_video_drafts_and_queue_out_of_active_reviewr   )   s"   "8,,NFF	 GVhtv  BO  _d  m  @  @  @EGNN,,,gooe.D.D.DIUX@PX]kq  CL  U\  ]  ]  ]  	^  	^  	^IUXY^gnoooppp#+kRZkpks  HU  V  V  VEGNN,,,gooe.D.D.D8               [[9999Kj  |L  NZ  {[  A\  A\[  ]  ]  b  b  d  dF'?8$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	 /GJ11fY//55i6NRZ6Z[[\\``bbV$788>>?R?aem?mnnoouuww<<~ 6 6 < <^=Z^f=f g ghhnnpp|)z)|z))))))))))|z))))))))))))u)))))u))))))|))))z)))))))))))))))))))))))))))::6::::s::::::::::::::::s:::::s:::::::::::::::::::::::::::::::|..|..........|............u.....u......|............................... .J. J.......... J............x.....x...... ....J.........................../ / / / / / / / / / / / / / / JJ<==BBDDWME2222E2222322222222222222223222223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2s%   DEEE$P#YYYc           
         t          |           \  }}t          |          5 }t          ddddddd          }|                    |           |                                 |                    |           t          d	d
d|j        d          }|                    |           |                                 |                    |           |j        }d d d            n# 1 swxY w Y   |                    d| dddgd          	                                }|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}
}	t          |          5 }|                    t!          t"                                        t"          j        |k                                                        }|                    t!          t*                                        t*          j        |k                                                        }|                    t!          t                                        t          j        |k                                                        }|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}	}d d d            d S # 1 swxY w Y   d S )%Nzneeds-change-videopackage_changer#   r:   changechecksumzNeeds Changer)   r=   zNeeds change queuerK   rL   rM   rO   z/request-changesz!Regenerate premium AI styleframesrP   )requested_changesrR   rS   rU   r5   rk   rW   rY   rZ   r]   r^   openr_   revisionr`   rd   re   )z9%(py2)s
{%(py2)s = %(py0)s.requested_changes
} == %(py5)srm   rn   rl   )r   r   r   rt   ru   rv   r   rq   ry   rT   rz   r{   r|   r}   r~   r   r   r   r   rD   r   r   r5   r   r   r   r   rn   )r   r   r   r   rU   rl   rs   r   r   r   r   r   r   r   rn   r   r   r   r   s                      r   Btest_request_changes_creates_revision_and_sets_queue_needs_changesr   B   s   "8,,NFF	 G(<IYbt  AC  N^  n|  EW  X  X  XEGNN,,,gooe.D.D.D#*>{[ctyt|  Qa  b  b  bEGNN,,,gooe.D.D.D8               [[BBBB  `C  Td  Se  Jf  Jf[  g  g  l  l  n  nF'?8$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	 /G<< 7 7 = =o>\`h>h i ijjpprr<<~ 6 6 < <^=Z^f=f g ghhnnppV$788>>?R?aem?mnnoouuww(&(&((((((((((&((((((((((((x(((((x((((((((((&((((((((((((((((((((((((((()P-PP)-PPPPPPPPPPP)-PPPPPPPPPPPPPxPPPPPxPPPPPP)PPPP-PPPPPPPPPPPPPPPPPPPPPPPPPPPP 3O3 O3333333333 O333333333333x33333x333333 3333O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|..|..........|............u.....u......|.............................../ / / / / / / / / / / / / / / / / /s%   B3C!!C%(C%6PWWWc                    t          |           \  }}| dz  }|                    d           t          |          5 }t          dddd          }|                    |           |                                 |                    |           t          |j        d          }d d d            n# 1 swxY w Y   t          t                      |                              ||          }t          |          5 }|                    t          |          }|                    t          |j                  }|                    t          t                                         t           j        d	k                                                        }	|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  }t7          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  }t7          t+          j        |                    d x}
x}}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  }t7          t+          j        |                    d x}
}d d d            d S # 1 swxY w Y   d S )N	input.mp4s   fake video byteszQuality missing	producingrL   package_missing_qualityrF   r5   r*   expected_package_idr   r   production_quality_failedneeds_internal_fixrW   r_   rU   r`   rd   re   item)is not)z%(py0)s is not %(py3)sevent)ra   py3zassert %(py5)src   )r   write_bytesr   r   rt   ru   rv   r7   rq   r   r   import_manifest_payloadr   r   r   r   r   r   
event_typer   r5   rz   r{   r   r   r   r|   r}   r~   )r   r   _source_videor   r   manifestrs   rU   r   r   r   r   r   r   r   @py_format4s                    r   Htest_import_queue_package_without_quality_report_is_not_ready_for_reviewr   V   s   h''IFAk)L0111	 EG"):;W_  vO  P  P  PD7>>+++W__T-B-B-B *CDDE E E E E E E E E E E E E E E 'vNNNffgoq}~~H	 !GJ11{{.88VM22889QUp9pqqrrxxzz|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3u33333u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{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2t22222t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  uD          uD            u     u      D                         ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s%   A'B//B36B3:J;OO	Oc           	         t          |           \  }}| dz  }|                    d           t          |          5 }t          dddd          }|                    |           |                                 |                    |           t          |j        d          }dddddddd	|d
<   dddd|d<   ddd|d<   d d d            n# 1 swxY w Y   t          t                      |                              ||          }t          |          5 }|                    t          |          }|                    t          t                                         t           j        |k    t           j        dk                                                        }	|j        }
d}|
|k    }|st-          j        d|fd|
|f          dt1          j                    v st-          j        |          rt-          j        |          ndt-          j        |
          t-          j        |          dz  }dd|iz  }t9          t-          j        |                    d x}
x}}|	j        d         }d}||k    }|slt-          j        d|fd||f          t-          j        |          t-          j        |          dz  }dd |iz  }t9          t-          j        |                    d x}x}}d d d            d S # 1 swxY w Y   d S )!Nr   s   fake video bytes passedzQuality passedr   rL   package_quality_passedr   passed)visual_gate
voice_gate	hook_gatemetadata_gatesafety_gatepackage_integrity_gateoverallquality
Chatterboxg{Gz?)voice_enginetranscript_matchwer_estimatevoice_qa   F)styleframespowerpoint_look	visual_qar   quality_report_importedr)   rW   r_   rU   r`   rd   re   r   rY   rZ   r]   r^   r   r   r   r   rt   ru   rv   r7   rq   r   r   r   r   r   r   r   r   r   	entity_idr   r   r5   rz   r{   r   r   r   r|   r}   r~   payload_jsonr   r   r   r   r   r   r   rs   rU   r   r   r   r   r   r   r   r   r   r   s                      r   Atest_import_queue_package_with_quality_passed_is_ready_for_reviewr   h   s   h''IFAk)L7888	 MG")9+V^  uM  N  N  ND7>>+++W__T-B-B-B *BCC#"!%#&.
 
 1=RZlpqq01e L LM M M M M M M M M M M M M M M 'vNNNffgoq}~~H	 9GJ11VM22889PT\9\^k^v  {T  _T  U  U  V  V  \  \  ^  ^|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1u11111u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11111111111!),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	9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s%   BCCCGK44K8;K8c                 F   t          |           \  }}| dz  }|                    d           t          |          5 }t          dddd          }|                    |           |                                 |                    |           t          |j        d          }dddddddd	d	d
d	d	d	dd|d<   dgd	d|d<   d d d            n# 1 swxY w Y   t          t                      |                              ||          }t          |          5 }|                    t          |          }|                    t          t                                         t           j        |k    t           j        dk                                                        }	|j        }
d}|
|k    }|st-          j        d|fd|
|f          dt1          j                    v st-          j        |          rt-          j        |          ndt-          j        |
          t-          j        |          dz  }dd|iz  }t9          t-          j        |                    d x}
x}}|	j        d         d         }d}||k    }|slt-          j        d|fd||f          t-          j        |          t-          j        |          dz  }dd |iz  }t9          t-          j        |                    d x}x}}|	j        d!         }d}||k    }|slt-          j        d|fd||f          t-          j        |          t-          j        |          dz  }dd |iz  }t9          t-          j        |                    d x}x}}|	j        d         d"         d#         }d
}||u }|slt-          j        d$|fd%||f          t-          j        |          t-          j        |          dz  }dd |iz  }t9          t-          j        |                    d x}x}}d d d            d S # 1 swxY w Y   d S )&Nr   s   fake video bytes visual failzVisual failr   rL   package_visual_failr   r   TF)premium_ai_styleframes_usedstyleframes_text_freeno_large_top_titleno_unnecessary_lower_third_dimno_powerpoint_layoutrenderer_owned_text_listed)r   r   r   r   r   r   r   checksr   zsmall subtitle)renderer_owned_textlarge_top_title_detectedr   r   r   r   rW   r_   rU   r`   rd   re   gatesr   failedrY   rZ   r]   r^   r   r   r   )is)z%(py1)s is %(py4)sr   r   s                      r   Etest_import_queue_package_with_forbidden_visual_overlay_fails_qualityr      s~   h''IFAk)L<===	 nG"{S[  rG  H  H  HD7>>+++W__T-B-B-B *?@@#"!%#&./3)-&+26(,.2 
 
" :J8Jhl m m+n n n n n n n n n n n n n n n, 'vNNNffgoq}~~H	 TGJ11VM22889PT\9\^k^v  {T  _T  U  U  V  V  \  \  ^  ^|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3u33333u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!'*=9EXE9XEEEEEEEEEE9XEEEEE9EEEEX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!),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45IJSeSJeSSSSSSSSSSJeSSSSSJSSSSe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T T T T T T T T T T T T T T T T T Ts%   BCCCK1PPPc                 r   t          |           \  }}t          |          5 }t          ddddddd          }|                    |           |                                 |                    |           t          |j        t          j	        dd	d
          }|                    |           |                                 |                    |           	 t          ||j                   d}|sOt          j        d          dz   dt          j        |          iz  }t          t          j        |                    d }nZ# t           $ rL}d}	d }
t#          ||	|
          }d}||k    }|st          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        |	          t          j        |
          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}	x}
x}x}}Y d }~nd }~ww xY wd d d            d S # 1 swxY w Y   d S )Nzrejected-uploadpackage_rejectedr#   r:   rejectuploadchecksumRejectedrV   r=   rA   rB   )rD   rE   rF   rG   rH   Fzexpected blocked upload requestz
>assert %(py1)sr[   status_codei  rW   )zC%(py7)s
{%(py7)s = %(py0)s(%(py1)s, %(py3)s, %(py5)s)
} == %(py10)sgetattrexc)ra   r[   r   rc   re   py10zassert %(py12)spy12)r   r   r   rt   ru   rv   r   rq   r   rw   r   rz   _format_assertmsgr|   r}   r~   	Exceptionr   r{   r   r   r   )r   r   r   r   rU   rC   r   @py_format2r   r   r   @py_assert6@py_assert9@py_assert8@py_format11@py_format13s                   r   0test_rejected_video_cannot_create_upload_requestr      sF   h''IFA	 	<G(9FXas  @B  Mc  s}  FP  Q  Q  QEGNN,,,gooe.D.D.DH<LT^lr  DM  N  N  NEGNN,,,gooe.D.D.D	<*7EH===;5;;;;;;;;;;;5;;;;;;;;;;;;;;;;; 	< 	< 	< -;t;73t44;;4;;;;;;;;;;4;;;;;;;;;;;;7;;;;;7;;;;;;;;;;;;;3;;;;;3;;;;;;;;;;t;;;;4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	<	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s>   B6J,A*EJ,JEJJ,JJ,,J03J0c                    t          |           \  }}|                    ddddd                                          }|                    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         }||v }|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         }||v }|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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 )Nz/api/production-queueNextlocked_nextrL   )rF   r5   r*   rS   z/api/agent/production/nextr+   rq   rW   rY   rZ   r]   r^   quality_profileversionzautoshorts-quality-v1.1visual_policy)in)z%(py1)s in %(py4)sr   visual_checks_requireddirector_skillzAutoShorts Director Quality v1z!docs/director-production-skill.mdT)namedocrequired)	r   ry   rT   r   rz   r{   r|   r}   r~   )
r   r   r   r   nxtr   r   r   r   r   s
             r   ;test_agent_next_delivers_quality_profile_and_director_skillr      s   h''IAv;;.vQ^jr5s5s;ttyy{{D
**1
2
2
7
7
9
9C-4:-:----------:---------:--------------------------- !),I0II,0IIIIIIIIIII,0IIIIII,IIII0IIIIIIIIIIIIIIIIIIIIIIIIIIII4c"3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S3'8#9:R#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SSSSSSSSSSSSS   M-MVy  HL  %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r   )r   )+builtinsr   _pytest.assertion.rewrite	assertionrewriterz   pathlibr   fastapi.testclientr   sqlmodelr   r   app.core.configr   app.db.sessionr   r	   app.mainr
   app.models.corer   r   r   r   r   r   r   'app.services.importers.prepared_packager   app.services.upload_requestsr   r   strdictr7   r   r   r   r   r   r   r   r6   r   r   <module>r	     s                       ) ) ) ) ) ) $ $ $ $ $ $ $ $ ( ( ( ( ( ( 6 6 6 6 6 6 6 6       A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A K K K K K K G G G G G G# # # 3 C T    $3 3 32/ / /(! ! !$9 9 96!T !T !TH< < <M M M M Mr   