Files
weibo_signin/backend/tests/__pycache__/test_shared.cpython-311-pytest-8.3.3.pyc

140 lines
26 KiB
Plaintext
Raw Normal View History

2026-03-09 14:05:00 +08:00
<EFBFBD>
U<>i<EFBFBD><00><00><><00>dZddlZddlmcmZddlZddlZddl m
Z
ddl m Z m Z mZddlmZmZddlmZmZmZmZddlmZGd<08>d <09><00>ZGd
<EFBFBD>d <0B><00>ZGd <0C>d <0A><00>ZdS)u<>
Tests for the shared module: crypto, response format, and ORM models.
Validates tasks 1.1 1.5 (excluding optional PBT task 1.4).
<EFBFBD>N)<01>select)<03>
derive_key<EFBFBD>encrypt_cookie<69>decrypt_cookie)<02>success_response<73>error_response)<04>User<65>Account<6E>Task<73> SigninLog)<01>TestSessionLocalc<00>6<00>eZdZdZd<02>Zd<03>Zd<04>Zd<05>Zd<06>Zd<07>Z dS) <09>
TestCryptozAVerify AES-256-GCM encrypt/decrypt round-trip and error handling.c<00>.<00>td<01><00>|_dS)Nztest-encryption-key)r<00>key)<01>selfs <20>*D:\code\weibo\backend\tests\test_shared.py<70> setup_methodzTestCrypto.setup_methods<00><00><1D>3<>4<>4<><04><08><08><08>c
<00><><00>d}t||j<00><00>\}}|j}t|||<04><00>}||k}|<06>s<>tjd|fd||f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>nddt j<00><00>vstj|<02><00>rtj|<02><00>nddt j<00><00>vstj|<03><00>rtj|<03><00>nddt j<00><00>vstj|<00><00>rtj|<00><00>ndtj|<04><00>tj|<05><00>dt j<00><00>vstj|<01><00>rtj|<01><00>ndd <09>z}d
d |iz}ttj
|<08><00><00><00><00>dx}x}}dS) NzSUB=abc123; SUBP=xyz789;<3B><01>==<3D>z[%(py7)s
{%(py7)s = %(py0)s(%(py1)s, %(py2)s, %(py5)s
{%(py5)s = %(py3)s.key
})
} == %(py9)sr<00>ct<63>ivr<00>original<61><07>py0<79>py1<79>py2<79>py3<79>py5<79>py7<79>py9<79>assert %(py11)s<>py11<31> rrr<00>
@pytest_ar<61>_call_reprcompare<72> @py_builtins<6E>locals<6C>_should_repr_global_name<6D> _saferepr<70>AssertionError<6F>_format_explanation<6F> rrrr<00> @py_assert4<74> @py_assert6<74> @py_assert8<74> @py_format10<31> @py_format12s r<00>test_encrypt_decrypt_roundtripz)TestCrypto.test_encrypt_decrypt_roundtrips<00><00>-<2D><08><1F><08>$<24>(<28>3<>3<><06><02>B<EFBFBD>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;rc<00><><00>td|j<00><00>\}}td|j<00><00>\}}||k}|s<>tjd|fd||f<02><00>dt j<00><00>vstj|<01><00>rtj|<01><00>nddt j<00><00>vstj|<03><00>rtj|<03><00>ndd<07>z}dd |iz}ttj |<06><00><00><00><00>d}dS)
N<EFBFBD>cookie_a<5F>cookie_b)<01>!=)z%(py0)s != %(py2)s<>ct1<74>ct2)rr zassert %(py4)s<>py4)
rrr(r)r*r+r,r-r.r/)rr;<00>_r<<00> @py_assert1<74> @py_format3<74> @py_format5s r<00>7test_different_plaintexts_produce_different_ciphertextszBTestCrypto.test_different_plaintexts_produce_different_ciphertextss<00><00><1F>
<EFBFBD>D<EFBFBD>H<EFBFBD>5<>5<><06><03>Q<EFBFBD><1F>
<EFBFBD>D<EFBFBD>H<EFBFBD>5<>5<><06><03>Q<EFBFBD><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19><19>rc<00><><00>td|j<00><00>\}}td<02><00>}tjt
<00><00>5t |||<03><00>ddd<00><00>dS#1swxYwYdS)N<>secretz wrong-key)rrr<00>pytest<73>raises<65> Exceptionr)rrr<00> wrong_keys r<00>test_wrong_key_raisesz TestCrypto.test_wrong_key_raises$s<><00><00><1F><08>$<24>(<28>3<>3<><06><02>B<EFBFBD><1E>{<7B>+<2B>+<2B> <09> <13>]<5D>9<EFBFBD> %<25> %<25> .<2E> .<2E> <1A>2<EFBFBD>r<EFBFBD>9<EFBFBD> -<2D> -<2D> -<2D> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E><><EFBFBD><EFBFBD> .<2E> .<2E> .<2E> .<2E> .<2E> .s<00>A <03> A$<07>'A$c
<00><><00>td|j<00><00>\}}|j}t|||<03><00>}d}||k}|<06>s<>tjd|fd||f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>nddt j<00><00>vstj|<01><00>rtj|<01><00>nddt j<00><00>vstj|<02><00>rtj|<02><00>nddt j<00><00>vstj|<00><00>rtj|<00><00>ndtj|<03><00>tj|<04><00>tj|<05><00>d<08>z}d d
|iz}ttj
|<08><00><00><00><00>dx}x}x}}dS) N<>r)z\%(py7)s
{%(py7)s = %(py0)s(%(py1)s, %(py2)s, %(py5)s
{%(py5)s = %(py3)s.key
})
} == %(py10)srrrr)rrr r!r"r#<00>py10zassert %(py12)s<>py12r') rrrr1r2<00> @py_assert9r3<00> @py_format11<31> @py_format13s r<00>test_empty_string_roundtripz&TestCrypto.test_empty_string_roundtrip*s<><00><00><1F><02>D<EFBFBD>H<EFBFBD>-<2D>-<2D><06><02>B<EFBFBD>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5rc
<00><><00>d}t||j<00><00>\}}|j}t|||<04><00>}||k}|<06>s<>tjd|fd||f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>nddt j<00><00>vstj|<02><00>rtj|<02><00>nddt j<00><00>vstj|<03><00>rtj|<03><00>nddt j<00><00>vstj|<00><00>rtj|<00><00>ndtj|<04><00>tj|<05><00>dt j<00><00>vstj|<01><00>rtj|<01><00>ndd <09>z}d
d |iz}ttj
|<08><00><00><00><00>dx}x}}dS) Nu微博Cookie=值; 中文=测试rrrrrrrrr%r&r'r0s r<00>test_unicode_roundtripz!TestCrypto.test_unicode_roundtrip.s<00><00>4<><08><1F><08>$<24>(<28>3<>3<><06><02>B<EFBFBD>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;rN)
<EFBFBD>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__rr6rBrIrQrS<00>rrrrst<00><00><00><00><00><00>K<>K<>5<>5<>5<><<3C><<3C><<3C>
<1A><1A><1A>
.<2E>.<2E>.<2E> 6<>6<>6<><<3C><<3C><<3C><<3C><rrc<00>$<00>eZdZdZd<02>Zd<03>Zd<04>ZdS)<06>TestResponseFormatz Verify unified response helpers.c<00>B<00>tddid<03><00>}|d}d}||u}|sltjd|fd||f<02><00>tj|<02><00>tj|<03><00>d<08>z}d d
|iz}t tj|<06><00><00><00><00>dx}x}}|d }ddi}||k}|sltjd |fd ||f<02><00>tj|<02><00>tj|<03><00>d<08>z}d d
|iz}t tj|<06><00><00><00><00>dx}x}}|d}d}||k}|sltjd |fd ||f<02><00>tj|<02><00>tj|<03><00>d<08>z}d d
|iz}t tj|<06><00><00><00><00>dx}x}}dS)N<>id<69><00>ok<6F>successT<73><01>is<69>z%(py1)s is %(py4)s<>rr=<00>assert %(py6)s<>py6<79>datar<00>z%(py1)s == %(py4)s<>message<67>rr(r)r-r.r/<00>r<00>resp<73> @py_assert0<74> @py_assert3<74> @py_assert2rA<00> @py_format7s r<00>test_success_response_structurez2TestResponseFormat.test_success_response_structure:s+<00><00><1F><14>q<EFBFBD> <09>4<EFBFBD>0<>0<><04>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&rc<00>.<00>t<00><00>}|d}d}||u}|sltjd|fd||f<02><00>tj|<02><00>tj|<03><00>d<05>z}dd|iz}t tj|<06><00><00><00><00>dx}x}}|d}d}||u}|sltjd|fd||f<02><00>tj|<02><00>tj|<03><00>d<05>z}dd|iz}t tj|<06><00><00><00><00>dx}x}}d }|d
}||v}|sltjd |fd ||f<02><00>tj|<02><00>tj|<03><00>d<05>z}dd|iz}t tj|<06><00><00><00><00>dx}x}}dS) Nr_Tr`rbrcrdrerfzOperation successfulrh)<01>in)z%(py1)s in %(py4)srirjs r<00>test_success_response_defaultsz1TestResponseFormat.test_success_response_defaults@s<00><00><1F>!<21>!<21><04>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8rc<00><><00>tddddigd<05><00>}|j}d}||k}|s<>tjd|fd||f<02><00>dt j<00><00>vstj|<01><00>rtj|<01><00>ndtj|<02><00>tj|<03><00>d <09>z}d
d |iz}ttj |<06><00><00><00><00>dx}x}}d dl
}|<07> |j <00><00>}|d } d}| |u}
|
sltjd|
fd| |f<02><00>tj| <09><00>tj|<04><00>d<11>z} dd| iz} ttj | <0C><00><00><00><00>dx} x}
}|d} d}| |u}
|
sltjd|
fd| |f<02><00>tj| <09><00>tj|<04><00>d<11>z} dd| iz} ttj | <0C><00><00><00><00>dx} x}
}|dd} d}| |k}
|
sltjd|
fd| |f<02><00>tj| <09><00>tj|<04><00>d<11>z} dd| iz} ttj | <0C><00><00><00><00>dx} x}
}|dd}t|<02><00>}d} || k}|s<>tjd|fd|| f<02><00>dt j<00><00>vstjt<00><00>rtjt<00><00>ndtj|<02><00>tj|<04><00>tj| <0A><00>d<1C>z}dd|iz}ttj |<0F><00><00><00><00>dx}x}x}} dS)N<>bad<61>VALIDATION_ERROR<4F>field<6C>emaili<6C>r)z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)srk<00>rr r"<00>assert %(py7)sr#rr_Fr`rbrcrdrerf<00>error<6F>coderg<00>detailsr])z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)s<>len)rr r=r#zassert %(py9)sr$)r<00> status_coder(r)r*r+r,r-r.r/<00>json<6F>loads<64>bodyr~)rrkr?r1rm<00> @py_format6<74> @py_format8r<38>r<>rlrnrAror2<00> @py_assert5r4s r<00>test_error_response_structurez0TestResponseFormat.test_error_response_structureFsK<00><00><1D>e<EFBFBD>%7<>7<EFBFBD>G<EFBFBD>:L<>9M<39>s<EFBFBD>S<>S<><04>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26><13> <0B> <0B> <0B><13>z<EFBFBD>z<EFBFBD>$<24>)<29>$<24>$<24><04>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>#<23>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>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<>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<>1rN)rTrUrVrWrprsr<>rXrrrZrZ7sG<00><00><00><00><00><00>*<2A>*<2A>'<27>'<27>'<27> 9<>9<>9<> 2<>2<>2<>2<>2rrZc<00><><00>eZdZdZejjd<02><00><00>Zejjd<03><00><00>Zejjd<04><00><00>Z ejjd<05><00><00>Z
dS)<07> TestORMModelsz9Verify ORM models can be created and queried with SQLite.c<00><00>PK<00>tddd<03><04><00>}|<01>|<02><00>|<01><00><00><00>d{V<00><03>|<01>t t<00><00><00>tjdk<00><00><00><00><00>d{V<00><03>}|<03><00><00>}|j}d}||k}|s<>tj
d|fd||f<02><00>dtj <00><00>vstj |<04><00>rtj|<04><00>ndtj|<05><00>tj|<06><00>d<08>z}d d
|iz} ttj| <09><00><00><00><00>dx}x}}|j}d }||u}|s<>tj
d |fd ||f<02><00>dtj <00><00>vstj |<04><00>rtj|<04><00>ndtj|<05><00>tj|<06><00>d<08>z}d d
|iz} ttj| <09><00><00><00><00>dx}x}}dS)N<>testuserztest@example.com<6F>hashed<65><03>usernamerx<00>hashed_passwordr)z-%(py2)s
{%(py2)s = %(py0)s.email
} == %(py5)s<>fetchedryrzr#Tr`)z1%(py2)s
{%(py2)s = %(py0)s.is_active
} is %(py5)s)r <00>add<64>commit<69>executer<00>wherer<65><00>
scalar_onerxr(r)r*r+r,r-r.r/<00> is_active)
r<00>
db_session<EFBFBD>user<65>resultr<74>r?r1rmr<>r<>s
r<00>test_create_userzTestORMModels.test_create_userWs<><00><00><00><00><13><1F>$<24>$<24>
<EFBFBD>
<EFBFBD>
<EFBFBD><04>
<13><0E><0E>t<EFBFBD><1C><1C><1C><18><1F><1F>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>)<29>)<29>&<26><14>,<2C>,<2C>*<<3C>*<<3C>T<EFBFBD>]<5D>j<EFBFBD>=X<>*Y<>*Y<>Z<>Z<>Z<>Z<>Z<>Z<>Z<>Z<><06><18>#<23>#<23>%<25>%<25><07>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<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>2<>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(rc<00><00><>K<00>tddd<03><04><00>}|<01>|<02><00>|<01><00><00><00>d{V<00><03>t|jdddd<08> <09><00>}|<01>|<03><00>|<01><00><00><00>d{V<00><03>|<01>t t<00><00><00>tj|jk<00><00><00><00><00>d{V<00><03>}|<04> <00><00>}|j
}d}||k}|s<>tj d
|fd ||f<02><00>d tj<00><00>vstj|<05><00>rtj|<05><00>nd tj|<06><00>tj|<07><00>d <0A>z} dd| iz}
t#tj|
<EFBFBD><00><00><00><00>dx}x}}|j}d}||k}|s<>tj d
|fd||f<02><00>d tj<00><00>vstj|<05><00>rtj|<05><00>nd tj|<06><00>tj|<07><00>d <0A>z} dd| iz}
t#tj|
<EFBFBD><00><00><00><00>dx}x}}dS)N<>u1zu1@x.com<6F>hr<68><00>12345<34>test<73>enc<6E>iv123<32><05>user_id<69> weibo_user_id<69>remark<72>encrypted_cookiesrr)z5%(py2)s
{%(py2)s = %(py0)s.weibo_user_id
} == %(py5)sr<73>ryrzr#<00>pending<6E>z.%(py2)s
{%(py2)s = %(py0)s.status
} == %(py5)s)r r<>r<>r
r\r<>rr<>r<>r<>r<>r(r)r*r+r,r-r.r/<00>status) rr<>r<><00>acctr<74>r<>r?r1rmr<>r<>s r<00>"test_create_account_linked_to_userz0TestORMModels.test_create_account_linked_to_userfs<><00><00><00><00><13>T<EFBFBD><1A>S<EFBFBD>I<>I<>I<><04><12><0E><0E>t<EFBFBD><1C><1C><1C><18><1F><1F>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21><16><18>G<EFBFBD>!<21><19>#<23><16> 
<EFBFBD>
<EFBFBD>
<EFBFBD><04> <13><0E><0E>t<EFBFBD><1C><1C><1C><18><1F><1F>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>)<29>)<29>&<26><17>/<2F>/<2F>*?<3F>*?<3F><07><0F>SW<53>SZ<53>@Z<>*[<5B>*[<5B>\<5C>\<5C>\<5C>\<5C>\<5C>\<5C>\<5C>\<5C><06><18>#<23>#<23>%<25>%<25><07>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*rc<00><00>tK<00>tddd<03><04><00>}|<01>|<02><00>|<01><00><00><00>d{V<00><03>t|jdddd<08> <09><00>}|<01>|<03><00>|<01><00><00><00>d{V<00><03>t |jd
<EFBFBD> <0B><00>}|<01>|<04><00>|<01><00><00><00>d{V<00><03>|<01>tt
<00><00><00>t
j |jk<00><00><00><00><00>d{V<00><03>}|<05>
<00><00>}|j }d
}||k} | s<>tj d | fd ||f<02><00>dtj<00><00>vstj|<06><00>rtj|<06><00>ndtj|<07><00>tj|<08><00>d<0F>z}
dd|
iz} t%tj| <0B><00><00><00><00>dx}x} }|j}d}||u} | s<>tj d| fd||f<02><00>dtj<00><00>vstj|<06><00>rtj|<06><00>ndtj|<07><00>tj|<08><00>d<0F>z}
dd|
iz} t%tj| <0B><00><00><00><00>dx}x} }dS)N<>u2zu2@x.comr<6D>r<><00>99<39>r<>e<>ir<69>z 0 8 * * *)<02>
account_id<EFBFBD>cron_expressionr)z7%(py2)s
{%(py2)s = %(py0)s.cron_expression
} == %(py5)sr<73>ryrzr#Tr`)z2%(py2)s
{%(py2)s = %(py0)s.is_enabled
} is %(py5)s)r r<>r<>r
r\r r<>rr<>r<>r<>r<>r(r)r*r+r,r-r.r/<00>
is_enabled) rr<>r<>r<><00>taskr<6B>r<>r?r1rmr<>r<>s r<00>"test_create_task_linked_to_accountz0TestORMModels.test_create_task_linked_to_account{s<00><00><00><00><13>T<EFBFBD><1A>S<EFBFBD>I<>I<>I<><04><12><0E><0E>t<EFBFBD><1C><1C><1C><18><1F><1F>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21><16><18>G<EFBFBD>4<EFBFBD><03>!<21>c<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><04> <13><0E><0E>t<EFBFBD><1C><1C><1C><18><1F><1F>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21><13>t<EFBFBD>w<EFBFBD> <0B>D<>D<>D<><04><12><0E><0E>t<EFBFBD><1C><1C><1C><18><1F><1F>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>)<29>)<29>&<26><14>,<2C>,<2C>*<<3C>*<<3C>T<EFBFBD>_<EFBFBD>PT<50>PW<50>=W<>*X<>*X<>Y<>Y<>Y<>Y<>Y<>Y<>Y<>Y<><06><18>#<23>#<23>%<25>%<25><07>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>5<>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)rc<00><00>zK<00>tddd<03><04><00>}|<01>|<02><00>|<01><00><00><00>d{V<00><03>t|jdddd<08> <09><00>}|<01>|<03><00>|<01><00><00><00>d{V<00><03>t |jd
d <0B> <0C><00>}|<01>|<04><00>|<01><00><00><00>d{V<00><03>|<01>tt
<00><00><00>t
j |jk<00><00><00><00><00>d{V<00><03>}|<05>
<00><00>}|j }d }||k} | s<>tj d | fd||f<02><00>dtj<00><00>vstj|<06><00>rtj|<06><00>ndtj|<07><00>tj|<08><00>d<10>z}
dd|
iz} t%tj| <0B><00><00><00><00>dx}x} }|j}d
}||k} | s<>tj d | fd||f<02><00>dtj<00><00>vstj|<06><00>rtj|<06><00>ndtj|<07><00>tj|<08><00>d<10>z}
dd|
iz} t%tj| <0B><00><00><00><00>dx}x} }dS)N<>u3zu3@x.comr<6D>r<><00>77r<37>r<>r<>r<>u超话Ar_)r<><00> topic_titler<65>rr<>r<>ryrzr#)z3%(py2)s
{%(py2)s = %(py0)s.topic_title
} == %(py5)s)r r<>r<>r
r\r r<>rr<>r<>r<>r<>r(r)r*r+r,r-r.r/r<>) rr<>r<>r<><00>logr<67>r<>r?r1rmr<>r<>s r<00>test_create_signin_logz$TestORMModels.test_create_signin_log<6F>s><00><00><00><00><13>T<EFBFBD><1A>S<EFBFBD>I<>I<>I<><04><12><0E><0E>t<EFBFBD><1C><1C><1C><18><1F><1F>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21><16><18>G<EFBFBD>4<EFBFBD><03>!<21>c<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><04> <13><0E><0E>t<EFBFBD><1C><1C><1C><18><1F><1F>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21><17><1B>w<EFBFBD>!<21><1C>
<EFBFBD>
<EFBFBD>
<EFBFBD><03>
<13><0E><0E>s<EFBFBD><1B><1B><1B><18><1F><1F>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>)<29>)<29> <12>9<EFBFBD> <1D> <1D> #<23> #<23>I<EFBFBD>$8<>D<EFBFBD>G<EFBFBD>$C<> D<> D<>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><06><19>#<23>#<23>%<25>%<25><07>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>/rN) rTrUrVrWrE<00>mark<72>asyncior<6F>r<>r<>r<>rXrrr<>r<>Ts<><00><00><00><00><00><00>C<>C<> <0B>[<5B><18> )<29> )<29><19><18> )<29> <0C>[<5B><18>+<2B>+<2B><19><18>+<2B>( <0C>[<5B><18>*<2A>*<2A><19><18>*<2A>* <0C>[<5B><18>0<>0<><19><18>0<>0<>0rr<>)rW<00>builtinsr*<00>_pytest.assertion.rewrite<74> assertion<6F>rewriter(rE<00>pytest_asyncio<69>
sqlalchemyr<00> shared.cryptorrr<00>shared.responserr<00> shared.modelsr r
r r <00>tests.conftestr rrZr<>rXrr<00><module>r<>sK<00><01><04><04>
<01><00><00><00><00><00><00><00><00><00><00><00><00> <0A> <0A> <0A> <0A><15><15><15><15><1D><1D><1D><1D><1D><1D>D<>D<>D<>D<>D<>D<>D<>D<>D<>D<><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B> <<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C>F2<>2<>2<>2<>2<>2<>2<>2<>:W0<>W0<>W0<>W0<>W0<>W0<>W0<>W0<>W0<>W0r