
    W$j-                         d dl Zd dlmc 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 d Zd	e	fd
Zd Zd Zd Zd Zd ZdS )    N)
TestClient)Sessionselect)get_settings)init_dbreset_db_for_tests)app)ActivityEvent
ApiCallLog	PostDraftProviderTikTokUploadAttempt
VideoAssetc                     t                      }d|_        | dz  |_        d |_        d |_        t          |          }t          |           |t          t                    fS )Nz	sqlite://storage)	r   database_urlstorage_roottiktok_client_idtiktok_client_secretr   r   r   r	   )tmp_pathsettingsengines      \/home/agent/projects/AutoShorts_Dashboard/backend/tests/test_sprint83_tiktok_verification.pysetup_test_dbr   
   s\    ~~H'H$y0H $H$(H!XFv:c??""    sessionc                    |dz  }|                     d           t          dddt          |          |                                j        dddd	
	  	        }|                     |           |                                  |                     |           t          |j	        t          j        dg dd          }|                     |           |                                  |                     |           ||fS )Nz	video.mp4s   fake video byteszsprint83-demopackage_sprint83_demoprepared_packagesprint83checksumz#Sprint 8.3 TikTok Verification DemoTready_for_review)	candidate_id
package_idsource	file_path	file_sizechecksumworking_titleis_aigcstatusz+TEST ONLY: TikTok verification demo caption)z#onlinesafetyz#cybersecurityz#testpreviewdraft)video_asset_idprovidercaptionhashtags_jsonr*   )write_bytesr   strstatst_sizeaddcommitrefreshr   idr   tiktok)r   r   
video_filevideor+   s        r   create_tiktok_fixturer;      s   K'J.///$*!j////##+#;!
 
 
E KK((('//%*@*@*@x=III  E KK((('//%*@*@*@%<r   c                 V   t          |           \  }}t          |          5 }t          ||           \  }}d d d            n# 1 swxY w Y   |                    d|j         ddi          }|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        }|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 S )N!/api/publish/tiktok/upload-draft/modemockjson  ==z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sresponsepy0py2py5assert %(py7)spy7consentinz^%(py1)s in %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.text
}.lower
}()
}py1py3rJ   rL   py9assert %(py11)spy11r   r   r;   postr7   status_code
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationtextlowerr   r   clientr   _r+   rF   @py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert0@py_assert6@py_assert8@py_assert2@py_format10@py_format12s                     r   .test_tiktok_mock_upload_draft_requires_consentrr   /   s   "8,,NFF	 <G((;;5< < < < < < < < < < < < < < <{{IuxIIQWY_P`{aaH&3&3&&&&&&&&&&3&&&&&&&&&&&&8&&&&&8&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&--+-++---9-----------9------9--------------------------+--------------------------------------   AA	Ac           	          t          |           \  }}t          |          5 }t          ||           \  }}|j        }|j        }d d d            n# 1 swxY w Y   |                    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}
|	|
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}
|	|
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}
|	|
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}}t          |          5 }|                    t          t                                                              }|                    t          t                                         t           j        dk                                                        }|                    t          t&                                        t&          j                            g d                                                              }|                    t0          |          }|j        }|d         }||k    }
|
st          j        d|
fd||f          dt5          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         }	d}
|	|
u }|slt          j        d|fd|	|
f          t          j        |	          t          j        |
          d
z  }dd|iz  }t          t          j
        |                    d x}	x}}
t=          |j                  t=          |j                  z   t=          |j                  z   t=          |j                  z   }|                                 }d}	|	|v}|st          j        d |fd!|	|f          t          j        |	          d"t5          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"t5          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"t5          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"t5          j                    v st          j        |          rt          j        |          nd"d#z  }d$d%|iz  }t          t          j
        |                    d x}	}tC          |          }d+}||k    }|st          j        d|fd,||f          d-t5          j                    v st          j        tB                    rt          j        tB                    nd-d.t5          j                    v st          j        |          rt          j        |          nd.t          j        |          t          j        |          d/z  }d0d1|iz  }t          t          j
        |                    d x}x}}|j"        }|d         }||k    }
