You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ApiTest.php 56KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639
  1. <?php
  2. /**
  3. * @author Björn Schießle <bjoern@schiessle.org>
  4. * @author Joas Schilling <nickvergessen@owncloud.com>
  5. * @author Morris Jobke <hey@morrisjobke.de>
  6. * @author Robin Appelman <icewind@owncloud.com>
  7. * @author Robin McCorkell <robin@mccorkell.me.uk>
  8. * @author Roeland Jago Douma <rullzer@owncloud.com>
  9. * @author Thomas Müller <thomas.mueller@tmit.eu>
  10. * @author Vincent Petry <pvince81@owncloud.com>
  11. *
  12. * @copyright Copyright (c) 2016, ownCloud, Inc.
  13. * @license AGPL-3.0
  14. *
  15. * This code is free software: you can redistribute it and/or modify
  16. * it under the terms of the GNU Affero General Public License, version 3,
  17. * as published by the Free Software Foundation.
  18. *
  19. * This program is distributed in the hope that it will be useful,
  20. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  21. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  22. * GNU Affero General Public License for more details.
  23. *
  24. * You should have received a copy of the GNU Affero General Public License, version 3,
  25. * along with this program. If not, see <http://www.gnu.org/licenses/>
  26. *
  27. */
  28. namespace OCA\Files_Sharing\Tests;
  29. /**
  30. * Class ApiTest
  31. *
  32. * @group DB
  33. */
  34. class ApiTest extends TestCase {
  35. const TEST_FOLDER_NAME = '/folder_share_api_test';
  36. private static $tempStorage;
  37. /** @var \OCP\Files\Folder */
  38. private $userFolder;
  39. protected function setUp() {
  40. parent::setUp();
  41. \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'no');
  42. \OC::$server->getAppConfig()->setValue('core', 'shareapi_expire_after_n_days', '7');
  43. $this->folder = self::TEST_FOLDER_NAME;
  44. $this->subfolder = '/subfolder_share_api_test';
  45. $this->subsubfolder = '/subsubfolder_share_api_test';
  46. $this->filename = '/share-api-test.txt';
  47. // save file with content
  48. $this->view->file_put_contents($this->filename, $this->data);
  49. $this->view->mkdir($this->folder);
  50. $this->view->mkdir($this->folder . $this->subfolder);
  51. $this->view->mkdir($this->folder . $this->subfolder . $this->subsubfolder);
  52. $this->view->file_put_contents($this->folder.$this->filename, $this->data);
  53. $this->view->file_put_contents($this->folder . $this->subfolder . $this->filename, $this->data);
  54. $this->userFolder = \OC::$server->getUserFolder(self::TEST_FILES_SHARING_API_USER1);
  55. }
  56. protected function tearDown() {
  57. if($this->view instanceof \OC\Files\View) {
  58. $this->view->unlink($this->filename);
  59. $this->view->deleteAll($this->folder);
  60. }
  61. self::$tempStorage = null;
  62. parent::tearDown();
  63. }
  64. /**
  65. * @param array $data
  66. * @return \OCP\IRequest
  67. */
  68. private function createRequest(array $data) {
  69. $request = $this->getMock('\OCP\IRequest');
  70. $request->method('getParam')
  71. ->will($this->returnCallback(function($param, $default = null) use ($data) {
  72. if (isset($data[$param])) {
  73. return $data[$param];
  74. }
  75. return $default;
  76. }));
  77. return $request;
  78. }
  79. /**
  80. * @param \OCP\IRequest $request
  81. * @param string $userId The userId of the caller
  82. * @return \OCA\Files_Sharing\API\Share20OCS
  83. */
  84. private function createOCS($request, $userId) {
  85. $currentUser = \OC::$server->getUserManager()->get($userId);
  86. $l = $this->getMock('\OCP\IL10N');
  87. $l->method('t')
  88. ->will($this->returnCallback(function($text, $parameters = []) {
  89. return vsprintf($text, $parameters);
  90. }));
  91. return new \OCA\Files_Sharing\API\Share20OCS(
  92. $this->shareManager,
  93. \OC::$server->getGroupManager(),
  94. \OC::$server->getUserManager(),
  95. $request,
  96. \OC::$server->getRootFolder(),
  97. \OC::$server->getURLGenerator(),
  98. $currentUser,
  99. $l
  100. );
  101. }
  102. /**
  103. * @medium
  104. */
  105. function testCreateShareUserFile() {
  106. // simulate a post request
  107. $data['path'] = $this->filename;
  108. $data['shareWith'] = self::TEST_FILES_SHARING_API_USER2;
  109. $data['shareType'] = \OCP\Share::SHARE_TYPE_USER;
  110. $request = $this->createRequest($data);
  111. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  112. $result = $ocs->createShare();
  113. $this->assertTrue($result->succeeded());
  114. $data = $result->getData();
  115. $this->assertEquals(19, $data['permissions']);
  116. $this->assertEmpty($data['expiration']);
  117. $this->shareManager->getShareById('ocinternal:'.$data['id']);
  118. $request = $this->createRequest([]);
  119. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  120. $result = $ocs->deleteShare($data['id']);
  121. $this->assertTrue($result->succeeded());
  122. }
  123. function testCreateShareUserFolder() {
  124. // simulate a post request
  125. $data['path'] = $this->folder;
  126. $data['shareWith'] = self::TEST_FILES_SHARING_API_USER2;
  127. $data['shareType'] = \OCP\Share::SHARE_TYPE_USER;
  128. $request = $this->createRequest($data);
  129. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  130. $result = $ocs->createShare();
  131. $this->assertTrue($result->succeeded());
  132. $data = $result->getData();
  133. $this->assertEquals(31, $data['permissions']);
  134. $this->assertEmpty($data['expiration']);
  135. $this->shareManager->getShareById('ocinternal:'.$data['id']);
  136. $request = $this->createRequest([]);
  137. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  138. $result = $ocs->deleteShare($data['id']);
  139. $this->assertTrue($result->succeeded());
  140. }
  141. function testCreateShareGroupFile() {
  142. // simulate a post request
  143. $data['path'] = $this->filename;
  144. $data['shareWith'] = self::TEST_FILES_SHARING_API_GROUP1;
  145. $data['shareType'] = \OCP\Share::SHARE_TYPE_GROUP;
  146. $request = $this->createRequest($data);
  147. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  148. $result = $ocs->createShare();
  149. $this->assertTrue($result->succeeded());
  150. $data = $result->getData();
  151. $this->assertEquals(19, $data['permissions']);
  152. $this->assertEmpty($data['expiration']);
  153. $this->shareManager->getShareById('ocinternal:'.$data['id']);
  154. $request = $this->createRequest([]);
  155. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  156. $result = $ocs->deleteShare($data['id']);
  157. $this->assertTrue($result->succeeded());
  158. }
  159. function testCreateShareGroupFolder() {
  160. // simulate a post request
  161. $data['path'] = $this->folder;
  162. $data['shareWith'] = self::TEST_FILES_SHARING_API_GROUP1;
  163. $data['shareType'] = \OCP\Share::SHARE_TYPE_GROUP;
  164. $request = $this->createRequest($data);
  165. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  166. $result = $ocs->createShare();
  167. $this->assertTrue($result->succeeded());
  168. $data = $result->getData();
  169. $this->assertEquals(31, $data['permissions']);
  170. $this->assertEmpty($data['expiration']);
  171. $this->shareManager->getShareById('ocinternal:'.$data['id']);
  172. $request = $this->createRequest([]);
  173. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  174. $result = $ocs->deleteShare($data['id']);
  175. $this->assertTrue($result->succeeded());
  176. }
  177. public function testCreateShareLink() {
  178. // simulate a post request
  179. $data['path'] = $this->folder;
  180. $data['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
  181. $request = $this->createRequest($data);
  182. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  183. $result = $ocs->createShare();
  184. // check if API call was successful
  185. $this->assertTrue($result->succeeded());
  186. $data = $result->getData();
  187. $this->assertEquals(1, $data['permissions']);
  188. $this->assertEmpty($data['expiration']);
  189. $this->assertTrue(is_string($data['token']));
  190. // check for correct link
  191. $url = \OC::$server->getURLGenerator()->getAbsoluteURL('/index.php/s/' . $data['token']);
  192. $this->assertEquals($url, $data['url']);
  193. $this->shareManager->getShareById('ocinternal:'.$data['id']);
  194. $request = $this->createRequest([]);
  195. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  196. $result = $ocs->deleteShare($data['id']);
  197. $this->assertTrue($result->succeeded());
  198. }
  199. public function testCreateShareLinkPublicUpload() {
  200. // simulate a post request
  201. $data['path'] = $this->folder;
  202. $data['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
  203. $data['publicUpload'] = 'true';
  204. $request = $this->createRequest($data);
  205. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  206. $result = $ocs->createShare();
  207. // check if API call was successful
  208. $this->assertTrue($result->succeeded());
  209. $data = $result->getData();
  210. $this->assertEquals(
  211. \OCP\Constants::PERMISSION_READ |
  212. \OCP\Constants::PERMISSION_CREATE |
  213. \OCP\Constants::PERMISSION_UPDATE |
  214. \OCP\Constants::PERMISSION_DELETE,
  215. $data['permissions']
  216. );
  217. $this->assertEmpty($data['expiration']);
  218. $this->assertTrue(is_string($data['token']));
  219. // check for correct link
  220. $url = \OC::$server->getURLGenerator()->getAbsoluteURL('/index.php/s/' . $data['token']);
  221. $this->assertEquals($url, $data['url']);
  222. $this->shareManager->getShareById('ocinternal:'.$data['id']);
  223. $request = $this->createRequest([]);
  224. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  225. $result = $ocs->deleteShare($data['id']);
  226. $this->assertTrue($result->succeeded());
  227. }
  228. function testEnfoceLinkPassword() {
  229. $appConfig = \OC::$server->getAppConfig();
  230. $appConfig->setValue('core', 'shareapi_enforce_links_password', 'yes');
  231. // don't allow to share link without a password
  232. $data['path'] = $this->folder;
  233. $data['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
  234. $request = $this->createRequest($data);
  235. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  236. $result = $ocs->createShare();
  237. $this->assertFalse($result->succeeded());
  238. // don't allow to share link without a empty password
  239. $data = [];
  240. $data['path'] = $this->folder;
  241. $data['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
  242. $data['password'] = '';
  243. $request = $this->createRequest($data);
  244. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  245. $result = $ocs->createShare();
  246. $this->assertFalse($result->succeeded());
  247. // share with password should succeed
  248. $data = [];
  249. $data['path'] = $this->folder;
  250. $data['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
  251. $data['password'] = 'foo';
  252. $request = $this->createRequest($data);
  253. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  254. $result = $ocs->createShare();
  255. $this->assertTrue($result->succeeded());
  256. $data = $result->getData();
  257. // setting new password should succeed
  258. $data2 = [
  259. 'password' => 'bar',
  260. ];
  261. $request = $this->createRequest($data2);
  262. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  263. $result = $ocs->updateShare($data['id']);
  264. $this->assertTrue($result->succeeded());
  265. // removing password should fail
  266. $data2 = [
  267. 'password' => '',
  268. ];
  269. $request = $this->createRequest($data2);
  270. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  271. $result = $ocs->updateShare($data['id']);
  272. $this->assertFalse($result->succeeded());
  273. // cleanup
  274. $request = $this->createRequest([]);
  275. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  276. $result = $ocs->deleteShare($data['id']);
  277. $this->assertTrue($result->succeeded());
  278. $appConfig->setValue('core', 'shareapi_enforce_links_password', 'no');
  279. }
  280. /**
  281. * @medium
  282. */
  283. function testSharePermissions() {
  284. // sharing file to a user should work if shareapi_exclude_groups is set
  285. // to no
  286. \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'no');
  287. $post['path'] = $this->filename;
  288. $post['shareWith'] = self::TEST_FILES_SHARING_API_USER2;
  289. $post['shareType'] = \OCP\Share::SHARE_TYPE_USER;
  290. $request = $this->createRequest($post);
  291. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  292. $result = $ocs->createShare();
  293. $this->assertTrue($result->succeeded());
  294. $data = $result->getData();
  295. $this->shareManager->getShareById('ocinternal:'.$data['id']);
  296. $request = $this->createRequest([]);
  297. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  298. $result = $ocs->deleteShare($data['id']);
  299. $this->assertTrue($result->succeeded());
  300. // exclude groups, but not the group the user belongs to. Sharing should still work
  301. \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'yes');
  302. \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups_list', 'admin,group1,group2');
  303. $post = [];
  304. $post['path'] = $this->filename;
  305. $post['shareWith'] = self::TEST_FILES_SHARING_API_USER2;
  306. $post['shareType'] = \OCP\Share::SHARE_TYPE_USER;
  307. $request = $this->createRequest($post);
  308. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  309. $result = $ocs->createShare();
  310. $this->assertTrue($result->succeeded());
  311. $data = $result->getData();
  312. $this->shareManager->getShareById('ocinternal:' . $data['id']);
  313. $request = $this->createRequest([]);
  314. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  315. $result = $ocs->deleteShare($data['id']);
  316. $this->assertTrue($result->succeeded());
  317. // now we exclude the group the user belongs to ('group'), sharing should fail now
  318. \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups_list', 'admin,group');
  319. $post = [];
  320. $post['path'] = $this->filename;
  321. $post['shareWith'] = self::TEST_FILES_SHARING_API_USER2;
  322. $post['shareType'] = \OCP\Share::SHARE_TYPE_USER;
  323. $request = $this->createRequest($post);
  324. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  325. $result = $ocs->createShare();
  326. // cleanup
  327. \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'no');
  328. \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups_list', '');
  329. }
  330. /**
  331. * @medium
  332. */
  333. function testGetAllShares() {
  334. $node = $this->userFolder->get($this->filename);
  335. $share = $this->shareManager->newShare();
  336. $share->setNode($node)
  337. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  338. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  339. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  340. ->setPermissions(19);
  341. $share = $this->shareManager->createShare($share);
  342. $request = $this->createRequest([]);
  343. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  344. $result = $ocs->getShares();
  345. $this->assertTrue($result->succeeded());
  346. $this->assertTrue(count($result->getData()) === 1);
  347. $this->shareManager->deleteShare($share);
  348. }
  349. function testGetAllSharesWithMe() {
  350. $node1 = $this->userFolder->get($this->filename);
  351. $share1 = $this->shareManager->newShare();
  352. $share1->setNode($node1)
  353. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  354. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  355. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  356. ->setPermissions(19);
  357. $share1 = $this->shareManager->createShare($share1);
  358. $node2 = $this->userFolder->get($this->folder);
  359. $share2 = $this->shareManager->newShare();
  360. $share2->setNode($node2)
  361. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  362. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  363. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  364. ->setPermissions(31);
  365. $share2 = $this->shareManager->createShare($share2);
  366. $request = $this->createRequest(['shared_with_me' => 'true']);
  367. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2);
  368. $result = $ocs->getShares();
  369. $this->assertTrue($result->succeeded());
  370. $this->assertTrue(count($result->getData()) === 2);
  371. $this->shareManager->deleteShare($share1);
  372. $this->shareManager->deleteShare($share2);
  373. }
  374. /**
  375. * @medium
  376. */
  377. function testPublicLinkUrl() {
  378. // simulate a post request
  379. $post['path'] = $this->folder;
  380. $post['shareType'] = \OCP\Share::SHARE_TYPE_LINK;
  381. $request = $this->createRequest($post);
  382. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  383. $result = $ocs->createShare();
  384. $this->assertTrue($result->succeeded());
  385. $data = $result->getData();
  386. // check if we have a token
  387. $this->assertTrue(is_string($data['token']));
  388. $id = $data['id'];
  389. // check for correct link
  390. $url = \OC::$server->getURLGenerator()->getAbsoluteURL('/index.php/s/' . $data['token']);
  391. $this->assertEquals($url, $data['url']);
  392. // check for link in getall shares
  393. $request = $this->createRequest([]);
  394. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  395. $result = $ocs->getShares();
  396. $this->assertTrue($result->succeeded());
  397. $data = $result->getData();
  398. $this->assertEquals($url, current($data)['url']);
  399. // check for path
  400. $request = $this->createRequest(['path' => $this->folder]);
  401. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  402. $result = $ocs->getShares();
  403. $this->assertTrue($result->succeeded());
  404. $data = $result->getData();
  405. $this->assertEquals($url, current($data)['url']);
  406. // check in share id
  407. $request = $this->createRequest([]);
  408. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  409. $result = $ocs->getShare($id);
  410. $this->assertTrue($result->succeeded());
  411. $data = $result->getData();
  412. $this->assertEquals($url, current($data)['url']);
  413. $request = $this->createRequest([]);
  414. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  415. $result = $ocs->deleteShare($id);
  416. $this->assertTrue($result->succeeded());
  417. }
  418. /**
  419. * @medium
  420. * @depends testCreateShareUserFile
  421. * @depends testCreateShareLink
  422. */
  423. function testGetShareFromSource() {
  424. $node = $this->userFolder->get($this->filename);
  425. $share = $this->shareManager->newShare();
  426. $share->setNode($node)
  427. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  428. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  429. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  430. ->setPermissions(19);
  431. $share1 = $this->shareManager->createShare($share);
  432. $share = $this->shareManager->newShare();
  433. $share->setNode($node)
  434. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  435. ->setShareType(\OCP\Share::SHARE_TYPE_LINK)
  436. ->setPermissions(1);
  437. $share2 = $this->shareManager->createShare($share);
  438. $request = $this->createRequest(['path' => $this->filename]);
  439. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  440. $result = $ocs->getShares();
  441. $this->assertTrue($result->succeeded());
  442. // test should return one share created from testCreateShare()
  443. $this->assertTrue(count($result->getData()) === 2);
  444. $this->shareManager->deleteShare($share1);
  445. $this->shareManager->deleteShare($share2);
  446. }
  447. /**
  448. * @medium
  449. * @depends testCreateShareUserFile
  450. * @depends testCreateShareLink
  451. */
  452. function testGetShareFromSourceWithReshares() {
  453. $node = $this->userFolder->get($this->filename);
  454. $share1 = $this->shareManager->newShare();
  455. $share1->setNode($node)
  456. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  457. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  458. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  459. ->setPermissions(19);
  460. $share1 = $this->shareManager->createShare($share1);
  461. $share2 = $this->shareManager->newShare();
  462. $share2->setNode($node)
  463. ->setSharedBy(self::TEST_FILES_SHARING_API_USER2)
  464. ->setSharedWith(self::TEST_FILES_SHARING_API_USER3)
  465. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  466. ->setPermissions(19);
  467. $share2 = $this->shareManager->createShare($share2);
  468. $request = $this->createRequest(['path' => $this->filename]);
  469. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  470. $result = $ocs->getShares();
  471. $this->assertTrue($result->succeeded());
  472. // test should return one share
  473. $this->assertTrue(count($result->getData()) === 1);
  474. // now also ask for the reshares
  475. $request = $this->createRequest(['path' => $this->filename, 'reshares' => 'true']);
  476. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  477. $result = $ocs->getShares();
  478. $this->assertTrue($result->succeeded());
  479. $this->assertTrue($result->succeeded());
  480. // now we should get two shares, the initial share and the reshare
  481. $this->assertCount(2, $result->getData());
  482. $this->shareManager->deleteShare($share1);
  483. $this->shareManager->deleteShare($share2);
  484. }
  485. /**
  486. * @medium
  487. * @depends testCreateShareUserFile
  488. */
  489. function testGetShareFromId() {
  490. $node = $this->userFolder->get($this->filename);
  491. $share1 = $this->shareManager->newShare();
  492. $share1->setNode($node)
  493. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  494. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  495. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  496. ->setPermissions(19);
  497. $share1 = $this->shareManager->createShare($share1);
  498. // call getShare() with share ID
  499. $request = $this->createRequest([]);
  500. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  501. $result = $ocs->getShare($share1->getId());
  502. $this->assertTrue($result->succeeded());
  503. // test should return one share created from testCreateShare()
  504. $this->assertEquals(1, count($result->getData()));
  505. $this->shareManager->deleteShare($share1);
  506. }
  507. /**
  508. * @medium
  509. */
  510. function testGetShareFromFolder() {
  511. $node1 = $this->userFolder->get($this->filename);
  512. $share1 = $this->shareManager->newShare();
  513. $share1->setNode($node1)
  514. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  515. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  516. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  517. ->setPermissions(19);
  518. $share1 = $this->shareManager->createShare($share1);
  519. $node2 = $this->userFolder->get($this->folder.'/'.$this->filename);
  520. $share2 = $this->shareManager->newShare();
  521. $share2->setNode($node2)
  522. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  523. ->setShareType(\OCP\Share::SHARE_TYPE_LINK)
  524. ->setPermissions(1);
  525. $share2 = $this->shareManager->createShare($share2);
  526. $request = $this->createRequest(['path' => $this->folder, 'subfiles' => 'true']);
  527. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  528. $result = $ocs->getShares();
  529. $this->assertTrue($result->succeeded());
  530. // test should return one share within $this->folder
  531. $this->assertTrue(count($result->getData()) === 1);
  532. $this->shareManager->deleteShare($share1);
  533. $this->shareManager->deleteShare($share2);
  534. }
  535. function testGetShareFromFolderWithFile() {
  536. $node1 = $this->userFolder->get($this->filename);
  537. $share1 = $this->shareManager->newShare();
  538. $share1->setNode($node1)
  539. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  540. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  541. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  542. ->setPermissions(19);
  543. $share1 = $this->shareManager->createShare($share1);
  544. $request = $this->createRequest(['path' => $this->filename, 'subfiles' => 'true']);
  545. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  546. $result = $ocs->getShares();
  547. $this->assertFalse($result->succeeded());
  548. $this->assertEquals(400, $result->getStatusCode());
  549. $this->assertEquals('Not a directory', $result->getMeta()['message']);
  550. $this->shareManager->deleteShare($share1);
  551. }
  552. /**
  553. * share a folder, than reshare a file within the shared folder and check if we construct the correct path
  554. * @medium
  555. */
  556. function testGetShareFromFolderReshares() {
  557. $node1 = $this->userFolder->get($this->folder);
  558. $share1 = $this->shareManager->newShare();
  559. $share1->setNode($node1)
  560. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  561. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  562. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  563. ->setPermissions(31);
  564. $share1 = $this->shareManager->createShare($share1);
  565. $node2 = $this->userFolder->get($this->folder.'/'.$this->filename);
  566. $share2 = $this->shareManager->newShare();
  567. $share2->setNode($node2)
  568. ->setSharedBy(self::TEST_FILES_SHARING_API_USER2)
  569. ->setShareType(\OCP\Share::SHARE_TYPE_LINK)
  570. ->setPermissions(1);
  571. $share2 = $this->shareManager->createShare($share2);
  572. $node3 = $this->userFolder->get($this->folder.'/'.$this->subfolder.'/'.$this->filename);
  573. $share3 = $this->shareManager->newShare();
  574. $share3->setNode($node3)
  575. ->setSharedBy(self::TEST_FILES_SHARING_API_USER2)
  576. ->setShareType(\OCP\Share::SHARE_TYPE_LINK)
  577. ->setPermissions(1);
  578. $share3 = $this->shareManager->createShare($share3);
  579. $testValues=array(
  580. array('query' => $this->folder,
  581. 'expectedResult' => $this->folder . $this->filename),
  582. array('query' => $this->folder . $this->subfolder,
  583. 'expectedResult' => $this->folder . $this->subfolder . $this->filename),
  584. );
  585. foreach ($testValues as $value) {
  586. $request = $this->createRequest(['path' => $value['query'], 'subfiles' => 'true']);
  587. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2);
  588. $result = $ocs->getShares();
  589. $this->assertTrue($result->succeeded());
  590. // test should return one share within $this->folder
  591. $data = $result->getData();
  592. $this->assertEquals($value['expectedResult'], $data[0]['path']);
  593. }
  594. // cleanup
  595. $this->shareManager->deleteShare($share1);
  596. $this->shareManager->deleteShare($share2);
  597. $this->shareManager->deleteShare($share3);
  598. }
  599. /**
  600. * reshare a sub folder and check if we get the correct path
  601. * @medium
  602. */
  603. function testGetShareFromSubFolderReShares() {
  604. $node1 = $this->userFolder->get($this->folder . $this->subfolder);
  605. $share1 = $this->shareManager->newShare();
  606. $share1->setNode($node1)
  607. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  608. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  609. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  610. ->setPermissions(31);
  611. $share1 = $this->shareManager->createShare($share1);
  612. $node2 = \OC::$server->getRootFolder()->getUserFolder(self::TEST_FILES_SHARING_API_USER2)->get($this->subfolder);
  613. $share2 = $this->shareManager->newShare();
  614. $share2->setNode($node2)
  615. ->setSharedBy(self::TEST_FILES_SHARING_API_USER2)
  616. ->setShareType(\OCP\Share::SHARE_TYPE_LINK)
  617. ->setPermissions(1);
  618. $share2 = $this->shareManager->createShare($share2);
  619. $request = $this->createRequest(['path' => '/', 'subfiles' => 'true']);
  620. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2);
  621. $result = $ocs->getShares();
  622. $this->assertTrue($result->succeeded());
  623. // test should return one share within $this->folder
  624. $data = $result->getData();
  625. // we should get exactly one result
  626. $this->assertCount(1, $data);
  627. $this->assertEquals($this->subfolder, $data[0]['path']);
  628. $this->shareManager->deleteShare($share2);
  629. $this->shareManager->deleteShare($share1);
  630. }
  631. /**
  632. * test re-re-share of folder if the path gets constructed correctly
  633. * @medium
  634. */
  635. function testGetShareFromFolderReReShares() {
  636. $node1 = $this->userFolder->get($this->folder . $this->subfolder);
  637. $share1 = $this->shareManager->newShare();
  638. $share1->setNode($node1)
  639. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  640. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  641. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  642. ->setPermissions(31);
  643. $share1 = $this->shareManager->createShare($share1);
  644. $node2 = $this->userFolder->get($this->folder . $this->subfolder . $this->subsubfolder);
  645. $share2 = $this->shareManager->newShare();
  646. $share2->setNode($node2)
  647. ->setSharedBy(self::TEST_FILES_SHARING_API_USER2)
  648. ->setSharedWith(self::TEST_FILES_SHARING_API_USER3)
  649. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  650. ->setPermissions(31);
  651. $share2 = $this->shareManager->createShare($share2);
  652. $share3 = $this->shareManager->newShare();
  653. $share3->setNode($node2)
  654. ->setSharedBy(self::TEST_FILES_SHARING_API_USER3)
  655. ->setShareType(\OCP\Share::SHARE_TYPE_LINK)
  656. ->setPermissions(1);
  657. $share3 = $this->shareManager->createShare($share3);
  658. /*
  659. * Test as recipient
  660. */
  661. $request = $this->createRequest(['path' => '/', 'subfiles' => 'true']);
  662. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER3);
  663. $result = $ocs->getShares();
  664. $this->assertTrue($result->succeeded());
  665. // test should return one share within $this->folder
  666. $data = $result->getData();
  667. // we should get exactly one result
  668. $this->assertCount(1, $data);
  669. $this->assertEquals($this->subsubfolder, $data[0]['path']);
  670. /*
  671. * Test for first owner/initiator
  672. */
  673. $request = $this->createRequest([]);
  674. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  675. $result = $ocs->getShares();
  676. $this->assertTrue($result->succeeded());
  677. // test should return one share within $this->folder
  678. $data = $result->getData();
  679. // we should get exactly one result
  680. $this->assertCount(1, $data);
  681. $this->assertEquals($this->folder . $this->subfolder, $data[0]['path']);
  682. /*
  683. * Test for second initiator
  684. */
  685. $request = $this->createRequest([]);
  686. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2);
  687. $result = $ocs->getShares();
  688. $this->assertTrue($result->succeeded());
  689. // test should return one share within $this->folder
  690. $data = $result->getData();
  691. // we should get exactly one result
  692. $this->assertCount(1, $data);
  693. $this->assertEquals($this->subfolder . $this->subsubfolder, $data[0]['path']);
  694. $this->shareManager->deleteShare($share1);
  695. $this->shareManager->deleteShare($share2);
  696. $this->shareManager->deleteShare($share3);
  697. }
  698. /**
  699. * test multiple shared folder if the path gets constructed correctly
  700. * @medium
  701. */
  702. function testGetShareMultipleSharedFolder() {
  703. $node1 = $this->userFolder->get($this->folder . $this->subfolder);
  704. $share1 = $this->shareManager->newShare();
  705. $share1->setNode($node1)
  706. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  707. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  708. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  709. ->setPermissions(31);
  710. $share1 = $this->shareManager->createShare($share1);
  711. $node2 = $this->userFolder->get($this->folder);
  712. $share2 = $this->shareManager->newShare();
  713. $share2->setNode($node2)
  714. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  715. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  716. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  717. ->setPermissions(31);
  718. $share2 = $this->shareManager->createShare($share2);
  719. $share3 = $this->shareManager->newShare();
  720. $share3->setNode($node1)
  721. ->setSharedBy(self::TEST_FILES_SHARING_API_USER2)
  722. ->setShareType(\OCP\Share::SHARE_TYPE_LINK)
  723. ->setPermissions(1);
  724. $share3 = $this->shareManager->createShare($share3);
  725. $request = $this->createRequest(['path' => $this->subfolder]);
  726. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2);
  727. $result1 = $ocs->getShares();
  728. $this->assertTrue($result1->succeeded());
  729. // test should return one share within $this->folder
  730. $data1 = $result1->getData();
  731. $this->assertCount(1, $data1);
  732. $s1 = reset($data1);
  733. $request = $this->createRequest(['path' => $this->folder.$this->subfolder]);
  734. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2);
  735. $result2 = $ocs->getShares();
  736. $this->assertTrue($result2->succeeded());
  737. // test should return one share within $this->folder
  738. $data2 = $result2->getData();
  739. $this->assertCount(1, $data2);
  740. $s2 = reset($data2);
  741. $this->assertEquals($this->folder.$this->subfolder, $s1['path']);
  742. $this->assertEquals($this->folder.$this->subfolder, $s2['path']);
  743. $this->shareManager->deleteShare($share1);
  744. $this->shareManager->deleteShare($share2);
  745. $this->shareManager->deleteShare($share3);
  746. }
  747. /**
  748. * test re-re-share of folder if the path gets constructed correctly
  749. * @medium
  750. */
  751. function testGetShareFromFileReReShares() {
  752. $node1 = $this->userFolder->get($this->folder . $this->subfolder);
  753. $share1 = $this->shareManager->newShare();
  754. $share1->setNode($node1)
  755. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  756. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  757. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  758. ->setPermissions(31);
  759. $share1 = $this->shareManager->createShare($share1);
  760. $user2Folder = \OC::$server->getUserFolder(self::TEST_FILES_SHARING_API_USER2);
  761. $node2 = $user2Folder->get($this->subfolder . $this->filename);
  762. $share2 = $this->shareManager->newShare();
  763. $share2->setNode($node2)
  764. ->setSharedBy(self::TEST_FILES_SHARING_API_USER2)
  765. ->setSharedWith(self::TEST_FILES_SHARING_API_USER3)
  766. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  767. ->setPermissions(19);
  768. $share2 = $this->shareManager->createShare($share2);
  769. $user3Folder = \OC::$server->getUserFolder(self::TEST_FILES_SHARING_API_USER3);
  770. $node3 = $user3Folder->get($this->filename);
  771. $share3 = $this->shareManager->newShare();
  772. $share3->setNode($node3)
  773. ->setSharedBy(self::TEST_FILES_SHARING_API_USER3)
  774. ->setShareType(\OCP\Share::SHARE_TYPE_LINK)
  775. ->setPermissions(1);
  776. $share3 = $this->shareManager->createShare($share3);
  777. $request = $this->createRequest(['path' => '/', 'subfiles' => 'true']);
  778. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER3);
  779. $result = $ocs->getShares();
  780. $this->assertTrue($result->succeeded());
  781. // test should return one share within $this->folder
  782. $data = $result->getData();
  783. // we should get exactly one result
  784. $this->assertCount(1, $data);
  785. $this->assertEquals($this->filename, $data[0]['path']);
  786. $this->shareManager->deleteShare($share1);
  787. $this->shareManager->deleteShare($share2);
  788. $this->shareManager->deleteShare($share3);
  789. }
  790. /**
  791. * @medium
  792. */
  793. function testGetShareFromUnknownId() {
  794. $request = $this->createRequest(['path' => '/', 'subfiles' => 'true']);
  795. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER3);
  796. $result = $ocs->getShare(0);
  797. $this->assertFalse($result->succeeded());
  798. $this->assertEquals(404, $result->getStatusCode());
  799. $meta = $result->getMeta();
  800. $this->assertEquals('Wrong share ID, share doesn\'t exist', $meta['message']);
  801. }
  802. /**
  803. * @medium
  804. * @depends testCreateShareUserFile
  805. * @depends testCreateShareLink
  806. */
  807. function testUpdateShare() {
  808. $node1 = $this->userFolder->get($this->filename);
  809. $share1 = $this->shareManager->newShare();
  810. $share1->setNode($node1)
  811. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  812. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  813. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  814. ->setPermissions(19);
  815. $share1 = $this->shareManager->createShare($share1);
  816. $share2 = $this->shareManager->newShare();
  817. $share2->setNode($node1)
  818. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  819. ->setShareType(\OCP\Share::SHARE_TYPE_LINK)
  820. ->setPermissions(1);
  821. $share2 = $this->shareManager->createShare($share2);
  822. // update permissions
  823. $params = array();
  824. $params['permissions'] = 1;
  825. $request = $this->createRequest(['permissions' => 1]);
  826. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  827. $result = $ocs->updateShare($share1->getId());
  828. $this->assertTrue($result->succeeded());
  829. $meta = $result->getMeta();
  830. $this->assertTrue($result->succeeded(), $meta['message']);
  831. $share1 = $this->shareManager->getShareById('ocinternal:' . $share1->getId());
  832. $this->assertEquals(1, $share1->getPermissions());
  833. // update password for link share
  834. $this->assertNull($share2->getPassword());
  835. $request = $this->createRequest(['password' => 'foo']);
  836. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  837. $result = $ocs->updateShare($share2->getId());
  838. $this->assertTrue($result->succeeded());
  839. $share2 = $this->shareManager->getShareById('ocinternal:' . $share2->getId());
  840. $this->assertNotNull($share2->getPassword());
  841. $request = $this->createRequest(['password' => '']);
  842. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  843. $result = $ocs->updateShare($share2->getId());
  844. $this->assertTrue($result->succeeded());
  845. $share2 = $this->shareManager->getShareById('ocinternal:' . $share2->getId());
  846. $this->assertNull($share2->getPassword());
  847. $this->shareManager->deleteShare($share1);
  848. $this->shareManager->deleteShare($share2);
  849. }
  850. /**
  851. * @medium
  852. * @depends testCreateShareUserFile
  853. */
  854. public function testUpdateShareInvalidPermissions() {
  855. $node1 = $this->userFolder->get($this->filename);
  856. $share1 = $this->shareManager->newShare();
  857. $share1->setNode($node1)
  858. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  859. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  860. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  861. ->setPermissions(19);
  862. $share1 = $this->shareManager->createShare($share1);
  863. $request = $this->createRequest(['permissions' => \OCP\Constants::PERMISSION_ALL]);
  864. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  865. $result = $ocs->updateShare($share1->getId());
  866. //Updating should fail with 400
  867. $this->assertFalse($result->succeeded());
  868. $this->assertEquals(400, $result->getStatusCode());
  869. //Permissions should not have changed!
  870. $share1 = $this->shareManager->getShareById('ocinternal:' . $share1->getId());
  871. $this->assertEquals(19, $share1->getPermissions());
  872. $this->shareManager->deleteShare($share1);
  873. }
  874. /**
  875. * @medium
  876. */
  877. function testUpdateShareUpload() {
  878. $node1 = $this->userFolder->get($this->folder);
  879. $share1 = $this->shareManager->newShare();
  880. $share1->setNode($node1)
  881. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  882. ->setShareType(\OCP\Share::SHARE_TYPE_LINK)
  883. ->setPermissions(1);
  884. $share1 = $this->shareManager->createShare($share1);
  885. // update public upload
  886. $request = $this->createRequest(['publicUpload' => 'true']);
  887. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  888. $result = $ocs->updateShare($share1->getId());
  889. $this->assertTrue($result->succeeded());
  890. $share1 = $this->shareManager->getShareById($share1->getFullId());
  891. $this->assertEquals(
  892. \OCP\Constants::PERMISSION_READ |
  893. \OCP\Constants::PERMISSION_CREATE |
  894. \OCP\Constants::PERMISSION_UPDATE |
  895. \OCP\Constants::PERMISSION_DELETE,
  896. $share1->getPermissions()
  897. );
  898. // cleanup
  899. $this->shareManager->deleteShare($share1);
  900. }
  901. /**
  902. * @medium
  903. */
  904. function testUpdateShareExpireDate() {
  905. $node1 = $this->userFolder->get($this->folder);
  906. $share1 = $this->shareManager->newShare();
  907. $share1->setNode($node1)
  908. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  909. ->setShareType(\OCP\Share::SHARE_TYPE_LINK)
  910. ->setPermissions(1);
  911. $share1 = $this->shareManager->createShare($share1);
  912. $config = \OC::$server->getConfig();
  913. // enforce expire date, by default 7 days after the file was shared
  914. $config->setAppValue('core', 'shareapi_default_expire_date', 'yes');
  915. $config->setAppValue('core', 'shareapi_enforce_expire_date', 'yes');
  916. $dateWithinRange = new \DateTime();
  917. $dateWithinRange->setTime(0,0,0);
  918. $dateWithinRange->add(new \DateInterval('P5D'));
  919. $dateOutOfRange = new \DateTime();
  920. $dateOutOfRange->setTime(0,0,0);
  921. $dateOutOfRange->add(new \DateInterval('P8D'));
  922. // update expire date to a valid value
  923. $request = $this->createRequest(['expireDate' => $dateWithinRange->format('Y-m-d')]);
  924. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  925. $result = $ocs->updateShare($share1->getId());
  926. $this->assertTrue($result->succeeded());
  927. $share1 = $this->shareManager->getShareById($share1->getFullId());
  928. // date should be changed
  929. $this->assertEquals($dateWithinRange, $share1->getExpirationDate());
  930. // update expire date to a value out of range
  931. $request = $this->createRequest(['expireDate' => $dateOutOfRange->format('Y-m-d')]);
  932. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  933. $result = $ocs->updateShare($share1->getId());
  934. $this->assertFalse($result->succeeded());
  935. $share1 = $this->shareManager->getShareById($share1->getFullId());
  936. // date shouldn't be changed
  937. $this->assertEquals($dateWithinRange, $share1->getExpirationDate());
  938. // Try to remove expire date
  939. $request = $this->createRequest(['expireDate' => '']);
  940. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  941. $result = $ocs->updateShare($share1->getId());
  942. $this->assertFalse($result->succeeded());
  943. $share1 = $this->shareManager->getShareById($share1->getFullId());
  944. // date shouldn't be changed
  945. $this->assertEquals($dateWithinRange, $share1->getExpirationDate());
  946. // cleanup
  947. $config->setAppValue('core', 'shareapi_default_expire_date', 'no');
  948. $config->setAppValue('core', 'shareapi_enforce_expire_date', 'no');
  949. $this->shareManager->deleteShare($share1);
  950. }
  951. /**
  952. * @medium
  953. * @depends testCreateShareUserFile
  954. */
  955. function testDeleteShare() {
  956. $node1 = $this->userFolder->get($this->filename);
  957. $share1 = $this->shareManager->newShare();
  958. $share1->setNode($node1)
  959. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  960. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  961. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  962. ->setPermissions(19);
  963. $share1 = $this->shareManager->createShare($share1);
  964. $share2 = $this->shareManager->newShare();
  965. $share2->setNode($node1)
  966. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  967. ->setShareType(\OCP\Share::SHARE_TYPE_LINK)
  968. ->setPermissions(1);
  969. $share2 = $this->shareManager->createShare($share1);
  970. $request = $this->createRequest([]);
  971. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  972. $result = $ocs->deleteShare($share1->getId());
  973. $this->assertTrue($result->succeeded());
  974. $request = $this->createRequest([]);
  975. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  976. $result = $ocs->deleteShare($share2->getId());
  977. $this->assertTrue($result->succeeded());
  978. $this->assertEmpty($this->shareManager->getSharesBy(self::TEST_FILES_SHARING_API_USER2, \OCP\Share::SHARE_TYPE_USER));
  979. $this->assertEmpty($this->shareManager->getSharesBy(self::TEST_FILES_SHARING_API_USER2, \OCP\Share::SHARE_TYPE_LINK));
  980. }
  981. /**
  982. * test unshare of a reshared file
  983. */
  984. function testDeleteReshare() {
  985. $node1 = $this->userFolder->get($this->folder);
  986. $share1 = $this->shareManager->newShare();
  987. $share1->setNode($node1)
  988. ->setSharedBy(self::TEST_FILES_SHARING_API_USER1)
  989. ->setSharedWith(self::TEST_FILES_SHARING_API_USER2)
  990. ->setShareType(\OCP\Share::SHARE_TYPE_USER)
  991. ->setPermissions(31);
  992. $share1 = $this->shareManager->createShare($share1);
  993. $user2folder = \OC::$server->getUserFolder(self::TEST_FILES_SHARING_API_USER2);
  994. $node2 = $user2folder->get($this->folder.'/'.$this->filename);
  995. $share2 = $this->shareManager->newShare();
  996. $share2->setNode($node2)
  997. ->setSharedBy(self::TEST_FILES_SHARING_API_USER2)
  998. ->setShareType(\OCP\Share::SHARE_TYPE_LINK)
  999. ->setPermissions(1);
  1000. $share2 = $this->shareManager->createShare($share2);
  1001. // test if we can unshare the link again
  1002. $request = $this->createRequest([]);
  1003. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2);
  1004. $result = $ocs->deleteShare($share2->getId());
  1005. $this->assertTrue($result->succeeded());
  1006. $this->shareManager->deleteShare($share1);
  1007. }
  1008. /**
  1009. * share a folder which contains a share mount point, should be forbidden
  1010. */
  1011. public function testShareFolderWithAMountPoint() {
  1012. // user 1 shares a folder with user2
  1013. self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
  1014. $fileInfo = $this->view->getFileInfo($this->folder);
  1015. $share = $this->share(
  1016. \OCP\Share::SHARE_TYPE_USER,
  1017. $this->folder,
  1018. self::TEST_FILES_SHARING_API_USER1,
  1019. self::TEST_FILES_SHARING_API_USER2,
  1020. \OCP\Constants::PERMISSION_ALL
  1021. );
  1022. // user2 shares a file from the folder as link
  1023. self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
  1024. $view = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files');
  1025. $view->mkdir("localDir");
  1026. // move mount point to the folder "localDir"
  1027. $result = $view->rename($this->folder, 'localDir/'.$this->folder);
  1028. $this->assertTrue($result !== false);
  1029. // try to share "localDir"
  1030. $fileInfo2 = $view->getFileInfo('localDir');
  1031. $this->assertTrue($fileInfo2 instanceof \OC\Files\FileInfo);
  1032. $pass = true;
  1033. try {
  1034. $this->share(
  1035. \OCP\Share::SHARE_TYPE_USER,
  1036. 'localDir',
  1037. self::TEST_FILES_SHARING_API_USER2,
  1038. self::TEST_FILES_SHARING_API_USER3,
  1039. \OCP\Constants::PERMISSION_ALL
  1040. );
  1041. } catch (\Exception $e) {
  1042. $pass = false;
  1043. }
  1044. $this->assertFalse($pass);
  1045. //cleanup
  1046. $result = $view->rename('localDir/' . $this->folder, $this->folder);
  1047. $this->assertTrue($result !== false);
  1048. $view->unlink('localDir');
  1049. self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
  1050. $this->shareManager->deleteShare($share);
  1051. }
  1052. /**
  1053. * Post init mount points hook for mounting simulated ext storage
  1054. */
  1055. public static function initTestMountPointsHook($data) {
  1056. if ($data['user'] === self::TEST_FILES_SHARING_API_USER1) {
  1057. \OC\Files\Filesystem::mount(self::$tempStorage, array(), '/' . self::TEST_FILES_SHARING_API_USER1 . '/files' . self::TEST_FOLDER_NAME);
  1058. }
  1059. }
  1060. /**
  1061. * Tests mounting a folder that is an external storage mount point.
  1062. */
  1063. public function testShareStorageMountPoint() {
  1064. self::$tempStorage = new \OC\Files\Storage\Temporary(array());
  1065. self::$tempStorage->file_put_contents('test.txt', 'abcdef');
  1066. self::$tempStorage->getScanner()->scan('');
  1067. // needed because the sharing code sometimes switches the user internally and mounts the user's
  1068. // storages. In our case the temp storage isn't mounted automatically, so doing it in the post hook
  1069. // (similar to how ext storage works)
  1070. \OCP\Util::connectHook('OC_Filesystem', 'post_initMountPoints', '\OCA\Files_Sharing\Tests\ApiTest', 'initTestMountPointsHook');
  1071. // logging in will auto-mount the temp storage for user1 as well
  1072. self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
  1073. $fileInfo = $this->view->getFileInfo($this->folder);
  1074. // user 1 shares the mount point folder with user2
  1075. $share = $this->share(
  1076. \OCP\Share::SHARE_TYPE_USER,
  1077. $this->folder,
  1078. self::TEST_FILES_SHARING_API_USER1,
  1079. self::TEST_FILES_SHARING_API_USER2,
  1080. \OCP\Constants::PERMISSION_ALL
  1081. );
  1082. // user2: check that mount point name appears correctly
  1083. self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
  1084. $view = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files');
  1085. $this->assertTrue($view->file_exists($this->folder));
  1086. $this->assertTrue($view->file_exists($this->folder . '/test.txt'));
  1087. self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
  1088. $this->shareManager->deleteShare($share);
  1089. \OC_Hook::clear('OC_Filesystem', 'post_initMountPoints', '\OCA\Files_Sharing\Tests\ApiTest', 'initTestMountPointsHook');
  1090. }
  1091. /**
  1092. * @expectedException \Exception
  1093. */
  1094. public function testShareNonExisting() {
  1095. self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
  1096. $id = PHP_INT_MAX - 1;
  1097. \OCP\Share::shareItem('file', $id, \OCP\Share::SHARE_TYPE_LINK, self::TEST_FILES_SHARING_API_USER2, 31);
  1098. }
  1099. /**
  1100. * @expectedException \Exception
  1101. */
  1102. public function testShareNotOwner() {
  1103. self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
  1104. \OC\Files\Filesystem::file_put_contents('foo.txt', 'bar');
  1105. $info = \OC\Files\Filesystem::getFileInfo('foo.txt');
  1106. self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
  1107. \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_LINK, self::TEST_FILES_SHARING_API_USER2, 31);
  1108. }
  1109. public function testDefaultExpireDate() {
  1110. self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
  1111. // TODO drop this once all code paths use the DI version - otherwise
  1112. // the cache inside this config object is out of date because
  1113. // OC_Appconfig is used and bypasses this cache which lead to integrity
  1114. // constraint violations
  1115. $config = \OC::$server->getConfig();
  1116. $config->deleteAppValue('core', 'shareapi_default_expire_date');
  1117. $config->deleteAppValue('core', 'shareapi_enforce_expire_date');
  1118. $config->deleteAppValue('core', 'shareapi_expire_after_n_days');
  1119. $config->setAppValue('core', 'shareapi_default_expire_date', 'yes');
  1120. $config->setAppValue('core', 'shareapi_enforce_expire_date', 'yes');
  1121. $config->setAppValue('core', 'shareapi_expire_after_n_days', '2');
  1122. // default expire date is set to 2 days
  1123. // the time when the share was created is set to 3 days in the past
  1124. // user defined expire date is set to +2 days from now on
  1125. // -> link should be already expired by the default expire date but the user
  1126. // share should still exists.
  1127. $now = time();
  1128. $dateFormat = 'Y-m-d H:i:s';
  1129. $shareCreated = $now - 3 * 24 * 60 * 60;
  1130. $expireDate = date($dateFormat, $now + 2 * 24 * 60 * 60);
  1131. $info = \OC\Files\Filesystem::getFileInfo($this->filename);
  1132. $this->assertTrue($info instanceof \OC\Files\FileInfo);
  1133. $result = \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_LINK, null, \OCP\Constants::PERMISSION_READ);
  1134. $this->assertTrue(is_string($result));
  1135. $result = \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, 31);
  1136. $this->assertTrue($result);
  1137. $result = \OCP\Share::setExpirationDate('file', $info->getId() , $expireDate, $now);
  1138. $this->assertTrue($result);
  1139. //manipulate stime so that both shares are older then the default expire date
  1140. $statement = "UPDATE `*PREFIX*share` SET `stime` = ? WHERE `share_type` = ?";
  1141. $query = \OCP\DB::prepare($statement);
  1142. $result = $query->execute(array($shareCreated, \OCP\Share::SHARE_TYPE_LINK));
  1143. $this->assertSame(1, $result);
  1144. $query = \OCP\DB::prepare($statement);
  1145. $result = $query->execute(array($shareCreated, \OCP\Share::SHARE_TYPE_USER));
  1146. $this->assertSame(1, $result);
  1147. // now the link share should expire because of enforced default expire date
  1148. // the user share should still exist
  1149. $result = \OCP\Share::getItemShared('file', $info->getId());
  1150. $this->assertTrue(is_array($result));
  1151. $this->assertSame(1, count($result));
  1152. $share = reset($result);
  1153. $this->assertSame(\OCP\Share::SHARE_TYPE_USER, $share['share_type']);
  1154. //cleanup
  1155. $result = \OCP\Share::unshare('file', $info->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2);
  1156. $this->assertTrue($result);
  1157. $config->setAppValue('core', 'shareapi_default_expire_date', 'no');
  1158. $config->setAppValue('core', 'shareapi_enforce_expire_date', 'no');
  1159. }
  1160. public function datesProvider() {
  1161. $date = new \DateTime();
  1162. $date->add(new \DateInterval('P5D'));
  1163. return [
  1164. [$date->format('Y-m-d'), true],
  1165. ['abc', false],
  1166. [$date->format('Y-m-d') . 'xyz', false],
  1167. ];
  1168. }
  1169. /**
  1170. * Make sure only ISO 8601 dates are accepted
  1171. *
  1172. * @dataProvider datesProvider
  1173. */
  1174. public function testPublicLinkExpireDate($date, $valid) {
  1175. $request = $this->createRequest([
  1176. 'path' => $this->folder,
  1177. 'shareType' => \OCP\Share::SHARE_TYPE_LINK,
  1178. 'expireDate' => $date,
  1179. ]);
  1180. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  1181. $result = $ocs->createShare();
  1182. if ($valid === false) {
  1183. $this->assertFalse($result->succeeded());
  1184. $this->assertEquals(404, $result->getStatusCode());
  1185. $this->assertEquals('Invalid date, date format must be YYYY-MM-DD', $result->getMeta()['message']);
  1186. return;
  1187. }
  1188. $this->assertTrue($result->succeeded());
  1189. $data = $result->getData();
  1190. $this->assertTrue(is_string($data['token']));
  1191. $this->assertEquals($date, substr($data['expiration'], 0, 10));
  1192. // check for correct link
  1193. $url = \OC::$server->getURLGenerator()->getAbsoluteURL('/index.php/s/' . $data['token']);
  1194. $this->assertEquals($url, $data['url']);
  1195. $share = $this->shareManager->getShareById('ocinternal:'.$data['id']);
  1196. $this->assertEquals($date, $share->getExpirationDate()->format('Y-m-d'));
  1197. $this->shareManager->deleteShare($share);
  1198. }
  1199. public function testCreatePublicLinkExpireDateValid() {
  1200. $config = \OC::$server->getConfig();
  1201. // enforce expire date, by default 7 days after the file was shared
  1202. $config->setAppValue('core', 'shareapi_default_expire_date', 'yes');
  1203. $config->setAppValue('core', 'shareapi_enforce_expire_date', 'yes');
  1204. $date = new \DateTime();
  1205. $date->add(new \DateInterval('P5D'));
  1206. $request = $this->createRequest([
  1207. 'path' => $this->folder,
  1208. 'shareType' => \OCP\Share::SHARE_TYPE_LINK,
  1209. 'expireDate' => $date->format('Y-m-d'),
  1210. ]);
  1211. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  1212. $result = $ocs->createShare();
  1213. $this->assertTrue($result->succeeded());
  1214. $data = $result->getData();
  1215. $this->assertTrue(is_string($data['token']));
  1216. $this->assertEquals($date->format('Y-m-d') . ' 00:00:00', $data['expiration']);
  1217. // check for correct link
  1218. $url = \OC::$server->getURLGenerator()->getAbsoluteURL('/index.php/s/' . $data['token']);
  1219. $this->assertEquals($url, $data['url']);
  1220. $share = $this->shareManager->getShareById('ocinternal:'.$data['id']);
  1221. $date->setTime(0,0,0);
  1222. $this->assertEquals($date, $share->getExpirationDate());
  1223. $this->shareManager->deleteShare($share);
  1224. $config->setAppValue('core', 'shareapi_default_expire_date', 'no');
  1225. $config->setAppValue('core', 'shareapi_enforce_expire_date', 'no');
  1226. }
  1227. public function testCreatePublicLinkExpireDateInvalidFuture() {
  1228. $config = \OC::$server->getConfig();
  1229. // enforce expire date, by default 7 days after the file was shared
  1230. $config->setAppValue('core', 'shareapi_default_expire_date', 'yes');
  1231. $config->setAppValue('core', 'shareapi_enforce_expire_date', 'yes');
  1232. $date = new \DateTime();
  1233. $date->add(new \DateInterval('P8D'));
  1234. $request = $this->createRequest([
  1235. 'path' => $this->folder,
  1236. 'shareType' => \OCP\Share::SHARE_TYPE_LINK,
  1237. 'expireDate' => $date->format('Y-m-d'),
  1238. ]);
  1239. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  1240. $result = $ocs->createShare();
  1241. $this->assertFalse($result->succeeded());
  1242. $this->assertEquals(404, $result->getStatusCode());
  1243. $this->assertEquals('Cannot set expiration date more than 7 days in the future', $result->getMeta()['message']);
  1244. $config->setAppValue('core', 'shareapi_default_expire_date', 'no');
  1245. $config->setAppValue('core', 'shareapi_enforce_expire_date', 'no');
  1246. }
  1247. public function testCreatePublicLinkExpireDateInvalidPast() {
  1248. $config = \OC::$server->getConfig();
  1249. $date = new \DateTime();
  1250. $date->sub(new \DateInterval('P8D'));
  1251. $request = $this->createRequest([
  1252. 'path' => $this->folder,
  1253. 'shareType' => \OCP\Share::SHARE_TYPE_LINK,
  1254. 'expireDate' => $date->format('Y-m-d'),
  1255. ]);
  1256. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  1257. $result = $ocs->createShare();
  1258. $this->assertFalse($result->succeeded());
  1259. $this->assertEquals(404, $result->getStatusCode());
  1260. $this->assertEquals('Expiration date is in the past', $result->getMeta()['message']);
  1261. $config->setAppValue('core', 'shareapi_default_expire_date', 'no');
  1262. $config->setAppValue('core', 'shareapi_enforce_expire_date', 'no');
  1263. }
  1264. /**
  1265. * test for no invisible shares
  1266. * See: https://github.com/owncloud/core/issues/22295
  1267. */
  1268. public function testInvisibleSharesUser() {
  1269. // simulate a post request
  1270. $request = $this->createRequest([
  1271. 'path' => $this->folder,
  1272. 'shareWith' => self::TEST_FILES_SHARING_API_USER2,
  1273. 'shareType' => \OCP\Share::SHARE_TYPE_USER
  1274. ]);
  1275. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  1276. $result = $ocs->createShare();
  1277. $this->assertTrue($result->succeeded());
  1278. $data = $result->getData();
  1279. $topId = $data['id'];
  1280. $request = $this->createRequest([
  1281. 'path' => $this->folder . $this->subfolder,
  1282. 'shareType' => \OCP\Share::SHARE_TYPE_LINK,
  1283. ]);
  1284. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2);
  1285. $result = $ocs->createShare();
  1286. $this->assertTrue($result->succeeded());
  1287. $request = $this->createRequest([]);
  1288. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  1289. $result = $ocs->deleteShare($topId);
  1290. $this->assertTrue($result->succeeded());
  1291. $request = $this->createRequest([
  1292. 'reshares' => 'true',
  1293. ]);
  1294. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  1295. $result = $ocs->getShares();
  1296. $this->assertTrue($result->succeeded());
  1297. $this->assertEmpty($result->getData());
  1298. }
  1299. /**
  1300. * test for no invisible shares
  1301. * See: https://github.com/owncloud/core/issues/22295
  1302. */
  1303. public function testInvisibleSharesGroup() {
  1304. // simulate a post request
  1305. $request = $this->createRequest([
  1306. 'path' => $this->folder,
  1307. 'shareWith' => self::TEST_FILES_SHARING_API_GROUP1,
  1308. 'shareType' => \OCP\Share::SHARE_TYPE_GROUP
  1309. ]);
  1310. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  1311. $result = $ocs->createShare();
  1312. $this->assertTrue($result->succeeded());
  1313. $data = $result->getData();
  1314. $topId = $data['id'];
  1315. $request = $this->createRequest([
  1316. 'path' => $this->folder . $this->subfolder,
  1317. 'shareType' => \OCP\Share::SHARE_TYPE_LINK,
  1318. ]);
  1319. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2);
  1320. $result = $ocs->createShare();
  1321. $this->assertTrue($result->succeeded());
  1322. $request = $this->createRequest([]);
  1323. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  1324. $result = $ocs->deleteShare($topId);
  1325. $this->assertTrue($result->succeeded());
  1326. $request = $this->createRequest([
  1327. 'reshares' => 'true',
  1328. ]);
  1329. $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1);
  1330. $result = $ocs->getShares();
  1331. $this->assertTrue($result->succeeded());
  1332. $this->assertEmpty($result->getData());
  1333. }
  1334. }