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

409 lines
21 KiB
Plaintext
Raw Normal View History

2026-03-09 14:05:00 +08:00
<EFBFBD>
L`<60>iD<00> <00>^<00>dZddlZddlmcmZddlZddlZddl m
Z
ddl m Z ddl mZmZmZddlmZddlmZmZejde d efd
<EFBFBD><04><00>Zejde d ed efd <0C><04><00>Zejd ed efd <0A><04><00>Zejjde d ededefd<10><04><00>Zejjde d ededefd<11><04><00>Zejjde d ededefd<12><04><00>Zejjde d ededefd<13><04><00>Z ejjde d ededefd<14><04><00>Z!ejjde defd<15><04><00>Z"dS)z2
Tests for API_Service task management endpoints.
<EFBFBD>N)<01> AsyncClient)<01> AsyncSession)<03>User<65>Account<6E>Task)<01>create_access_token)<02>encrypt_cookie<69>
derive_key<EFBFBD>
db_session<EFBFBD>returnc<00><00><>K<00>tddd<03><04><00>}|<00>|<01><00>|<00><00><00><00>d{V<00><03>|<00>|<01><00><00>d{V<00><03>|S)zCreate a test user.<2E>testuserztest@example.com<6F>hashed_password<72><03>username<6D>emailrN)r<00>add<64>commit<69>refresh)r <00>users <20>-D:\code\weibo\backend\tests\test_api_tasks.py<70> test_userrs<><00><00><00><00> <10><1B> <20>)<29> <06> <06> <06>D<EFBFBD>
<0F>N<EFBFBD>N<EFBFBD>4<EFBFBD><18><18><18>
<14>
<1B>
<1B>
<1D>
<1D><1D><1D><1D><1D><1D><1D><1D>
<14>
<1C>
<1C>T<EFBFBD>
"<22>
"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22> <0F>K<EFBFBD>rc<00><00>K<00>td<01><00>}td|<02><00>\}}t|jdd||d<05><06><00>}|<00>|<05><00>|<00><00><00><00>d{V<00><03>|<00>|<05><00><00>d{V<00><03>|S)zCreate a test account.ztest-cookie-key<65>test_cookie_data<74>123456z Test Account<6E>pending)<06>user_id<69> weibo_user_id<69>remark<72>encrypted_cookies<65>iv<69>statusN)r
r r<00>idrrr)r r<00>key<65>
ciphertextr"<00>accounts r<00> test_accountr(s<><00><00><00><00> <15>&<26>
'<27>
'<27>C<EFBFBD>#<23>$6<><03><<3C><<3C>N<EFBFBD>J<EFBFBD><02><15><19> <0C><1E><1D>$<24> <0A><18> <06><06><06>G<EFBFBD><0F>N<EFBFBD>N<EFBFBD>7<EFBFBD><1B><1B><1B>
<14>
<1B>
<1B>
<1D>
<1D><1D><1D><1D><1D><1D><1D><1D>
<14>
<1C>
<1C>W<EFBFBD>
%<25>
%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25> <12>Nrc<00><00>@K<00>td|ji<01><00>}dd|<01><00>iS)z(Generate JWT auth headers for test user.<2E>sub<75> Authorization<6F>Bearer )rr$)r<00>tokens r<00> auth_headersr.1s0<00><00><00><00> <20><15> <09> <0C> 5<> 6<> 6<>E<EFBFBD> <1B>.<2E>u<EFBFBD>.<2E>.<2E> /<2F>/rr(r.c<00><00>JK<00>ddlm}t|d<03><04><00>4<00>d{V<00><03>}|<05>d|j<00>d<07>dd i|<03>
<EFBFBD><00><00>d{V<00><03>}ddd<05><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwY|j}d }||k} | s<>t jd | fd ||f<02><00>dtj <00><00>vst j
|<06><00>rt j |<06><00>ndt j |<07><00>t j |<08><00>d<0F>z}
dd|
iz} tt j | <0B><00><00><00><00>dx}x} }|<06><00><00>} | d} d} | | u}|slt jd|fd| | f<02><00>t j | <0A><00>t j | <09><00>d<16>z}dd|iz}tt j |<10><00><00><00><00>dx} x}} | dd} d } | | k}|slt jd |fd| | f<02><00>t j | <0A><00>t j | <09><00>d<16>z}dd|iz}tt j |<10><00><00><00><00>dx} x}} | dd} d} | | u}|slt jd|fd| | f<02><00>t j | <0A><00>t j | <09><00>d<16>z}dd|iz}tt j |<10><00><00><00><00>dx} x}} | dd} |j}| |k}|s<>t jd |fd| |f<02><00>t j | <0A><00>dtj <00><00>vst j
|<02><00>rt j |<02><00>ndt j |<08><00>d<1F>z}
dd|
iz} tt j | <0B><00><00><00><00>dx} x}}dS) z0Test creating a task with valid cron expression.r<00><01>app<70> http://test<73>r1<00>base_urlN<6C>/api/v1/accounts/<2F>/tasks<6B>cron_expression<6F> 0 9 * * *<2A><02>json<6F>headers<72><73><00><01>==<3D>z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)s<>response<73><03>py0<79>py2<79>py5<79>assert %(py7)s<>py7<79>successT<73><01>is<69>z%(py1)s is %(py4)s<><02>py1<79>py4<79>assert %(py6)s<>py6<79>data)z%(py1)s == %(py4)s<>
is_enabled<EFBFBD>
account_id)z*%(py1)s == %(py5)s
{%(py5)s = %(py3)s.id
}r()rL<00>py3rD<00><0F>api_service.app.mainr1r<00>postr$<00> status_code<64>
@pytest_ar<61>_call_reprcompare<72> @py_builtins<6E>locals<6C>_should_repr_global_name<6D> _saferepr<70>AssertionError<6F>_format_explanationr:<00>r rr(r.r1<00>clientr@<00> @py_assert1<74> @py_assert4<74> @py_assert3<74> @py_format6<74> @py_format8rP<00> @py_assert0<74> @py_assert2<74> @py_format5<74> @py_format7s r<00>test_create_task_valid_cronrk8s/<00><00><00><00>)<29>(<28>(<28>(<28>(<28>(<28><1A>s<EFBFBD>]<5D>;<3B>;<3B>;<3B>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>v<EFBFBD><1F><1B><1B> 7<> <0C><0F> 7<> 7<> 7<>#<23>[<5B>1<> <20>%<25>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><08>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>'<27>&<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>=<3D>=<3D>?<3F>?<3F>D<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>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<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>9<>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>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<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<><00>*A<03>
A&<07>)A&c<00><00><>K<00>ddlm}t|d<03><04><00>4<00>d{V<00><03>}|<05>d|j<00>d<07>dd i|<03>
<EFBFBD><00><00>d{V<00><03>}ddd<05><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwY|j}d }||k} | s<>t jd | fd ||f<02><00>dtj <00><00>vst j
|<06><00>rt j |<06><00>ndt j |<07><00>t j |<08><00>d<0F>z}
dd|
iz} tt j | <0B><00><00><00><00>dx}x} }|<06><00><00>} | d} d} | | u}|slt jd|fd| | f<02><00>t j | <0A><00>t j | <09><00>d<16>z}dd|iz}tt j |<10><00><00><00><00>dx} x}} dS)z2Test creating a task with invalid cron expression.rr0r2r3Nr5r6r7z invalid cronr9i<>r=r?r@rArErFrGFrHrJrKrNrOrTr`s r<00>test_create_task_invalid_cronrnQs<><00><00><00><00>)<29>(<28>(<28>(<28>(<28>(<28><1A>s<EFBFBD>]<5D>;<3B>;<3B>;<3B>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>v<EFBFBD><1F><1B><1B> 7<> <0C><0F> 7<> 7<> 7<>#<23>^<5E>4<> <20>%<25>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><08>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>'<27>&<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>=<3D>=<3D>?<3F>?<3F>D<EFBFBD>#<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>#<23>#rlc<00><00>$K<00>t|jdd<02><03><00>}t|jdd<05><03><00>}|<00>||g<02><00>|<00><00><00><00>d{V<00><03>ddlm}t |d <09>
<EFBFBD><00>4<00>d{V<00><03>}|<07>d |j<00>d <0C>|<03> <0A><00><00>d{V<00><03>}ddd<06><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwY|j} d}
| |
k} | s<>tj
d| fd| |
f<02><00>dtj <00><00>vstj |<08><00>rtj|<08><00>ndtj| <09><00>tj|
<EFBFBD><00>d<12>z} dd| iz} ttj| <0A><00><00><00><00>dx} x} }
|<08><00><00>}|d}d} || u}|sltj
d|fd|| f<02><00>tj|<0F><00>tj| <0B><00>d<18>z}dd|iz}ttj|<12><00><00><00><00>dx}x}} |d} t%| <09><00>} d}| |k}|s<>tj
d|fd| |f<02><00>dtj <00><00>vstj t$<00><00>rtjt$<00><00>ndtj| <09><00>tj| <0B><00>tj|<13><00>d<1F>z} d d!| iz}ttj|<15><00><00><00><00>dx} x} x}}dS)"z"Test listing tasks for an account.r8T<>rRr7rQz
0 18 * * *FNrr0r2r3r5r6<00>r;<00><>r=r?r@rArErFrGrHrJrKrNrOrP<00>)z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)s<>len)rBrCrMrFzassert %(py9)s<>py9)rr$<00>add_allrrUr1r<00>getrWrXrYrZr[r\r]r^r_r:rt)r rr(r.<00>task1<6B>task2r1rar@rbrcrdrerfrPrgrhrirj<00> @py_assert6<74> @py_assert5<74> @py_format10s r<00>test_list_tasksr}gsD<00><00><00><00> <11>L<EFBFBD>O<EFBFBD>[<5B>UY<55> Z<> Z<> Z<>E<EFBFBD> <10>L<EFBFBD>O<EFBFBD>\<5C>V[<5B> \<5C> \<5C> \<5C>E<EFBFBD><0E><16><16><05>u<EFBFBD>~<7E>&<26>&<26>&<26>
<14>
<1B>
<1B>
<1D>
<1D><1D><1D><1D><1D><1D><1D><1D>(<28>(<28>(<28>(<28>(<28>(<28><1A>s<EFBFBD>]<5D>;<3B>;<3B>;<3B>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>v<EFBFBD><1F><1A><1A> 7<> <0C><0F> 7<> 7<> 7<> <20>$<24>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><08>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD> '<27>&<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>=<3D>=<3D>?<3F>?<3F>D<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!<21>!s<00>?'B8<03>8
C<07>Cc<00><00>\K<00>t|jdd<02><03><00>}|<00>|<04><00>|<00><00><00><00>d{V<00><03>|<00>|<04><00><00>d{V<00><03>ddlm}t|d<07><08><00>4<00>d{V<00><03>}|<06>d |j<00><00>d
d i|<03> <0C><00><00>d{V<00><03>}ddd<04><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwY|j }d } || k}
|
s<EFBFBD>tj d|
fd|| f<02><00>dtj <00><00>vstj|<07><00>rtj|<07><00>ndtj|<08><00>tj| <09><00>d<11>z} dd| iz} t!tj| <0C><00><00><00><00>dx}x}
} |<07><00><00>} | d}d}
||
u}|sltj d|fd||
f<02><00>tj|<0E><00>tj|
<EFBFBD><00>d<17>z}dd|iz}t!tj|<11><00><00><00><00>dx}x}}
| dd
}d }
||
u}|sltj d|fd||
f<02><00>tj|<0E><00>tj|
<EFBFBD><00>d<17>z}dd|iz}t!tj|<11><00><00><00><00>dx}x}}
dS)z&Test updating a task (enable/disable).r8TrpNrr0r2r3<00>/api/v1/tasks/rQFr9rrr=r?r@rArErFrGrHrJrKrNrOrP)rr$rrrrUr1r<00>putrWrXrYrZr[r\r]r^r_r:)r rr(r.<00>taskr1rar@rbrcrdrerfrPrgrhrirjs r<00>test_update_taskr<6B><00>s<><00><00><00><00> <10><<3C>?<3F>K<EFBFBD>TX<54> Y<> Y<> Y<>D<EFBFBD><0E>N<EFBFBD>N<EFBFBD>4<EFBFBD><18><18><18>
<14>
<1B>
<1B>
<1D>
<1D><1D><1D><1D><1D><1D><1D><1D>
<14>
<1C>
<1C>T<EFBFBD>
"<22>
"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>(<28>(<28>(<28>(<28>(<28>(<28><1A>s<EFBFBD>]<5D>;<3B>;<3B>;<3B>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>v<EFBFBD><1F><1A><1A> &<26>T<EFBFBD>W<EFBFBD> &<26> &<26><1E><05>&<26> <20>$<24>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><08>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>'<27>&<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>=<3D>=<3D>?<3F>?<3F>D<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.s<00>)B<<03><
C<07> Cc<00><00>^K<00>t|jdd<02><03><00>}|<00>|<04><00>|<00><00><00><00>d{V<00><03>|<00>|<04><00><00>d{V<00><03>ddlm}t|d<07><08><00>4<00>d{V<00><03>}|<06>d |j<00><00>|<03>
<EFBFBD><00><00>d{V<00><03>}ddd<04><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwY|j }d } || k}
|
s<EFBFBD>tj d |
fd || f<02><00>dtj <00><00>vstj|<07><00>rtj|<07><00>ndtj|<08><00>tj| <09><00>d<0F>z} dd| iz} t!tj| <0C><00><00><00><00>dx}x}
} |<07><00><00>} | d}d}
||
u}|sltj d|fd||
f<02><00>tj|<0E><00>tj|
<EFBFBD><00>d<15>z}dd|iz}t!tj|<11><00><00><00><00>dx}x}}
ddlm}|<00>|t<00><00><00>tj|jk<00><00><00><00><00>d{V<00><03>}|<13><00><00>}d}||u}|s<>tj d|fd||f<02><00>dtj <00><00>vstj|<14><00>rtj|<14><00>ndtj|<0F><00>d<1B>z}dd|iz} t!tj| <0B><00><00><00><00>dx}}dS)zTest deleting a task.r8TrpNrr0r2r3rrqrrr=r?r@rArErFrGrHrJrKrNrO)<01>select)z%(py0)s is %(py3)s<> deleted_task)rBrSzassert %(py5)srD)rr$rrrrUr1r<00>deleterWrXrYrZr[r\r]r^r_r:<00>
sqlalchemyr<EFBFBD><00>execute<74>where<72>scalar_one_or_none)r rr(r.r<>r1rar@rbrcrdrerfrPrgrhrirjr<><00>resultr<74><00> @py_format4s r<00>test_delete_taskr<6B><00>sn<00><00><00><00> <10><<3C>?<3F>K<EFBFBD>TX<54> Y<> Y<> Y<>D<EFBFBD><0E>N<EFBFBD>N<EFBFBD>4<EFBFBD><18><18><18>
<14>
<1B>
<1B>
<1D>
<1D><1D><1D><1D><1D><1D><1D><1D>
<14>
<1C>
<1C>T<EFBFBD>
"<22>
"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>(<28>(<28>(<28>(<28>(<28>(<28><1A>s<EFBFBD>]<5D>;<3B>;<3B>;<3B>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>v<EFBFBD><1F><1D><1D> &<26>T<EFBFBD>W<EFBFBD> &<26> &<26> <20>'<27>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><08>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD> '<27>&<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>=<3D>=<3D>?<3F>?<3F>D<EFBFBD>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>!<21>!<21>!<21>!<21>!<21><1D>%<25>%<25>f<EFBFBD>f<EFBFBD>T<EFBFBD>l<EFBFBD>l<EFBFBD>&8<>&8<><14><17>D<EFBFBD>G<EFBFBD>9K<39>&L<>&L<>M<>M<> M<> M<> M<> M<> M<> M<>F<EFBFBD><19>,<2C>,<2C>.<2E>.<2E>L<EFBFBD><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F><1F>s<00>&B9<03>9
C<07>Cc<00><00>K<00>tddd<03><04><00>}|<00>|<02><00>|<00><00><00><00>d{V<00><03>|<00>|<02><00><00>d{V<00><03>t |jdd<07><08><00>}|<00>|<03><00>|<00><00><00><00>d{V<00><03>|<00>|<03><00><00>d{V<00><03>t d |ji<01><00>}d
d |<04><00>i}d d lm}t|d<0E><0F><00>4<00>d{V<00><03>}|<07>
d|j<00><00>ddi|<05><13><00><00>d{V<00><03>}ddd<05><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwY|j } d}
| |
k} | s<>tj d| fd| |
f<02><00>dtj<00><00>vstj|<08><00>rtj|<08><00>ndtj| <09><00>tj|
<EFBFBD><00>d<18>z} dd| iz} t%tj| <0A><00><00><00><00>dx} x} }
dS)z?Test that users cannot access tasks from other users' accounts.<2E> otheruserzother@example.comrrNr8Trpr*r+r,rr0r2r3rrQFr9i<>r=r?r@rArErF)rrrrrr$rrUr1rr<>rWrXrYrZr[r\r]r^r_)r r(<00>
other_userr<EFBFBD><00> other_token<65> other_headersr1rar@rbrcrdrerfs r<00>%test_access_other_user_task_forbiddenr<6E><00>s/<00><00><00><00><16><1C>!<21>)<29><06><06><06>J<EFBFBD>
<0F>N<EFBFBD>N<EFBFBD>:<3A><1E><1E><1E>
<14>
<1B>
<1B>
<1D>
<1D><1D><1D><1D><1D><1D><1D><1D>
<14>
<1C>
<1C>Z<EFBFBD>
(<28>
(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28> <10><<3C>?<3F>K<EFBFBD>TX<54> Y<> Y<> Y<>D<EFBFBD><0E>N<EFBFBD>N<EFBFBD>4<EFBFBD><18><18><18>
<14>
<1B>
<1B>
<1D>
<1D><1D><1D><1D><1D><1D><1D><1D>
<14>
<1C>
<1C>T<EFBFBD>
"<22>
"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>&<26>u<EFBFBD>j<EFBFBD>m<EFBFBD>&<<3C>=<3D>=<3D>K<EFBFBD>$<24>&=<3D> <0B>&=<3D>&=<3D>><3E>M<EFBFBD>(<28>(<28>(<28>(<28>(<28>(<28><1A>s<EFBFBD>]<5D>;<3B>;<3B>;<3B>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>v<EFBFBD><1F><1A><1A> &<26>T<EFBFBD>W<EFBFBD> &<26> &<26><1E><05>&<26>!<21>$<24>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><08>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>'<27>&<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>&s<00>:)D5<03>5
D?<07>D?)#<23>__doc__<5F>builtinsrZ<00>_pytest.assertion.rewrite<74> assertion<6F>rewriterX<00>pytest<73>pytest_asyncio<69>httpxr<00>sqlalchemy.ext.asyncior<00> shared.modelsrrr<00>auth_service.app.utils.securityr<00> shared.cryptor r
<00>fixturerr(<00>dictr.<00>mark<72>asynciorkrnr}r<>r<>r<><00>rr<00><module>r<>s<><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>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>?<3F>?<3F>?<3F>?<3F>?<3F>?<3F>4<>4<>4<>4<>4<>4<>4<>4<><10><17>
<10> <0C>
<10><14>
<10>
<10>
<10><18><17>
<10><10><17><13><<3C><13>D<EFBFBD><13>W<EFBFBD><13><13><13><18><17><13>&<10><17>0<>$<24>0<>4<EFBFBD>0<>0<>0<><18><17>0<> <08><1B><14>9<><1C>9<><13>9<><1A>9<><17> 9<>9<>9<><15><14>9<>0<08><1B><14>$<24><1C>$<24><13>$<24><1A>$<24><17> $<24>$<24>$<24><15><14>$<24>*<08><1B><14>"<22><1C>"<22><13>"<22><1A>"<22><17> "<22>"<22>"<22><15><14>"<22>6<08><1B><14>/<2F><1C>/<2F><13>/<2F><1A>/<2F><17> /<2F>/<2F>/<2F><15><14>/<2F>6<08><1B><14> <20><1C> <20><13> <20><1A> <20><17>  <20> <20> <20><15><14> <20>><08><1B><14>"'<27><1C>"'<27><19>"'<27>"'<27>"'<27><15><14>"'<27>"'<27>"'r