|
st          j        d|
fd2||f          d3t5          j                    v st          j        |          rt          j        |          nd3t          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 )4Nr=   r?   FILE_UPLOADTr>   r$   consent_confirmedr@   r>   rC   z%(py1)s == %(py4)srR   py4assert %(py6)spy6scopevideo.uploadr$   upload_statusmock_uploaded_to_draft
publish_idmock_publish_zLassert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.startswith
}(%(py5)s)
})rR   rS   rJ   rL   r8   )tiktok_demo_startedtiktok_upload_init_mockedtiktok_file_upload_succeeded)z2%(py2)s
{%(py2)s = %(py0)s.publish_id
} == %(py5)sattemptrG   rK   rL   isz%(py1)s is %(py4)sclient_secretnot inz%(py1)s not in %(py3)sloweredrR   rS   assert %(py5)srJ   access_token': 'mock-secret-tokenz
[redacted]rN   )z%(py1)s in %(py3)s   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sleneventsrH   rR   rS   r|   assert %(py8)spy8)z:%(py2)s
{%(py2)s = %(py0)s.external_tiktok_id
} == %(py5)sr:   )#r   r   r;   r7   rX   rA   rZ   r[   r_   r`   ra   
startswithexecr   r   oner   wherer-   r
   
event_typein_allgetr   r   r\   r]   r^   response_redacted_jsonr1   request_redacted_jsonrc   r   external_tiktok_id)r   r   re   r   r:   r+   video_iddraft_idresultrl   ri   ro   @py_format5@py_format7rh   rm   rk   r   api_logr   rg   rj   rb   r   @py_format4@py_assert5@py_format9s                              r   ?test_tiktok_mock_upload_draft_creates_attempt_log_and_no_secretr   8   s   "8,,NFF	 G,Wh??u88               [[GXGGW]iv  NR  OS  OS[  T  T  Y  Y  [  [F&>#V#>V##########>V#####>####V###########################'?,n,?n,,,,,,,,,,?n,,,,,?,,,,n,,,,,,,,,,,,,,,,,,,,,,,,,,,(,},},,,,,,,,,,},,,,,,,,,},,,,,,,,,,,,,,,,,,,,,,,,,,,/">&>>"&>>>>>>>>>>>"&>>>>>>">>>>&>>>>>>>>>>>>>>>>>>>>>>>>>>>>,;*;?;**?;;;;;;;;;;;;*;;;;?;;;;;;;;;;;;;;;;;;;;;;;;;;;;	 @G,,v&9::;;??AA,,vj1177
8Kx8WXXYY]]__f]3399-:R:V:V  Xl  Xl  Xl  ;m  ;m  n  n  o  o  s  s  u  uJ11!9VL%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9w99999w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-f5==5==========5=====5===============================7011C8V4W4WWZ]^e^{Z|Z||  @C  DK  Db  @c  @c  c**,,-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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"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111111111111111111111&|w&&&&&&&&&&|w&&&&&|&&&&&&&&&&&w&&&&&w&&&&&&&&&&&&&&&&&&&&&&&&&&&6{{a{a{ass66{a'?6,+??'+???????????'+?????????????u?????u??????'????+????????????????????????????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s$   "AAA\3jj
jc                 H	   t          |           \  }}t          |          5 }t          ||           \  }}d d d            n# 1 swxY w Y   |                    d                                          }|d         }d}||u }	|	slt          j        d|	fd||f          t          j        |          t          j        |          dz  }
dd|
iz  }t          t          j	        |                    d 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         d         }d}||u }	|	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             }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         dddd           |                    d                                          }|d         d         }d}||u }	|	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}||u }	|	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 S )Nz/api/verification/tiktoksandbox_configuredFr   r   ry   r{   r|   r>   MockrC   rx   	readiness!ready_for_tiktok_submission_videoc              3      K   | ]}d |v V  	dS )zSandbox not configuredN ).0issues     r   	<genexpr>zUtest_tiktok_verification_status_honest_without_sandbox_credentials.<locals>.<genexpr>^   s(      XXU'50XXXXXXr   blocking_issuesz,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}any)rH   rI   rz   r=   r?   ru   Trv   r@   ready_for_internal_rehearsallast_attemptr   r   )r   r   r;   r   rA   rZ   r[   r_   r`   ra   r   r\   r]   r^   rX   r7   )r   r   re   r   rf   r+   beforerl   ri   ro   r   r   rg   afters                 r   Btest_tiktok_verification_status_honest_without_sandbox_credentialsr   V   s   "8,,NFF	 <G((;;5< < < < < < < < < < < < < < <ZZ23388::F&'050'50000000000'50000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&>#V#>V##########>V#####>####V###########################+BCLuLCuLLLLLLLLLLCuLLLLLCLLLLu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XXfEV>WXXXX3XXXXXXXXXXXXXXXX3XXXXX3XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
KK>EH>>f`m  EI  FJ  FJK  K  K  KJJ1227799E<=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EEEEEEEEEEABKeKBeKKKKKKKKKKBeKKKKKBKKKKe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 1M5MM15MMMMMMMMMMM15MMMMMM1MMMM5M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Mrs   c                    t          |           \  }}t          |          5 }t          ||           \  }}d d d            n# 1 swxY w Y   |                    d|j         dddd           |                    d                                          d         }t          |          }d	}||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        |          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         }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}||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}||k    }|slt          j	        d
|fd||f          t          j        |          t          j        |          dz  }dd|iz  }
t          t          j        |
                    d x}x}}t!          |                                          }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 )'Nr=   r?   ru   Trv   r@   z"/api/logs?kind=tiktok_verificationitems   rC   r   r   logsr   r   r   r   payloadkindtiktok_verificationrx   ry   r{   r|   endpointz"/v2/post/publish/inbox/video/init/r}   r~   r>   r   r   r   
serializedr   r   rJ   r   r   )r   r   r;   rX   r7   r   rA   r   rZ   r[   r\   r]   r^   r_   r`   ra   r1   rc   )r   r   re   r   rf   r+   r   ro   r   rh   r   r   r   rl   ri   r   r   r   rj   s                      r   1test_tiktok_logs_show_verification_entry_redactedr   g   s"   "8,,NFF	 <G((;;5< < < < < < < < < < < < < < <
KK>EH>>f`m  EI  FJ  FJK  K  K  K:::;;@@BB7KDt999>933tt91gi G76?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:F"FF"FFFFFFFFFFF"FFFFFFFFFF"FFFFFFFFFFFFFFFFFFFFFFFFFFFF7-~-~----------~---------~---------------------------6?$f$?f$$$$$$$$$$?f$$$$$?$$$$f$$$$$$$$$$$$$$$$$$$$$$$$$$$W##%%J,?*,,,,,,,,,,?*,,,,,?,,,,,,,,,,,*,,,,,*,,,,,,,,,,,,,,,,,,,,,,,,,,,/Z//////////Z////////////////Z/////Z///////////////////////////0j0000000000j0000000000000000j00000j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0rs   c                 X   t          |           \  }}t          |          5 }t          ||           \  }}d d d            n# 1 swxY w Y   |                    d|j         dd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}	}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 S )Nr=   real_disabledT)r>   rw   r@   rB   rC   rE   rF   rG   rK   rL   zdirect postrN   rP   rQ   rU   rV   rW   rd   s                     r   1test_tiktok_real_disabled_mode_blocks_direct_postr   y   s   "8,,NFF	 <G((;;5< < < < < < < < < < < < < < <{{IuxIIYh  @D  QE  QE{  F  FH&3&3&&&&&&&&&&3&&&&&&&&&&&&8&&&&&8&&&&&&&&&&3&&&&&&&&&&&&&&&&&&&&&&&&&&&1HM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11111H11111H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111111111111111rs   ) builtinsr\   _pytest.assertion.rewrite	assertionrewriterZ   fastapi.testclientr   sqlmodelr   r   app.core.configr   app.db.sessionr   r   app.mainr	   app.models.corer
   r   r   r   r   r   r   r;   rr   r   r   r   r   r   r   r   <module>r      s;                 ) ) ) ) ) ) $ $ $ $ $ $ $ $ ( ( ( ( ( ( 6 6 6 6 6 6 6 6       k k k k k k k k k k k k k k k k# # #7    4. . .@ @ @<N N N"1 1 1$2 2 2 2 2r   