From c20321e7e0e4c3d304ae7a56c609567b4a80ec55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= <jus@bitgrid.net> Date: Thu, 2 Apr 2020 19:37:40 +0200 Subject: [PATCH] Add tests for encoded group id MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl <jus@bitgrid.net> Signed-off-by: npmbuildbot[bot] <npmbuildbot[bot]@users.noreply.github.com> --- .../tests/Controller/GroupsControllerTest.php | 84 +++++++++++++++--- apps/settings/js/vue-6.js | Bin 52151 -> 52380 bytes apps/settings/js/vue-6.js.map | Bin 145144 -> 145517 bytes .../js/vue-settings-apps-users-management.js | Bin 262115 -> 262175 bytes .../vue-settings-apps-users-management.js.map | Bin 1241120 -> 1241204 bytes 5 files changed, 74 insertions(+), 10 deletions(-) diff --git a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php index 0ed6d58e217..34bcdd4e645 100644 --- a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php +++ b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php @@ -75,13 +75,13 @@ class GroupsControllerTest extends \Test\TestCase { $this->userSession = $this->createMock(IUserSession::class); $this->accountManager = $this->createMock(AccountManager::class); $this->logger = $this->createMock(ILogger::class); - + $this->subAdminManager = $this->createMock(SubAdmin::class); $this->groupManager ->method('getSubAdmin') ->willReturn($this->subAdminManager); - + $this->api = $this->getMockBuilder(GroupsController::class) ->setConstructorArgs([ 'provisioning_api', @@ -256,7 +256,6 @@ class GroupsControllerTest extends \Test\TestCase { 'disabled' => 11, 'canAdd' => true, 'canRemove' => true - ] ]], $result->getData()); } @@ -285,7 +284,7 @@ class GroupsControllerTest extends \Test\TestCase { $this->assertEquals(['users' => ['user1', 'user2']], $result->getData()); } - + public function testGetGroupAsIrrelevantSubadmin() { $this->expectException(\OCP\AppFramework\OCS\OCSException::class); $this->expectExceptionCode(403); @@ -330,7 +329,7 @@ class GroupsControllerTest extends \Test\TestCase { $this->assertEquals(['users' => ['user1', 'user2']], $result->getData()); } - + public function testGetGroupNonExisting() { $this->expectException(\OCP\AppFramework\OCS\OCSException::class); $this->expectExceptionMessage('The requested group could not be found'); @@ -341,7 +340,7 @@ class GroupsControllerTest extends \Test\TestCase { $this->api->getGroup($this->getUniqueID()); } - + public function testGetSubAdminsOfGroupsNotExists() { $this->expectException(\OCP\AppFramework\OCS\OCSException::class); $this->expectExceptionMessage('Group does not exist'); @@ -388,7 +387,7 @@ class GroupsControllerTest extends \Test\TestCase { $this->assertEquals([], $result->getData()); } - + public function testAddGroupEmptyGroup() { $this->expectException(\OCP\AppFramework\OCS\OCSException::class); $this->expectExceptionMessage('Invalid group name'); @@ -397,7 +396,7 @@ class GroupsControllerTest extends \Test\TestCase { $this->api->addGroup(''); } - + public function testAddGroupExistingGroup() { $this->expectException(\OCP\AppFramework\OCS\OCSException::class); $this->expectExceptionCode(102); @@ -438,7 +437,7 @@ class GroupsControllerTest extends \Test\TestCase { $this->api->addGroup('Iñtërnâtiônà lizætiøn'); } - + public function testDeleteGroupNonExisting() { $this->expectException(\OCP\AppFramework\OCS\OCSException::class); $this->expectExceptionCode(101); @@ -446,7 +445,7 @@ class GroupsControllerTest extends \Test\TestCase { $this->api->deleteGroup('NonExistingGroup'); } - + public function testDeleteAdminGroup() { $this->expectException(\OCP\AppFramework\OCS\OCSException::class); $this->expectExceptionCode(102); @@ -478,6 +477,25 @@ class GroupsControllerTest extends \Test\TestCase { $this->api->deleteGroup('ExistingGroup'); } + public function testDeleteGroupEncoding() { + $this->groupManager + ->method('groupExists') + ->with('ExistingGroup A/B') + ->willReturn('true'); + + $group = $this->createGroup('ExistingGroup'); + $this->groupManager + ->method('get') + ->with('ExistingGroup A/B') + ->willReturn($group); + $group + ->expects($this->once()) + ->method('delete') + ->willReturn(true); + + $this->api->deleteGroup(urlencode('ExistingGroup A/B')); + } + public function testGetGroupUsersDetails() { $gid = 'ncg1'; @@ -523,4 +541,50 @@ class GroupsControllerTest extends \Test\TestCase { $this->api->getGroupUsersDetails($gid); } + + public function testGetGroupUsersDetailsEncoded() { + $gid = 'Department A/B C/D'; + + $this->asAdmin(); + $this->useAccountManager(); + + $users = [ + 'ncu1' => $this->createUser('ncu1'), # regular + 'ncu2' => $this->createUser('ncu2'), # the zombie + ]; + $users['ncu2']->expects($this->atLeastOnce()) + ->method('getHome') + ->willThrowException(new NoUserException()); + + $this->userManager->expects($this->any()) + ->method('get') + ->willReturnCallback(function(string $uid) use ($users) { + return isset($users[$uid]) ? $users[$uid] : null; + }); + + $group = $this->createGroup($gid); + $group->expects($this->once()) + ->method('searchUsers') + ->with('', null, 0) + ->willReturn(array_values($users)); + + $this->groupManager + ->method('get') + ->with($gid) + ->willReturn($group); + $this->groupManager->expects($this->any()) + ->method('getUserGroups') + ->willReturn([$group]); + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + $this->subAdminManager->expects($this->any()) + ->method('isSubAdminOfGroup') + ->willReturn(false); + $this->subAdminManager->expects($this->any()) + ->method('getSubAdminsGroups') + ->willReturn([]); + + + $this->api->getGroupUsersDetails(urlencode($gid)); + } } diff --git a/apps/settings/js/vue-6.js b/apps/settings/js/vue-6.js index 1e149e192d0f70199bc62afce75ee0ddc84af5f3..9ecff6edfcf1032420c3723d8a24137d6ff5b600 100644 GIT binary patch delta 517 zcmdl!oq5ho<_&ikIZREB%~DfSjVC{0Y~?UBv@kKXNHW-5$P~-OVPtAxkeq6oHu)OM zRrX}_v{cg+v(1}W9||)DZJr|eo0l<b@&xq?#;VCuvkQRip4rMka^q~H$rm)Nfl7EZ z4fz<WHrtukF#*-snd?l}a|qsSW3_=1iJN0{7QtOPncw~sL~^s9!+D^@=6{YiA-dH! z|98=q<My=8)63Hc*VGBIooqN)XLEA03?rlG=7tmrM#hlIGgH@y6sP8-CYPk9xEJM@ z7PzD)=clBmOcqQRR!af1LxVh>^K%RG^HTFlG)giui}g@6Xl`~+n{5F1`sQcTOxbZ6 zDKWV$jZcp_W3BQ^b8>2RN+<iJiB0YoW1AeXP;9f`yp@7dc_0^}xGGhzq$o32Lv!=r z^`%_$shA2%^fFU4Yk@!~x@5BA_N2}Ccm3q&fcjNu^54lSlmDKIfJNElnA7eerpc+6 U=7t6a#s+CgCP^k{rbeb|00!W@H2?qr delta 328 zcmbO;lX?4e<_&ikIgC>i(~?Y#EG9o;Y~?VuOfpF^wlv>d$P~-Ok!p}=W^80+H2E6K zRrbWh)Kp80l+Bx19||*OZJr|eo0qX_@&xq?#-PcZ8U;Z1?b*tVRg>lzO}?OE4OGFS zX~+kZTew7hbE<hb6NEWg(;;HBjnxK5ByNt)Sp;|8WPbZkP;HtHSD+G`Rh>3LOsJcD zz>aHkg6kPs?hxBNy*!O@O&w3$$qjRLHYX>`FfxX0Zb*?}Wb~XoGj+}8DQPne;J(;w zI^C3g^Tm001ljaTiZXLGHXq+m%EeQnmzh!v1Uk_rdXvxZ5SzSyoA>6uyMOXe-g~+h f=IhChXWT_hj4cceO-)RUk}ZtWObsjz%neciJvew< diff --git a/apps/settings/js/vue-6.js.map b/apps/settings/js/vue-6.js.map index 67d68a09e573fed5945e011e2f3c726f70f92d45..255f5b85d35dddeff54eb6941244a6d933aba070 100644 GIT binary patch delta 2713 zcmb7GTTE0(7|uCvyGL6QirlOuCz=wF0rqy5rNx@rg+040uplC#!8Ut2z;fBM%U-y& zSSkceAZjvAPam4vs<kGj8a)rBHO89QOZw9K(uX#+YTK74T9f)<Vq!Zpdv=!vV&r8q z^Z(!f&-eZRoH_I89(V5ncjB(jX11Epo##zDOTR=WyU+<;g&Jgv8J$Hi`>5p;wp8c0 z1sf<%@JoI=F-rXbI<X3ZKyd2JrrJ$9e}mtTzS8mN7P}3_alTt@zFMds<X)1(0XZmj z?{_=o(TE(D!f`aQ?aM-GL<+>Epg1NcB25y31l5}STa9l-?XU%c9_WFf+5wv(2*3`q z?t~!bfDQ=8n}{`Lhi(Wa>D&v4>;y83$0)_%NQ|^luMZ}vcM^5A?J66>c8tWMjb``3 zF=|PmV{Jz7U=#6%@R*>ny)aBIG9FD7-vi^+g8jgtS*EDPKrED1H*BDmYLwSLtT$tx zJ<y`gv>#wuA%uQ6m8<`DoG*7{r4)wMB$|n)wv2MD0<XO*mE(0UJV;XYWV!gsI)Hu- z4_2G03=1A7X>b>8pcY&TLKKtmX=0)%BwyhMMG`w8A`s!h6kQnbC_Bl{!*(c8lNFES zPKd`|n52CfM-!3VTpgVcd(_jBs|;&%Aph7oCZfI&^XZGc05<|RBi;g<A#7^~oe*}b zlT!|c8x?UL*qc;uyj{j@l|{@6`lvsG{(fgMKPmzl$I5mfLMV=j=#rmDZ_a$wD0>L1 zGcJ;p?t};=2&H6dH7-*0M8+3@Fo25(y#y>K(e&Y(J+WpQIh6yV3r~`|ya@-52_f%X zDQEQHZooDf$#XlodTk$c^SwQ<X$wq&Y@=m$rM7cGSV!eroK_bh<pFL?Hywhe-!13r zQ`kv#f1#u}?MWqblRdl4A}ZKbf=(XkK-QTXtCUx#l-FsDa+G6VuJXEdlxv_?QjLu% zw`*jz4DG3UK9llv2>NNEc-;bMfR+^nP){ByVk&a`Zm@$8J{}>v(N1?C*Yu-bW?eP8 z9mdcB3>~l!I5#d;)TCyTRIlmtkdqup+j@P@Mxh@UN^<m;txg<ru8@p-z5{uW{)*n3 z=T|8=rInjkDgSJKwQ>wiDNm8!Sd(AZ2xgMlHlo~w9?$XX3eM!i?Z`RgMDSll11^m- z@Q}}z-Vsjp@oX{7Jpdt>b^wN4IR_y1Ibd%}dG_NUa-py1Ye4SV$ly9Qel(m~figMv zQzBE@@8BsXBOA2lODJ8Pw|#A$tjM?6wRPA<JZ<z_A3@g_Uv3?B0sJq4QM-2WhEv6v zYSM~j_0Wn&QsyYVnM8muD+e8h9Q2j~-T0awMiomuE5wj%$-G?%NDcKygTZX*_gnlH zt6&oP)#FPq>N%5OFa#u_AMHC`s$M~b3?~R?t0YNgbV1pnK6rnY(Ff}LB_U`<d1uR1 z^Z|xgjW&y5^BdF)O3jws6pue`WL8=pZcguTNcry|Q>q>~qh>Oyd1vP`3z8mP{`@|t zZFfkyX=2OOZ_eG`ymRf-qjG?}H)=z{D)o!Y=I#3Q%j5R9SASD3o?^D9E$Gfag%v^i zE?N0>sf-VXVzsfAkC&?D<7b%byEE*Ss$K>t*S=?7Q49iGOlE<MlhjMOA+UdBE!Q4i zQcf_8Zu#yH%uzG{G|v1qKdtP2#DL{fPnd!&X|BsE$3D?3?mRY!zG5h1pHmK(u-sny z%HsF&&nAd}l@BLIM*6~i@xJ&pSU#W6ez>!IJz}9?ZG0>=T3NN+TEiaKr(3R-z`|}* a?tjM=D76BcO#4W`NCo~(8<dMy*8M+fa!f`5 delta 2540 zcmb7EZERCj7|y+0?47W%F<1b%Scf2Cm#yu+?QJ6{r(d_D>pq-Vt5MRmrR%oRZtG-B z=cdDrzy@RQuws~z2+NEyMsDIX#IM9;(GbPIMiKpGq7Y;Jp#jlz&i%knVzwXm%{lMq z^FH@I@3mjKKdy08KNhz;qXPVJm#sK1N;Z6`fvMuHN}Q==irXEMg=$`BHx#?#(YWg8 zvXFyNl&}(ip(rlciI*}`R993aNe=j+_&&J8u7Mm*c7-idDoh<5Os#oOd8+K2om>p< zL3|hmp(Rvxf1DhXZp8O^kO%R#REl2YLwpovu|ACY;AE&~ql=!C*vIKnt=;$>Mj5yi zvNlWfj4gaWjg6oVFR`Yuv{C;sIzTlUEG?QQM>RNtx42OQ;`btfYD8#k>M{*rO&A?g zK5BZDWd~ERN~l(>t#4I3Lx_4|h!`}M&00f<@1yq!Y9W!Ww@W`p?qS%H>8Kr`NDpC& zKOEeK1ga6S#JF(HsD`}@-p^d*BtMCD_~F^Cna|1O(vM}vPlCJLXppKbSRV8vEF&mO z>Ft5V>}JkR&$WA$-?ASvti=uQ_Rce%$`gH2Q)ztz??Wi$!}w8~a(U3ha9uKvN0FRz z&vP4@(zJ}RpeWyp(B1=phK`kGWIp3YDC6d3gygIYUpJWHz^E5?KmYj7bdY$q_R1t} zL!Zni5K83KTfa;ro-u4Ogkq#{GjW!4F!{oc?L9skIZ)t4FTor&HTQdHOcHv=H*kYN zK7{e7;pBJ~XV>aLW_bIscEJ!x87*r-E$2a~-ba9nelb8m1^EUH_f8>deuBy8rJi;* z$H4%_shYj?j7JBB^&F*Y-39`$%?d5YY*04pfXR{1mT=@$IdW;(3pm2ILXKQ_;7D_7 zBp6o4(SsUTEkhISVqjSuIbrg}YH@j7XzBM9P;p~x;iy>Ld<suh%58O182uU%U_Bhz zQ8*OX6)y|CFly;vU0Kf$X+0ZBoc|e(PCpq9=bc8w0@X*%((>9iDkS|z=N<6vk@N8L zsF~Bdhbv>1oYCyfu>hwx3s=Y2m#wThedujELyna+w=`<yqhCpXoskFsAAR~s<L|7m zm9;;|2g$3aYsL?sj8!6?4)qlz1KKcjsIN@t$FQpZ|Mu?a2tecE9lTE662F#}KaE}5 zm|!Gotw)wVj{ljGB-}W9uVZ;rViagHxVku;3Xn^PKK@RX0>O)yJ_>8R*wl?<^Q-$I zjh{o>E%+(ML9gx<qzref3DR`Y$vobD9xCeHbm@_;wKwUZtC`2E-r@GZ#6$(#*$ZbU zgmt3ev|8<=Xp1?8{dSAXB3a_fPZO(6T*4A{2sWDyzIt^73?KhEKO(W^u<L9o>^mWu z64CwbqRpw)pPFS%(P$#!a>ny!iQTCD@^S^k*<I~oTyRNHe`*uN&U}C2v{+J@aqzU5 z&n_~haCN2}cE7fMdJZR^FN4cd71MK7@a5zK({m3)`i;&14%-KBze3y&!O*!ihC!J* zcWDWTk-4ry4Xm2KuH(G$=B*Mg*_-Ll)}`XgCPi4s@cHm{W}7m!IP={?_jyLST{S-& z!PeuSGh6c4B1|PY#f-|78{h9T;pU8?UAXxLvrAm9S1=Emhw`icWcY=b{$|SWUYIRm zZ<!X>u4SjIN|LE~U9LBk-nQ^*9ecv0BUFoCbg(sQQG9yZuwj<}GA_83lz-C6uKfo` CUIsJ( diff --git a/apps/settings/js/vue-settings-apps-users-management.js b/apps/settings/js/vue-settings-apps-users-management.js index b1449d33ebb43e5b4b490c919478da1098d6acd1..a1cde0dff88ab5adde4dd4eb6dfd7bc7aeae41d7 100644 GIT binary patch delta 150 zcmaF-pMQRXz=n@ZBBsfymga^A2F3<yNhV1qW~N4_Y0a$6?X1j<K+LqAm6=)XplE7d za(+r`XppCKer`d2UTR*6MyBR=og>WGS*L$E$t=2^<rH%zvnZyjR87t46OS^BPOrPd n%r$+(9cHfW%g-`v7>O7q8YUVUrx;rrq@@{HCM6lAnIr)KsAn=l delta 97 zcmbQ=An^D<|AvoDA|}QbhK8mlCPv8?#%ZPomImeqDb1|R?X1j<K+LqAm6=)XAY<ls zha=3_SsC-T>zrb)WM<Ty{`v~D=Jv;DnKg_=EE7!(%?-`XEi97^6HUxhOj8Y00jO&o ACIA2c diff --git a/apps/settings/js/vue-settings-apps-users-management.js.map b/apps/settings/js/vue-settings-apps-users-management.js.map index c8277b5284aa6211bdceee07b180573d8068d103..217763eeb6fbb88a155697bc9c620f902684351b 100644 GIT binary patch delta 391 zcmZ4R!28Ps?}iq}7N!>F7M3lnTfewD>f|~(I_5g%W;*M5Iy&aL>SQ_t`R)Z3&N{9@ zzPnB~NZz9|!v)OufT;H@GI!Q-cXSK|YH~L8nttIY>!s~Szp@swTEa}Us05ps<Emo> zG{M46A7X-~8`wk(caVud6M{h|6nGXHyG`%sVbj<?;Wz6YCP}y<<<2_ZP(`M0#)e=; zI@?$NW6jeQF-kN{G%`*xwlqjfGq6lbGD<T^+ODm`wvJWAG&$AM+|a<l*dQ&*B+10g z)W|fg{jDJz5VHd@2M}`tF&7YX12GQ}^8zs+5c31E01yjqe`_dI<U8G`UPzKjvv&H+ zHX+~XUKfRww_mFla_0hxOR#39Xac3)w+U%%_v;d3WRpnEOU_S84Gr>i&d)8#&r8iK U(MSg=n!bCvkm>f02|_dC0hFVKDgXcg delta 331 zcmezJz<a?1?}iq}7N!>F7M3lnTff-lW;*M*J33~#=wv!OI%>NXR5<InIy&mR>SQ|s z`EHd!84%x1Cl|zbFER(K57qH>bT09nF8_`7()P1oS&LW=EGoe=`p!B=K$Qlr`VgIl z5R(kRCIM{<2I<W3C^DXI&&Z~^eZg<mJ50P5<<3B1$3T!=#q<aNS#`GW{l{9QD`J^w zVrXt?Zf;?jWSD4To?@D6n7Z9rhix6Jh>5X<p`odXiBYnJahj=trGdFYN;|6&8xXSt zF$WNH0x=g5a|1CC5c2{t9}x2cu>cSYZf7+TD)MDbFUl`1*gm0NXeZb7m@Xj>#@gx9 j?Lr#c`?`b}*;vvuQ#7Yvs25V5zM)G<VEdg3LNnq4yv}4% -- GitLab