From de30cb2551315904603e7122172b25ac984eb686 Mon Sep 17 00:00:00 2001 From: Irina Kovaleva Date: Tue, 5 Apr 2022 14:31:13 +0300 Subject: [PATCH] REST API tests: project accessibility (#4496) Co-authored-by: Kirill Sizov --- .../rest_api/assets/cvat_db/cvat_data.tar.bz2 | Bin 39447 -> 39556 bytes tests/rest_api/assets/cvat_db/data.json | 118 ++++++----- tests/rest_api/assets/projects.json | 32 ++- tests/rest_api/assets/users.json | 2 +- tests/rest_api/test_projects.py | 197 ++++++++++++++++++ 5 files changed, 294 insertions(+), 55 deletions(-) create mode 100644 tests/rest_api/test_projects.py diff --git a/tests/rest_api/assets/cvat_db/cvat_data.tar.bz2 b/tests/rest_api/assets/cvat_db/cvat_data.tar.bz2 index 5e665d098f0fbb8ba1e5c04a8902b0844a4dd114..021a03441e2189fe11259946b0b8c297dbc6f39f 100644 GIT binary patch literal 39556 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 y?U7h%P+RkXZdA;U?p3A)TT?}jHQWX z{LD^psWqFVc~)jaBE&6JZk&B*dS!bVXvu>9>o9Ab{KthX?kp9BE&6s7Zr=vc_ zH=N2;s;OU?uzkbxvG>T-)8@exAhlG+I&<)t`_Rj}bW%h?R2&ve?%xb&1HuIV>-#S$ z*pLyCz@<&_IJpj#(9irkG5!?LhW_uot9_hesO2|ntlDOS9lk#OnboR5Ns9t5XKde} zR98gpj?v5Jt$&}}MHanTHVi=n}8J&Q?^_t650^QUWFeCK9##34~fL&B}MvZBDBn9)UgdU(*I#zz*CvCTPd! zNco*V?TV+>FZ;+!_v*ZrXohsD8^us*x_v>O_rSE4Un{YSL{eEg{t!S#ItfdN8T3f- zS-Qz6a(nhU6gqEkn9ilrRhP1*iuPJeAzBc0rFLBS*@`Q$r$$Awx302xtJWZi`3e!W z=#JvFG=TH{>fJM^yG@vKwbls+|EO-4Cyz|Y%_=2VX}&_wwT{W(YaY$P^chiQC51bE z#f~~-z_R#WQNb&bF~3&8#ay>?ez>fqPV4m0SL0b`f^UmoQHctaz|1wyxd}6RCHUn} zVCaN|xBxvS@OH}R?B>Ow2d$-~#NR`Y$-zI_MD;P(qoRCzhKBlt*5*^!n|5xtS<;Tv z`1VM~8;#HQ`}GRN!MV(q?+_HhS|$}BGv^TBO$fpYO_cdZU1Ix z+Rj;0mB=UHg39O7`-Pf(z3&`l1 z<1^ZH*&@dn@ZDAR*!)JGm#B%RJ6r>-bliZ2i-dDYg|jt!bOHgn{h5`8`%1KGI%|kK z+oug<&#H`O$W~Y*?cvcLjR9d;GrdUhewYyR+9d6Yz)x-+X(Mi?t^cN0@;*(Zi-{o* zXK~2wTMET8fI!7?kJ!UY z(%*aBv9dyjyD((J#uVL0ZR0|}XP6m%UV_3*(h;5VdzQv6}_ z>Oo3sS+(}w)GZrUC?_W+C5oTer&O%yb77N`mj45rKxDrkejGjTlG19w0LAW4WPtY9 zs(a`oK0K*xbGOaIL9fM)0LamH;KYbD3S|i+_Obml8O)demJ?vi{@Ok08J4eO6eb?TV2`CS|CtBD~6$hqT=-hoqxV(seg7?VV4HijSX zwayb}&w^?W#sgwq7$+doS z$-j5cIFZEZJQ7Jg=^{T!g+D^XpW%;G4sU466LTm?{5%8WkaKCEfPIWrINkL+Wl4R5$krZ0VV>V=l z3W(-FnG-x}&A9_T=O<%^vAEG0vfOlveVn$9M>OmVAE3zK|6`2tcjnoOf#_x(Ykb~5 zC$!jK7n`JE;vz}br38^L7{=n_T;7EfMF>Eb!kC{lN36DxMX$XL>`8_n7f*@HD&ZT zo%id#NAtP%t0P&c_APX_U`J%WSWFMhy7R1dR<)N&1f;TklB$CAfTF@E7DuyG68@?T zsKkx>kd50P0wkz}wXiBe3%WoK2dI!#=1>SxRH&2Ol{7G#>8emDDnc2ln0q{PG>s~Z z(wI_(0o}|pxC?ao{%9aV08k2nJw=#%)>?UQ^ztgN(sp8bVU&)%@zyho=k{>cH$&VB$EpSm3((+sM1|GSo+gr zoT7fRU?<{rh^00vbNtaxWtyW7I)n?3bWH&`5(O9$2tgjTM$tpL$5H0s`Fy``kQ7JY zqt%dE){sFl4oo%cO*;*{8t1CkCiSvo?Mu_0QJA$|V~|7gm{m|&tC zBuSOz`#40ytU~SAZC?sP`ORY}%5R2?``;`wf*aG%IKJ+hiGY|{j%L;50?vn1{t_AzcB80>&?i<#I1Pkk9V@x z2{eS-3;=oJZ`VV#29DNxDdM`%APyH*8FfM0PsyjZ7s4?OvC{IgEJfM-3DYG?r+U6 z1A2iu02x#W=4cTOUgHq3jQu?rDn4#1nkcE{L#{fZq!jln6NB=qR8)4Mp z^SrpP+}O446HorNOa5uAkhdT-tKhO zdVl=uzGpcXSU;_v+-y4bwj^h`TMkZ;3_3(e#mC5QkEhkYAdK^`MJJiOHWUKfLElYP zPPlf8&**-tt6ovc{S3-HGMU?D53K?io`$j$lJ-#i?>Ha++N z0U3jAReCZRG(w_k!{bed4~hbZ<5cnzJ`=B5+?G`wlva&aix!8Q-k>u?hXr6hRk22V>*SF_aCY) z65~aOw_-j`g~gO zW&j#>JC*sMK?7mHH0sxYM^?$dA)n6Y(O*hgZ_y)}T_hEnNCkos!U8un5%C_aS&*-L z1n)&v$Xt0(2l{szDo?la@;#&c&z)HFme6%E1zQGR4bkd6*pU`9J5By*Tf?h_-NZ8D zRm{MW=g`DoX?+oTpHTh2LitHD(;dR>YE2(E+Wn6rG%nj4mO~}sXH)E|L)4I$)&PY^ z$Ma}#8T=i;oi>HK{dw{|7(pTztCb?MMJ3d{nV?OUJRQILae=L}@O5=xt$rg#T~5#;1!)Nk7wlU+h5o_v z-ECF+=9f5oB%|M!`2}xCd(esnkVB3^8s6FI1PyM)1VsN1?;F3u{S0Fm%^~lLeuw0{ z)_G2P0s(A-2q1x*Q+s=RY50hGJdz=8OPL zX^A$Hic-ULMPv78T44G&DC4A z;4383Q>`GRNI3q3_CCx(ubwaR+3Ifwqy-z#Q|$HEip{?xzRTCeKpR>CzmQZvy(Ez( zy+z982Yu8tUFhFO!PAqR-nT2Zn`?5fALw=D<^(g`5H2R;+N1a~JVDB8wsi5&`GJNo zu@MYJd)~)g>U-EIhQ`}}3*-HJZH>10D$TYw+wwQ=CYx++wnRih5fLBrN&C3|$W;%d z!3v=U82gVP_=_?4Ty)<-%pw*`EJQ&O5f&R1L_rY|ALjCF@Y8q-q(F;)13ZQENrAxY zkxXJK3JFmNeRw;5Jkk?UOq!0RRX*Ie9EwqoUM4i-uj9i~^t}0^F+3;1RBd0xvc6@y1ol2?lZUolcK!Ag*V zBZo{w?LMk6_76`s`K;XMG=9{hKXCy`k-^!fqjhj-MePJ9-x>yH-AyqVg996TEUX)r z3ZntiV9yOl-y|%mWKqHhWl>Fh*{D}B-{C*@E)9=g)6LGd|yEf-Ptk}%Qga}L@@41mXqQG6DuTJ;d>@7Nj z*y3ciz`lKESm^FESg%gu%Mepsy|^q&Ww*2(w0%EQv_auKRIPQ8uR zJDlp|MQ(F%jZ`BV+cYDYcl;rc0z~%k!tPLzKG{J3IW;c)ib*0l!oi`+V0t!+fac?Z zi>);m(q)3FFE9WwY^-M|o7%@Zees+_LPz`CYnTvazBp5%ri3?_9W$90=6M(H7x&EK ze*@ut5R2ME68vmHc^R04SJIpr{>fAwPG;EpmxNp`rjMsSv)eu&h@kDnK=!Tw+_q*ZhODfks%MqRz5-t^GSX-Yi`Eh>&8v+3vYer{g_#k;A)jpJ^%8 zO784J64}{6!0zvN+h1Rr1}q7d66WEjsCs*%`%UFL|M&%2$B;QAPjDHI+#37fLNJhmuZ_WSkFfpp^;cZI=Jh7emg#JU@6)wAT`Ae{EKbc) zMe^=S9*wsp(D38^)=QLX&We+lQEPCZUH-Ds0FpO7O|y_e45cOVtVgVp_0KIX8fq=G z?@yks`5wJM1OS>r{bm}j*+zBfR?8id*@x5pF1~^9ufvw`eNJG_;$xS$5*?5LJTMCL z6d()GUynTcC_qKJSQS?3a_;v=(vu-P*jIcntLnCrNgnyFD$tkjxqXLAYsM9ar}lKC zXG4qE)^t_^krvqil?bQwHBhb?nxRxGmx_?Zp|QPtU*<$xLa17WAxLmCh+R<={6R!h z7==hwhGyjylJ#W^g7ph%WW8IoDn6Hp+v)JOTNau=P@~AxrXZ(o^w9X_ViT&&Rz+s|9Y%9h+Sjj^e zyCoc|l0h1hB9@krzL7mFUW3A;5P*<9o2aYT@r4XOC;Hf!zCR|l?&}}W=#X5hojS-F zVAX^(JQfL*5J~10VHE59wD}Iwh`R`cuBW38(A_0v`Df-Sn$RPvn1^g_x3>%{je$Ei zlf^UebXm7R$6b3shy*hUBE8N>h+hDJRXjr{+4DWRA|NO8r~w4e2Vupv`}B%5X;5if zT-G&acFx9@bp#momE6I9Uz)xn3_G!vdYp@FQkj2`b#uDkRz#Td@?>)Y37zR+HdoSC z1HCtO`0&^Iv)m2j$eWr%cA$-X*mPfC{XQf^sU&g)HZJ=%h{WX5PFRgIA+K5E@@Rfkm{w}F z?*~k^XXRvJV=9JCcX`EZS8zdRXrMRh{A>$3J|s?D}v02D_*ZBm5F^j2a`v)M{#hXMw=^$auWVBtwZ|b{yKufcL zIlvkP;?fs|>!b-m0C(^tiZ`G_L?BV=lwk=`N$5;N1}MUhkWLcGF#$PMf+ncW=JVwW z6t%=O%s}73u#$u%BkQ@IX!G7kjn?ya+a6*GsmssuPY>d+k|pvOc@oSqSM*g3@{188 z{Z@RM9S>cO-Y5&2YRTIDeew z79V!X_O>PsfNuA&MlQ(_W)ZNti;&67qN}tcqJ~BrXBqR?iH0sPqB0R8=vX0nL@Nm3 zDIt3<@c3)GA&wSNkwPp8-^h{KSlJg*P8e*tcwUR)iG(pw&BGZApF>m~@J(uL7fW(e+0zjq3Srq3hB5t2BEPuMkPUS7X(23ioLm*i}Tn_>w?~ zb1eDyv#;^LAJZ~q2SV0lj6p&I5I~?2w~qkPp^igGecF0)5gXX_VpwlcBoQ0<;9W2o z?xUc%e%~UqvdDb2kE=D8{dqqVO|##Yj;^PTsZ@{Oe_wx3{-^a7jmiyOp3+~b!}opc zKkv$SjqfR#N4WK&eLxYQ3`iU4wp-_kPf}I`;f1W?&{`#7migX=79A#*UYVwyU*!>t zQ^25ak406jhGbLhU!5`b{8Yt{8}R4e?YFm;co+&MH@HSZ!-*6o2tf2qAQ3NTplzvl zn<%HcZ8aMse2uc@n7EuM*L+pOJd#1C$^iS|ZZIA<^pF^sCPGN{$Hr)+*xkueKJC5N z->Y$y!fD#`zD~|iU~es^s*^j}Z^KU>Yq5?IvLVPJS{(#By3A^d;EmUXr7hSLeSzh1 zaU-9CF;A)EhQShb4}=A%NUqirHgSHgKL%xS!416o%wwPTq33^0}q88#@ zM2g}oo;%^|EwUsiLg`ZNQWp@R4*?j2gvKF6y%Gbgztew%|9|g3a}dnGm)m1IllBoX zUncdmKHuHnb|DMC&iCj*B%2t$&wS+b5x( zl4!mB^POjPW1D&0CS4LsR3c6kYpD;K^_dV;9tySZBt`H+x1EwT)I3@P(Xz?4M}Lc_ z$LiS{v@a0)1V7V;y;FkSiqdDBp>;TWXWJNA9d55=D#%aRsmw zf)S7EeNI#AbIZ7qxRON>rWzzgNOi5GBgxtrhJ6j&`CU19YN2>T@7qIXpumMNX$@xe z(^#jENu1VyY(gD2-zHgb0;l{(kw)~7wv34W2>B@U{P$nkqma~Yrsg@`@}qEypq*gE z5fKDLK@brE5H<)9k`dSY-))JBnhL6_3aY9Ks;UaAstT&A1d>3is-|XUW@ct)W@ct+ z5=vV$04fRR3Ze)^L@^9Q5X3PGfTTo3L_|bm`)|7cz5OjSF}#UsxNyI2mfRo+g3$b& zcpEjzv-i9oR(4%bq6mcV7t>*9bv)giVqDBdf(QPdRxDIB1oZBkO~nZy3$rI3Mhq}Bo+`Or2)1y5Huu15HN&>C6W=jRguf4I(ocXs1e`K zz&E6HngZKHavK!NYD}W``*x9qZBg6(+Hz~px$nxe>TuoyBqF9kB!rIa57#@~ZpF=Z zer0NL$q5LMXwn~t7L>kdGnL~w-E4Z-j-T>)ncdRL${g(w$&zi6ec#xJjL%5gvglNX z4E{bmNQ#l3i6dB|6$@x_*K6f<@`VhTCW^$IHf$(AGd$H;FzLR9< z_P?y!_8YxqK@qC=P;aCT=cKYEghq!A)qGU#Z(O($%e>BKONyI=^j7x!c%_*0u1lq* zsaV#@h8SV$H_ga&fH)kB-Ld11*@zW^$C7prIPHtsaB5fINF|3Vq74M=nz743((pcWA3aTPpMxtHIn23Xfipo6e|kY8F0o_F3^pEa&QII)2%k&4 z;bKHz#ArQDw+9^5b?F%`7aqy*T?u_K6V?LhkL zO|}`hQXJYul|r~#g&{~%6ony3edtmhi)eBo7Rqy@7kLss=Ae=C--7U!A)C39LXs3> zA$REH6FZK5EO5}-sv((QbWDd}b*EE7b^x zY+NF#;7Mg{*&02|vdD9*_ZT8lA_U-uW!*&ZlOw%@Jg z{i&x7#c_Igj$s>+O~CU0nr$$nHbh7PORvx3bz1Ul;&?=v%k+r@3B~bBT{q*iJFE-H zX>hn+w<~9L-djcEuTas9Y%vh+p;R=eB#X}S)IFT>^a33uRhxtlgm1PY?TfR% z=3O2gWNX=u##S%0DV)(HkwIwvrEOYUF^eMY7fKm^HX=2aQp5crAq0=uxI-C(3uB*X zbohEBoxB*(Amj>#R#OB41R*KDlxhVOUh1c>k*dX{VUVsz`au*!M$=(mLC{p#d)Xlw z?RQM*a;zpY7<4K8l)TUL*SHZ3IHej2rZazIR}@qcL?kwtaWK<&d!#N71{@9|Rc2Eh^{m_amb^DO}p6d2ltIT#cUQxtX-q7{o&c6#)c7QDOsxrUz(AysL+J zehWFB_mf7$?DajVr*EBlMSih zvix+s?F6mgg7>zUIlJG@yCZA7?eNx}ezP>%!>0!X>PlviM#AkM@Y$Z5mor@lfu*j9 zJ>^WSG$5>j{W1~~*vQXE*w1L@HK5nW!c?X5k&b9Ajwmc>1XILad*B@#Nq*Vw?B|Zb zB_-hM^fCX9;~Cj1x#{VQ<71-R$zo_DV|Whm6W%DNJUXix=@>vVUHU~((McjTmd8dg zygdTMMX}}fF(NJZm1dyTb0Pl$*q+FaAeQgE{#$VsnZW=g)`MgYWm<70q|nx~x_92~ zWGr`;LZu`l!w>TOABd5y^uA|Zko}M$H*rS;O)F03|Ge}rT!7id82s=r+ia%H5E-7- zzN`!yL20A1cXWmY04Tb&RIF8R$Geb~3t}4KzzDKh>wZ2bC~ax=eJ4)s-a^rLXx!^0I$E6A_k6rg-s((4s|uTE zs{}19pFID_7Qw0_O9I)StK%b5xj(E-7}SUZ%(rB_B6|oOyNxP} z?EU?K30VupdQ$#fH}E*IBqfc5(B!{H)6~t4W6O52`f-*|TMuSyLIEGSv5aiRVbB3J zeReHvxSy0Z!WQwua0k1YLOFUQP$Gh{wDsRoU;RFTq{#6egZ;JdIPn)~z;So&Oeda6!M&8MSNeajx3U6v0DokuLcz2Xu_b`i{TPzB?WLtsDvyzqc8 zmGlbpLjsIML_|bHLMkRV{NAskBHw!tFD<1#;%}e3>GnhU3Ls#1{6(COsRMD7LfYzs zUw!G)zJiN8{E7EoN+#jAEZ^iCPb!7l0uOEfIN+tM;hlMS{#OYq0J@5S znZub6i#w3UAg`)!A&7z!Ar>JRg&1NHcHC*L-e_>ucMv1WU|O z_{X~vN(vNRB$G(XhSKJOxJghQmdc;_{=U~-Dqs;nnSJQ!gaHwK*}Pb1AFU@0Z0WTF zr6?-~z4GFmJz?#ka4)hoUB%^5lpLj`%ggL}Bj=l{j3OOcPm-o1nT7L^27B}owy0I2lmr*5R}cz<2sK)_TK%_o9qw1fWZ z;6w$-J^>XSZ6||N03??r@yP!jM1JvFD|3y-FR*>y5Dz+~%Kq9Q1f8#aygb6e+J6}; z0#7%^X$#v7JQ9o+(rCUXDw5cyvxonSjECPzFCj=CWP4GxJ3vJ!q=g9qDpU;a7i!{CZd+VJ92<_ z(-c)8qbxLkz>hL_q9QAP%=S|iQ+F6UjX#YsKuj*eLe)wai`8ZNa3Yo)5g>>Yg(m{` z^2i9p2_L`Tynn0xE~eJCt!asxx3j<@eO{sx02k%Hgb*(!v;ZkZK)Kb3ysieXCq;9I zIc$@Bcm<1BN((eq=gw+DRk38fpg^p#*{rr{^c?MPC7~>rJ0+N)02TC-Jm)kR9kR_y zBz4`(T*?weX`E`k%0U4YgY#{+^{phfoaBB)K`c-_Qn!`E(!7A)qB>c0Z|ANtVFtg2 zO!XV!>dzojl%*+3a(enJ*Y9s{Z*9P`{Ib@i>|X~Nbxs$K0tlO3C>rYWal}qcVz)D&6evC5Z7qy&$*J0NheO7=>c7qA^uLtl`l5P zCpYvVXm#@KBV%CtAQ9nqI?x1S5yHOxk(P*n1dEXC5|StcgfH3%YTH#RkWSE0Qrr;$ zB=sxcX=`hKD57(m=R5cypD$^zH=+O{cpk*y0SVt_()dR2mfD?$b25eE{o~|aAVDE0 z7epVA_w%s#8Sg8g^hSY!0>1>+1jc9O=Wh72XCK?)SskgZ#;I}Ew>Sg_arizIE*=`K`js)|L@`sb7RkFoijX4KJ~0Y^ zj6nd4VXpGWDv2hakR$?CGmIH5jIER{TDFOkb{4|*pTYr+DNUW7ot+^eAt50nTk}Cg zsQ1^#tWtTcdW@g}()ymrY-C1Gp`55)kiYY6Qt4WC4JDiBJ=3WadY@N_KnY@rkqIfR zU!t`qcVe@jiH3fLeuisi&6_rC>Md0`i@mPuGq13a?nr&Q3KR(-LvgG)n!a0KtKP{< zl`2%6=Q+-EoaZ^tbDZw)7RP*Bq6R>YlL-xA6XufpQsr0>v-rtTxCZ}QC6?`>2N4T0 z`R|;pR14YMKnURCgpyrq*D}{B!LM(sFawd;bin0C1dxH|Rps|9;`y8Q_BoN&3|Paz zK&W=&^n0SQ)Q7ckMxCnqAbA63B#axxc@AqaX9Dw)@OAS#Fv>xHY~CYymEDU5?}Kf=(@VbYGGyof+P zLZpO4wrgf$#~C{{SBnSx-1)8E#~t(CD8mKf*@_R0!8Y4sY;7U5HjvsILTxrC(_jcW zO5n*|7!Z{$vnA*Kf13Zt=k}ZfbYvM*^uQggPO7PCl0pS7o4=Box61eHij|%n!Ega2 z4qVg^u#%pE03b!GLpA#*q$2egiJi?Ls)xHwDukXbih3%2-iBvi!s&zLwJjeT(;eL( zrAmV?A4cC|r)RD6cc1I)d%$b}H5OMsiwcVhY+k@g4JG(UY_T!|W15#Ea6uXXLtNB_ zuaB;-6uqQ^Q_{6h!7dj^9$?ZiSKz<&){jch?+J3a)*xIMDE5}D+v3iAqH8U=oSfhY zF-31W|4+`>OSUOGZiJ95lP$J<-AnOa;@(SOk#`$^yToLx-)}$(7hqafX*cj)fI;Ha z#;-YhzyOazdBHiTKgF!GP`bS=5D39MEhTa{BJbSEpn{EZ#ehWe=N9@S`jhbZr6+cm zI!DZCCs&R2Mq1I*KSK!|N1v4x-ev`=KBjI=JT}?_pP1M4AbT$M?ZXpp003V&75+u8 zqB!`QP44XpBnb5gLO_SkL_|bHL_&xu18zVOZ}YiNTElqS7;DFGhPU}M8#Yn%Kk?Un zXIco!xY8(yHO#w|w(^_HZev`zOmCPaa#ZKQ^#5dTu;;_F`z9;zI^#f0jN&q%}q?QdQoIx%Xm`7CKONd`EPLK7hnlWM91ex(aW zgj=4g36Epf(&ee3@#K-?3R2co2z@WD6RAXkT02m*KNNw(OF*{=UA+QG^0k%HBk;w2 zA9pA6c1e}=7*1XsE_$MNT?pc8%UPUZBaztd$p@?&`Yjyu5Ai;Yw#M6HZMHVs8)>#Z zKBu4ky~oew`mfdY{`I!T+kR)wF(Q9;d6iaC?dD?dv^+S2D_1-!qQZ`nkim8oUu9pB?|H+gkZ-Q z?Jhd_W1Vt8Kc_+z$ZyahpjO#8)qdCvTWvaQ+HKpAA`OHHfIkQyEOsRHZEk+-W}74U zb?$KIIoTL(qKkm$t|*~~HphUTFb7}UaSEA!W;+YZO^%RA!~7$q*?4%=j{J(@(B@}u z_5QDNEe3}b>skMpkcHB3udTG?)2d2?f?)tp580@c*zy+6Q}eiL+H$#Mg)9}%3nPnq zyFJmu*g!kAoX4I;Wwv}xFT*w=2HKA!pzd>Bkb{aKGg!S%#J^(_NQ9-O{Z$NpKYP^2 zTp?xoxid5%ok@dlo?H$hiv8xSOBr=>O@EtvKuBI7%49FFcLOa>i&i)*23P){OQl|`w6b}IsuE2?LD}t*Z<0$c@Dt* zJ5wN;^wZ`C=piH8_Bn!CyaqAxwo>(iK$82LG}CWp18ewjuo-Fb>zxvSk&I(T>(H%>`)%kL$N*SJSHCRb#ShQy@qXW`y(V9+vX!I!00Is- z<1Q|g-O#4fqDa5*Xg&Sehc0=e{cjBtRRjQ&IIGK>Q!yfMH^+<5S395%5t{5j6S0xM zomu6P4|A=RfGf**AsU?*mV~3x^Enh z+W-gw99FZHFx!hllHKMn#$$rh!puOa@DfIz3;2e^2_paebU1j2Hgb7MyZ_Vc-e)%) zIQ+aNcGY5$j}k&!pIyJg2oENB5=soe{9l?19Q)~P4d;86(O(-ZV_E`6{$6SD37g6k z)gT5v^ewF~dsua0_q#v&vGVRdqB23BsdiU@O<9$xUq_hq3EO)49%3*%m6$cj#`6QGfbwi!g*FDO|Y_OXgjs@D!8&}lD@3kUG;Y?Sq`kuH618xcXY*;rD z$U)=0T=E)hRTWi9+7#nbf-Vvf1ABbX*K|lK(RBUwe!=?ZIC~cF;+4Mw>x-0uvAx#n zq=xbfuXuC6cX+rHnQw-J;XmoSh)6)#As|K01QjG+VW#a_hzeKhzS5`zy^-!~tOz6!8FS6rH!j2yu#uT*y!u!w+n|HX zXLzS$EW@9=b$L}q8$?3f!tE%8^Z@thNh99tZoZv?kdkQcd=5vv4d1tjYJVQDgTQ+p z=e_XinY}&m+L%avsGA#`&_T>3felRv2eE+g){mEeY3hFc%vNNvPdeIogpKRl_&Ypc zrDSU+AQ1h<-4!r`p z(p>_z#|l&3QHKH3|4ul~0!SiHfZes=!{wp%?%6PsyLbRA*e{1(pE1^=h$>jD7t~ic zEF^R!D%~5`S~0@n|Ai2DZK}IpyXNnV_vB~W2_*cvExEr{Y>PfYf5bU?K1!zRnGDdx znvQ4kqRqDF=-R$GhtJPaJGoC}oFU`v-AOB_gV~P)j@>8$r_)l_>8xC_FMgBuKOPpZ zyyyV#?ZI!79N5YM=|U^GvrTno1y2loL?D{_rJX8VLmFnd&vl97*HqNpF`Cj(`Re}_ z9L@^+aF^b61~+kl8JIsdpWoHW`@{zg#*PI6$NyY?v0|bse#9=qAk?Zk9D^)?Wn70rFyPim!t_R3j#nR2~ClY_Ix9? z@?aY}gL*;{`7s&T?o^Pql;#pXeU58rBC=2r>nOy{kou>pquC%3iXPYfZl~@6J$v47 z+bTLA6BXS2bk$hTpWm&Ri4r7mRo@2hHA9m(CXV;jBDmX;<}qb;dw6(39TOzMqknm( z01hffr(Mq2bDbG~#yOww8$!O-nAoQ;K-@nv_LUc)dQq#6o=J2NNj<62_JPUrzyUk+A?e=N+ey?ZA`8BERWABPveoRAQzHj{ zvf9>1jP5t%Un{af((35M^hQ)au5yMyWHuV4ip`fAJ8H3wA2Hg?+cwtwXVH1Eeh%|l zoW6KJ%fs4py>*k==}|+G<`ES6p$0!8L3C(^x!L(2;)*9?mt};Y!>Bt+I4#!@KGqH?K_X}v?LHgyX9MZJ^S4({Vy03zBagXzD$`s#nSX* z+53MDPA0yjw6R9?PBNWlM1ezHWUZ`Mv;9fb=YTzcx4TT@<||!-722P@Yc6h0pbw zFG(a51PCE+{N-!j07d{MJ61Q5J<8qRb|QlPrp{h@I~)f#BEsv)!peK3J@rsajnZM% z1SL99fUJOpZS=n(1Q>yKv<`nC*V^0G{&;?0etK3e-1`L~jNtvB6(`d$e}|e+*^kwL zaU(R7c8tvyKSRj!TMiB`x5nyF{Z)h_{*plz$}weWsJo#;FAL_{$RQ<1c%wT&l2Y@K zo(KmgDl;^GRWaj}b+5Ei&ZLs=Mfzwhw2}CJh9%!Q`a&A;3$B^ksYwkx^p5ep(~?OA z@3lD!>x~}l?2oSR6TpCPInr^%##cNz=-w? za|acGTqF7%tec%Z)b&^ZaqFxX3*JzFI#(;ZOn=!`H2Jh^BoIpy-!^1t)xiW3!ju3V zr|oamMCN8&llm9S!n9HAb`2qgHV`DZDdz^--5>6yDGyGZilepLNYX{h9REHMw`FJc zfLL3pYx#aJ@6&1KZiKb<4NHDf={a6xkd##{gE!hj)AKD&-_xopYY&V|T| z-g)@#C9a{;(2R?$_1>5gBWt{;Ep>I$1ZD|0A_wDNZC;NBDP3gC^VvC9dkRgON z*fxgH+8aY?Z4IHcHippHgn=X@yghH5f+9jmnF%IjB$<$sW3cnSvq+h$0|} zf+9gAk*DHnDKkgYFz~KNF(@J;Q$i?$Co8S=eehBDcMr3h?cOz+SKP})J$Knyw%jXT z&-mANm8j4#()>5j*WK72jVs=vp*A_as5j!F;qn_S?fiPROjou5A53MdVZ^!LsJESO zb)=(#%ONCz66_!eaezRQNEh~Qe;2##yz6bY+ii`u+ikYnZMMS<3=C35X(HOLSUJ|J zQ((>Vfhz9!*H)ZK?#@P1`DCnrhCH|4v>d^vWrSxxIH91VLg23p9rTlgrj3#Q zzUr;u5l)rSvoV{}Jx<&I?!e*wO!RY0lL+&i`d&CSJ~K`)df${i931iW;LxaqjUqsj zDGZ-m3mPPVp@7_GzJwuLaXah=j>Bk|wzyTwriA8Lc%^HzQ4&H?J1)OTAJWku3AY&h z_joL`Kmh{vs;FtO&^ct}nf9Q7WH5dubQzyVLY0RvC_Y?b1BwC%W1f=ZF{U7HV`$lj z;Rs!oyKU?{J~Xy~2_uya;r?ttjSR#L zM#oa8m3oiEU?kkOSbarOQqCqaW8rHx@BMQ*ynC&a&#HG4#I<{!fD$f(NDOJd;ZWqX zRsV-vKnX?YfQS%;sWU!1)wUn;cDreLMS;?l_{iP(+;Isi45taTm36vbI6ZEoCHiM{ z9S$R3XSAIy8Xz6k%P)UV>mTG$7$3F}0_~Ziq8Psd7h7z`-~^B&9OO{h{ripD}h(JhZ=6Z@IybRJwOB4w3kT(7^4UZBl&a8K_(AM(zY>yF}Y% zZhE;}{waf05?G*w+wWuL^QSL=@ArM@E8=)hll7-Kk@1+<3t-sC2{sT3t$vT0kLd8g zj)eY$fQAjGL>CXpP{CKzTwT#C-RS0<_)9u$#c27k}HsKyIc(S4A_@=}rWo z*b*zyL>feW+>Jmxdlhy7h8hNeCkg^`xzhVp-vELn4k4PZO{4+j7#ru`J>x;`>!9Ur zIC=@RL;ys!hnR~^@eqIB{XlnrR@)hYu5ueJI2+$RH#L_}-(yWe0S08H|0*3$qLkoUGK zHMjPzZH0Um?o;3C`mRs&J)AY5e1QGSzlm*+%mz!@8&q|J(Z}$&CY>g--)QUXm z2SVm1ENd!}8E1eDOK$7}QeFOlOEJ8~U z?Qrhi@po(droh>GK2y8Txt{Vv<=GbpFG6y2>VipsYn*%2vieZcYU++y2zo4Yw*SaO725y;7ZJ0)dcRZB<87}i1u=(T=?R_85#npX}NVl?UPiJ(nO+pDIp(a~4<4soIR+jLv#bY?%3I?vng=xiA@6X(k3065~&W!ZID@r;I&f)?G zr2FZ;aV9yvJP7p9@!UUkFE~e>jmOAUOJ#~$X37WxtGd?l`tBHrW`RsqE)>IEkU*|{ z_S=UqYrAv8?>X^Ncy)235&@RFygjMj4*le<-YdBdEe@9E_fZl+q&Ck5K?x(%d*5_! zcwxX)eS!eHdQ}Wis6R0xAo)H1J0*F}|1-UGf2?;L8jI~cqB{+G)t0>Lrn&<+b;J1g z?npr)xiN8yc^#jf|PcPVYELxSb?hvEXUWK?k*8b0wIegWuewc2M- z9E^UyFpm?s0#75~&j;=0yFSN@&N$oc-r7U`P-L@uN6GZkIwgn_cS#8wZ=W5X@Y^Hh z!{0R+o>VL}-fob@d{5Zzep8MOTidJ<=^2TDYtJAgI`euvtHlVMbYAgBbqaV`%e;Fh zy}4OE(vCmv!}_%+l1T$Q+L{EYZmj3ZeEank-DmIk;>0S1#YCU}GGLw`v0GD+ddu`TEUB?W4_AT;`KU+)c{ z$7TFmCQ~~4?cX(ybgJK(b-VX(JX^CU%OhZhoU0&F?Rgrm%XY@Z3qjs$t4Rhcy$~OB|*bwku^a9}zM|;E!!h&VL?8|UK1u*BO zV#?1v>!)p{%P72o(&~{!JWCbRIml9X-{$GgD!2qxJz6x=-*ZQ>iXkyn1v-+)S5R%K z>gsg4lNgdo>me82mq(EB6O>u)`_QAz^pv3{q;(bcSk1yg+)Ji_00I}{SV`HR`+lDD z{>)&Rt}RJjr|Y3aTqV&^NooK>;Q$C=#E4|7ei8+_5^LE1lVh!k8NunXdj~iDWbbe~ zpT@ttxaB}cH~Qx|y|s&^h=?L0BdE8PUIauz5fK;9`FN_CHXl-NL}O|`+>XD! z#MSYi9~t=p=;84C9}!jmW=hNEn&+gehO7o&eJqi;=;zqmRH}&BS2jlmETC!%L-MU3 zS0^b?1cVSuMhx{E$h*$FuS0gj6CloJ^bx=E_>bDIcOmpht*0u00wUAP%m9!}u+j6$ zD%n15bX{kg6w7`ZwXJFakpOF4^7!T-ZYDF~*~QDMdm9*u=1$(w1ZTsBS^sh8L+bi* zc$n4x@ds$8rRLFR1K0Llk)v}7Xu=fu(ak!P3XNa7Sah!Fw~ znH304NJt+L1`F`5TQrRn97m8qUTNN{C;W$n@vHODNbnvI0ps&I7wRwx_Ms#OK=Exi za`!me{OJOdb0o_)&Y+znKMwV`6H!Wr!PSKs12mQCgVO(1R*~V9v@;QuXyUc%d+@E6 z(NA1LQSzp^O<&0n08B@W8@+e=eCaiHvRtn84R8Sqo&xJX)~}#MB^)6D#q;|9{Cm_O zZ0~-1XfPDNBBb*qSTsXg7J?$(T8o(U-ng8qq4o&^TBsfU)8neEb!k=>ji_Ou`=~gm z$W3_iIwKJNL05NUlmH0Ch*hqS5*%YaTjn+^5dnFSfad^3&U2VjL%KM!cz(Tda`^k> zT2P)h!R7ckKelIGXb@!a>rUf;$)6R+n5M}1+234*7d-%+Z$%&o0p>8MD2s=0&(^Zz zU7>*sfK4KkS*;c!I~;(9wWgD9K`?3CXtDg;^``d;6`sg&VU{3CDF6Vi1U#PQu6NIW zlWy6_b?9;4MiC#PB#=sov8kiS9Z8~0m?^|ZUXO}7cxV9OsJ(YVc`DA7@Op2Nru{<_ z)+8gD$TMwy$yY}8eszD+bdVsFc$G(2elA^8Qiclt)7bzIPcQZ8-?vNen49R6 znK2ij0NTCCqdTUmtr#I-0aoV$teX44@%-3sU&AZn6c<@9gr(QPPNg;WXU@0YAtddb zNgs>%nF2{&HqNF$o0)-=xmt0e#my& zpa6xlwbpM*BTkt>@YVMfEJyT_C9-^xKG8e=f77=N{7!R!Qp5mJAmI1_5(($V1jyTB z3#1f^?Vd8>`9-tA&LE>;sHyQZj?oANBjO1lK!f>u=HQ5eA_#~gAc%n=5+WOIw%ho= z!#<1Jus{F_a@YVsPxa7KePc1IDkK?*9kO;$_|Ct?5&VeSMxEcX>gg6>k_iBa!~iOS zCx>~oZNJp&kWuvoK)->m*i-sDj##7i;_dg)9jM&w>ZnJqe^${7pn_Vh;)N~~12cf1 z4EU^QS!S;4PE%i3R{MMtnVI`>5qm-Lq}p4=t2tFWKB+n~NO~;Wp&X^Pw{2>vqOW1= z^f14t=%CdUu_J}0p58@|roDr&R<`?JPx8ND?UcMo@~9>7iOvi2N-y$gDRWU8eofea ze2%Rg*vR>qvWoxaAOJGkQTOC!l868TWUjB6UwtZrC^+pR{=r4D)>O{3aCjtqR1&mF zkQh~niO0@V>^5#P;rfB%I|jr-RRIumLV#`&Aw&Va2mlYAvA6C>3FUWy)8|3U=PG^9 zEF(gI`q$ z@*v=8X72IZe|r65fXkVHZJetb`QbqmQ zY{)y`Al?*2M%KG{_~bnT}7Xi@imY-IU=ch{OYe05BlzwvvFR*Y5;NW{({(WGS_^^Yn$im_;}OEs3l2=suWSh zeHOpFy+u$=mG_U%-CE!A_t?05)@Hr#a<@=;y6!t??T{E33b)P2g!6R-lJ5K={&u__ zTb}i=!o)?*VzW{BK_eK17c=iG9-qU?Oj(-McAFcLoQwSZ?4syk#3T_P#-wV$Pk?9@ z;K^YcuD2KPOY7>q{@>rTr(3VwcE0az=L5dAGC3exfQRX}-P&9LL4B`$5Rfgs<{U_| zR%*kZBa5Ju&}}3#*e|cq`dp;3-#$r(OSz3gy=Cy{u~X}IAc6y}g+T#`06-f-1VIo) z5d=V>DFbrw9m;3VshIM|!QrPBzIc?{*Lg`KpMF8>e6ZnOzbXVQKX0Hx@`hxFQf}Fdw~*yy(ny;F0@3mErye;_(6xmca+^=i>&T za5#v8#3l3mdwmg;48I@=4MmCz`nS){F&|R22_2ZAJjh8Tt(^Ve%GWj|AvLH(BwVR- zKIiUVA7!mIciCF|t_kNGNo3+l<+zc^0WV&+hl$XYJcc^mR+-ddZM9JVj8t|R&QlKm zY%PDjw_^W`o|}-}>@DCI9E_fzNh7d-X@jW}Hj+9zZkaD7=lCq5oU8_~^=dVoi^^&7 zFDJ|(A~4$kG-Zo)?A!&jqyQ!Vr*yeEmWlhz^WcFB7tQ-+uXxVu>XH=qe|jpfhX|!u z2Y+?6+^+iSy>J4VzF`!dS<0XusHnVC>jV#eO<*eX6`R^`NB(hYO0LsqL(z)3L^nKU zF7$pG|JRpep~>O0^iCp3DB68Lasg%kvhR+sAt40?s`a6Jy);y^wb;fou#YhU9$*$vQx6b_+(V^$Z^7G%l5>nH~x{MGS58_>WPEWe%f2N<}_c_zQDS<`) z`w$g5`w}RUh_ou4#C3Q*93KvIBApoO;>i*<+5m)8U`A!(LD(USEaN$F02WeOA?YBH zKuwrkQ_jeeNkl+&KmZ;zj4fu{U46?E6TS4E)HF|$@$)11bLCKW2{+vP*cj*hmNj}? z5-YZu)co$-u9U%38Qey<{?htD14SE=*!XzRX&X%HiqQVhP(-xY#WR6u5<*a)?vleF ze6Bv<8&Hr!pa?g4(%4c^>G#C%RUV?L8}%x#b)M0chW*f%>uAefL2XSr+b?+qn%Lvn zY39HKPS+EKm9-iK2m?zci2uh_K>-^lAFCEHBeM_*0GhlIZTI~t*Y0MRsw&?xo!MHf z?fFWwkk$VK)Z=nit;K(!-q^h}OlMm*n9i*w|5d`@((8)4@)Mn&{6q%cO+N_jzd+iSquSFq4T9 zxMc(2UqW-p2oWd=9!3&CH82GP8-9=3OKZ!1Kck@e-G?q3+eN!g5q-orID!mA03c9p zQ}v$OTRDeN$yYH6nZftfEB{=NsCaHrUh#5oRqnr^kfphf-f>bR&?L**qm~YQam{R9 z{Vsf&yYK2=)Cw@rF%i01SyA0h4&$Nxj*xoEUMnGj>NhPh_r!F%6Ad<-8%>R-#?xbI zv(}$e&3|zK9UuPsKKLL2C9UU;Z|L4GvTb*oWM3>-Hq)~G9f(!+;kh=o3@|^Gpo6b} zLO}osBpl2Gwk|QPw3*qGtoxpvB8=k@_(>qAZ?IcrR1Z_2Fne;JU~YX6zPATt1Qk$vo?7qF z9ASvH*0o6_lOwaG>-q0_&2JP8-k!Gr$LGW=;zAc$v=S>9k0g)%k5p2PRkmUIH9^=w z3f9g=Ps3kr&);(#=kK!oTPaMo%8T0}8(n+X#*bd#shhO>R7&R_kF$=RBdfB=h01cU z10DePhC5AzTR9DJ2l{$GwK!BsDCRql%OplC_(*$w4}0OeUOoV)!o1^e*S9=qfVkjL zkb+j=bma7-caq)RY(fJ{F^NbgmJ$UR2B|O-MFZfLl!t{&{N1KlUo;R%4)%$h$6qGi z-*vH0n1IA^KQ(i+4n?n?eG(!`&lH4_GG6a}>S2zIT|-6qX6Dkn7)=Dvk=QE*rk?Ya zkRSp=yolQN8wXfw*z^y2PCaa%*B$k;DPP1T6`FW*710E&B}Osvb5yRS21h=q{!kv!b!zj_aA|Zo}lWuM|B6OKL!} zquWKayugf*bLS91=lnjHEeGy0!>3mg*;6UAhQI7pLmJ=5Gn3O>06$450*d|ZvQ@dl zKr3}=2K0BiGPT;daXTqQhrmpj7q8BdfE6o52QF$yVNUOt|QP}8$ z7B(LHuPaA(D-u~w%#^2}S>SbvZrykLl9S@gL9UYo0aUqNZ)cFmH&1F>FtoB6mkV3a z096D60U>s6({Sm4!e{;}!Z2?~R&l)|F2BKLr_Anhv2phEV30qUnH&gDMb(1HSygWc zC_yis+`c|l>eQLZcS{$;rQv)meD=f4v_ug8$s>HMGb@34WX*(wAS7HFbrI0U+liuvh@`bpg3I&E^*)C7VIs2X*ahR zfItABem7Ns;lO-5G#N4=darZ4{acBGNhe*NBy&PWzJS+$EM?Y#eOOIOr*jgMJ@5EGLR?w@gT0Rl+^o;xH2mqKl@XjPxSrEhG?8VyXQ zJ1OhE*Ibq?$J`IoIOT%nJo&p&RkJylfklCU1SF_<%rM9VkmN4sV*oRM$7P5%UxiPT zx69FbC*F3Y-zDe@p@lu+R3P{b09l5eh-V-YOR}cLOmC3j_jD+R=wUBiF(c}_LG0MF zDf{MR-nPL-9~U3@$_`@lUM$!v0(~H-%&43iZ{z;+23Q0*l`~VO)pdg#!0~4|tvaatMSIr3&cALV& zP;Y9(45T!FGfz$ZyNCptn!khiwl(CkfhT@GuOK#Y$A%_<*wHu1y59Qt1`InPnH+Bw W-21sJ)-Bq<{x0N-aG@arFTf&H*F2a2 diff --git a/tests/rest_api/assets/cvat_db/data.json b/tests/rest_api/assets/cvat_db/data.json index 9a0d30d6..d691c6bf 100644 --- a/tests/rest_api/assets/cvat_db/data.json +++ b/tests/rest_api/assets/cvat_db/data.json @@ -1453,7 +1453,7 @@ "pk": 3, "fields": { "password": "pbkdf2_sha256$260000$9YZSJ0xF4Kvjsm2Fwflciy$zRpcqAMLaJBbqTRS09NkZovOHtcdy6haZxu++AeoWFo=", - "last_login": null, + "last_login": "2022-03-28T13:05:05.561Z", "is_superuser": false, "username": "user2", "first_name": "User", @@ -3603,7 +3603,21 @@ "assignee": 3, "bug_tracker": "", "created_date": "2021-12-14T19:52:37.278Z", - "updated_date": "2022-03-05T10:32:23.813Z", + "updated_date": "2022-03-28T13:04:54.669Z", + "status": "annotation", + "organization": 2 + } +}, +{ + "model": "engine.project", + "pk": 3, + "fields": { + "name": "project 3", + "owner": 3, + "assignee": 19, + "bug_tracker": "", + "created_date": "2022-03-28T13:05:24.659Z", + "updated_date": "2022-03-28T13:06:09.283Z", "status": "annotation", "organization": 2 } @@ -5645,56 +5659,6 @@ "rating": 0.0 } }, -{ - "model": "engine.manifest", - "pk": 1, - "fields": { - "filename": "manifest.jsonl", - "cloud_storage": 1 - } -}, -{ - "model": "engine.manifest", - "pk": 2, - "fields": { - "filename": "manifest.jsonl", - "cloud_storage": 2 - } -}, -{ - "model": "engine.cloudstorage", - "pk": 1, - "fields": { - "provider_type": "AWS_S3_BUCKET", - "resource": "public", - "display_name": "Bucket 1", - "owner": 2, - "created_date": "2022-03-17T07:22:49.519Z", - "updated_date": "2022-03-17T07:22:49.529Z", - "credentials": "", - "credentials_type": "ANONYMOUS_ACCESS", - "specific_attributes": "endpoint_url=http%3A%2F%2Fminio%3A9000", - "description": "", - "organization": null - } -}, -{ - "model": "engine.cloudstorage", - "pk": 2, - "fields": { - "provider_type": "AWS_S3_BUCKET", - "resource": "private", - "display_name": "Bucket 2", - "owner": 11, - "created_date": "2022-03-17T07:23:59.305Z", - "updated_date": "2022-03-17T07:23:59.309Z", - "credentials": "minio_access_key minio_secret_key", - "credentials_type": "KEY_SECRET_KEY_PAIR", - "specific_attributes": "endpoint_url=http%3A%2F%2Fminio%3A9000", - "description": "", - "organization": 2 - } -}, { "model": "engine.issue", "pk": 1, @@ -5830,5 +5794,55 @@ "created_date": "2022-03-16T12:49:29.372Z", "updated_date": "2022-03-16T12:49:29.372Z" } +}, +{ + "model": "engine.manifest", + "pk": 1, + "fields": { + "filename": "manifest.jsonl", + "cloud_storage": 1 + } +}, +{ + "model": "engine.manifest", + "pk": 2, + "fields": { + "filename": "manifest.jsonl", + "cloud_storage": 2 + } +}, +{ + "model": "engine.cloudstorage", + "pk": 1, + "fields": { + "provider_type": "AWS_S3_BUCKET", + "resource": "public", + "display_name": "Bucket 1", + "owner": 2, + "created_date": "2022-03-17T07:22:49.519Z", + "updated_date": "2022-03-17T07:22:49.529Z", + "credentials": "", + "credentials_type": "ANONYMOUS_ACCESS", + "specific_attributes": "endpoint_url=http%3A%2F%2Fminio%3A9000", + "description": "", + "organization": null + } +}, +{ + "model": "engine.cloudstorage", + "pk": 2, + "fields": { + "provider_type": "AWS_S3_BUCKET", + "resource": "private", + "display_name": "Bucket 2", + "owner": 11, + "created_date": "2022-03-17T07:23:59.305Z", + "updated_date": "2022-03-17T07:23:59.309Z", + "credentials": "minio_access_key minio_secret_key", + "credentials_type": "KEY_SECRET_KEY_PAIR", + "specific_attributes": "endpoint_url=http%3A%2F%2Fminio%3A9000", + "description": "", + "organization": 2 + } } ] diff --git a/tests/rest_api/assets/projects.json b/tests/rest_api/assets/projects.json index ab3692de..a0042fb0 100644 --- a/tests/rest_api/assets/projects.json +++ b/tests/rest_api/assets/projects.json @@ -1,8 +1,36 @@ { - "count": 2, + "count": 3, "next": null, "previous": null, "results": [ + { + "assignee": { + "first_name": "User", + "id": 19, + "last_name": "Fifth", + "url": "http://localhost:8080/api/users/19", + "username": "user5" + }, + "bug_tracker": "", + "created_date": "2022-03-28T13:05:24.659000Z", + "dimension": null, + "id": 3, + "labels": [], + "name": "project 3", + "organization": 2, + "owner": { + "first_name": "User", + "id": 3, + "last_name": "Second", + "url": "http://localhost:8080/api/users/3", + "username": "user2" + }, + "status": "annotation", + "task_subsets": [], + "tasks": [], + "updated_date": "2022-03-28T13:06:09.283000Z", + "url": "http://localhost:8080/api/projects/3" + }, { "assignee": { "first_name": "User", @@ -45,7 +73,7 @@ "tasks": [ 11 ], - "updated_date": "2022-03-05T10:32:23.813000Z", + "updated_date": "2022-03-28T13:04:54.669000Z", "url": "http://localhost:8080/api/projects/2" }, { diff --git a/tests/rest_api/assets/users.json b/tests/rest_api/assets/users.json index 6822ac01..232616ba 100644 --- a/tests/rest_api/assets/users.json +++ b/tests/rest_api/assets/users.json @@ -278,7 +278,7 @@ "is_active": true, "is_staff": false, "is_superuser": false, - "last_login": null, + "last_login": "2022-03-28T13:05:05.561000Z", "last_name": "Second", "url": "http://localhost:8080/api/users/3", "username": "user2" diff --git a/tests/rest_api/test_projects.py b/tests/rest_api/test_projects.py new file mode 100644 index 00000000..381c48e8 --- /dev/null +++ b/tests/rest_api/test_projects.py @@ -0,0 +1,197 @@ +# Copyright (C) 2022 Intel Corporation +# +# SPDX-License-Identifier: MIT + +from http import HTTPStatus +from itertools import groupby, product +import pytest + +from .utils.config import get_method, post_method + + +class TestGetProjects: + def _find_project_by_user_org(self, user, projects, is_project_staff_flag, is_project_staff): + if is_project_staff_flag: + for p in projects: + if is_project_staff(user['id'], p['id']): + return p['id'] + else: + for p in projects: + if not is_project_staff(user['id'], p['id']): + return p['id'] + + def _test_response_200(self, username, project_id, **kwargs): + response = get_method(username, f'projects/{project_id}', **kwargs) + assert response.status_code == HTTPStatus.OK + project = response.json() + assert project_id == project['id'] + + def _test_response_403(self, username, project_id): + response = get_method(username, f'projects/{project_id}') + assert response.status_code == HTTPStatus.FORBIDDEN + + # Admin can see any project even he has no ownerships for this project. + def test_project_admin_accessibility(self, projects, find_users, is_project_staff, org_staff): + users = find_users(privilege='admin') + + user, project = next( + (user, project) + for user, project in product(users, projects) + if not is_project_staff(user['id'], project['organization']) + and user['id'] not in org_staff(project['organization']) + ) + self._test_response_200(user['username'], project['id']) + + # Project owner or project assignee can see project. + def test_project_owner_accessibility(self, projects): + for p in projects: + if p['owner'] is not None: + project_with_owner = p + if p['assignee'] is not None: + project_with_assignee = p + + assert project_with_owner is not None + assert project_with_assignee is not None + + self._test_response_200(project_with_owner['owner']['username'], project_with_owner['id']) + self._test_response_200(project_with_assignee['assignee']['username'], project_with_assignee['id']) + + def test_user_cannot_see_project(self, projects, find_users, is_project_staff, org_staff): + users = find_users(exclude_privilege='admin') + + user, project = next( + (user, project) + for user, project in product(users, projects) + if not is_project_staff(user['id'], project['organization']) + and user['id'] not in org_staff(project['organization']) + ) + self._test_response_403(user['username'], project['id']) + + # Member of organization that has role supervisor or worker cannot see + # project if this member not in [project:owner, project:assignee] + @pytest.mark.parametrize('role', ('supervisor', 'worker')) + def test_if_supervisor_or_worker_cannot_see_project(self, projects, is_project_staff, + find_users, role): + non_admins = find_users(role=role, exclude_privilege='admin') + assert non_admins is not None + + project_id = self._find_project_by_user_org(non_admins[0], projects, False, is_project_staff) + assert project_id is not None + + self._test_response_403(non_admins[0]['username'], project_id) + + # Member of organization that has role maintainer or owner can see any + # project even this member not in [project:owner, project:assignee] + @pytest.mark.parametrize('role', ('maintainer', 'owner')) + def test_if_maintainer_or_owner_can_see_project(self, find_users, projects, is_project_staff, role): + non_admins = find_users(role=role, exclude_privilege='admin') + assert non_admins is not None + + project_id = self._find_project_by_user_org(non_admins[0], projects, False, is_project_staff) + assert project_id is not None + + self._test_response_200(non_admins[0]['username'], project_id, org_id=non_admins[0]['org']) + + # Member of organization that has role supervisor or worker can see + # project if this member in [project:owner, project:assignee] + @pytest.mark.parametrize('role', ('supervisor', 'worker')) + def test_if_org_member_supervisor_or_worker_can_see_project(self, projects, + find_users, is_project_staff, role): + non_admins = find_users(role=role, exclude_privilege='admin') + assert len(non_admins) + + for u in non_admins: + project_id = self._find_project_by_user_org(u, projects, True, is_project_staff) + if project_id: + user_in_project = u + break + + assert project_id is not None + + self._test_response_200(user_in_project['username'], project_id, org_id=user_in_project['org']) + +class TestPostProjects: + def _test_create_project_201(self, user, spec, **kwargs): + response = post_method(user, '/projects', spec, **kwargs) + assert response.status_code == HTTPStatus.CREATED + + def _test_create_project_403(self, user, spec, **kwargs): + response = post_method(user, '/projects', spec, **kwargs) + assert response.status_code == HTTPStatus.FORBIDDEN + + def test_if_worker_cannot_create_project(self, find_users): + workers = find_users(privilege='worker') + assert len(workers) + + username = workers[0]['username'] + spec = { + 'name': f'test {username} tries to create a project' + } + self._test_create_project_403(username, spec) + + @pytest.mark.parametrize('privilege', ('admin', 'business', 'user')) + def test_is_user_can_create_project(self, find_users, privilege): + privileged_users = find_users(privilege=privilege) + assert len(privileged_users) + + username = privileged_users[0]['username'] + spec = { + 'name': f'test {username} tries to create a project' + } + self._test_create_project_201(username, spec) + + def test_if_user_cannot_have_more_than_3_projects(self, projects, find_users): + users = find_users(privilege='user') + + user_id, user_projects = next( + (user_id, len(list(projects))) + for user_id, projects in groupby(projects, lambda a: a['owner']['id']) + if len(list(projects)) < 3 + ) + user = users[user_id] + + for i in range(1, 4 - user_projects): + spec = { + 'name': f'test: {user["username"]} tries to create a project number {user_projects + i}' + } + self._test_create_project_201(user['username'], spec) + + spec = { + 'name': f'test {user["username"]} tries to create more than 3 projects' + } + self._test_create_project_403(user['username'], spec) + + @pytest.mark.parametrize('privilege', ('admin', 'business')) + def test_if_user_can_have_more_than_3_projects(self, find_users, privilege): + privileged_users = find_users(privilege=privilege) + assert len(privileged_users) + + user = privileged_users[0] + + for i in range(1, 5): + spec = { + 'name': f'test: {user["username"]} with privilege {privilege} tries to create a project number {i}' + } + self._test_create_project_201(user['username'], spec) + + def test_if_org_worker_cannot_crate_project(self, find_users): + workers = find_users(role='worker') + + worker = next(u for u in workers if u['org']) + + spec = { + 'name': f'test: worker {worker["username"]} creating a project for his organization', + } + self._test_create_project_403(worker['username'], spec, org_id=worker['org']) + + @pytest.mark.parametrize('role', ('supervisor', 'maintainer', 'owner')) + def test_if_org_role_can_crate_project(self, find_users, role): + privileged_users = find_users(role=role) + assert len(privileged_users) + + user = next(u for u in privileged_users if u['org']) + + spec = { + 'name': f'test: worker {user["username"]} creating a project for his organization', + } + self._test_create_project_201(user['username'], spec, org_id=user['org'])