shell bypass 403
<?php namespace Srmklive\Dropbox\Test; use GuzzleHttp\Psr7\Response; use League\Flysystem\Config; use PHPUnit\Framework\TestCase; use Prophecy\Argument; use Srmklive\Dropbox\Adapter\DropboxAdapter; use Srmklive\Dropbox\Client\DropboxClient as Client; use Srmklive\Dropbox\Exceptions\BadRequest; class AdapterTest extends TestCase { /** @var \Srmklive\Dropbox\Client\DropboxClient|\Prophecy\Prophecy\ObjectProphecy */ protected $client; /** @var \Srmklive\Dropbox\Adapter\DropboxAdapter */ protected $dropboxAdapter; public function setUp() { $this->client = $this->prophesize(Client::class); $this->dropboxAdapter = new DropboxAdapter($this->client->reveal(), 'prefix'); } /** @test */ public function it_can_write() { $this->client->upload(Argument::any(), Argument::any(), Argument::any())->willReturn([ 'server_modified' => '2015-05-12T15:50:38Z', 'path_display' => '/prefix/something', '.tag' => 'file', ]); $result = $this->dropboxAdapter->write('something', 'contents', new Config()); $this->assertInternalType('array', $result); $this->assertArrayHasKey('type', $result); $this->assertEquals('file', $result['type']); } /** @test */ public function it_can_update() { $this->client->upload(Argument::any(), Argument::any(), Argument::any())->willReturn([ 'server_modified' => '2015-05-12T15:50:38Z', 'path_display' => '/prefix/something', '.tag' => 'file', ]); $result = $this->dropboxAdapter->update('something', 'contents', new Config()); $this->assertInternalType('array', $result); $this->assertArrayHasKey('type', $result); $this->assertEquals('file', $result['type']); } /** @test */ public function it_can_write_a_stream() { $this->client->upload(Argument::any(), Argument::any(), Argument::any())->willReturn([ 'server_modified' => '2015-05-12T15:50:38Z', 'path_display' => '/prefix/something', '.tag' => 'file', ]); $result = $this->dropboxAdapter->writeStream('something', tmpfile(), new Config()); $this->assertInternalType('array', $result); $this->assertArrayHasKey('type', $result); $this->assertEquals('file', $result['type']); } /** @test */ public function it_can_upload_using_a_stream() { $this->client->upload(Argument::any(), Argument::any(), Argument::any())->willReturn([ 'server_modified' => '2015-05-12T15:50:38Z', 'path_display' => '/prefix/something', '.tag' => 'file', ]); $result = $this->dropboxAdapter->updateStream('something', tmpfile(), new Config()); $this->assertInternalType('array', $result); $this->assertArrayHasKey('type', $result); $this->assertEquals('file', $result['type']); } /** @test */ public function it_return_false_when_it_cant_upload_anything() { $this->client->upload(Argument::any(), Argument::any(), Argument::any())->willThrow(new BadRequest(new Response(409))); $result = $this->dropboxAdapter->writeStream('something', tmpfile(), new Config()); $this->assertFalse($result); } /** * @test * * @dataProvider metadataProvider */ public function it_has_calls_to_get_meta_data($method) { $this->client = $this->prophesize(Client::class); $this->client->getMetaData('/one')->willReturn([ '.tag' => 'file', 'server_modified' => '2015-05-12T15:50:38Z', 'path_display' => '/one', ]); $this->dropboxAdapter = new DropboxAdapter($this->client->reveal()); $this->assertInternalType('array', $this->dropboxAdapter->{$method}('one')); } public function metadataProvider() { return [ ['getMetadata'], ['getTimestamp'], ['getSize'], ['has'], ]; } /** @test */ public function it_will_not_hold_metadata_after_failing() { $this->client = $this->prophesize(Client::class); $this->client->getMetaData('/one')->willThrow(new BadRequest(new Response(409))); $this->dropboxAdapter = new DropboxAdapter($this->client->reveal()); $this->assertFalse($this->dropboxAdapter->has('one')); } /** @test */ public function it_can_read() { $stream = tmpfile(); fwrite($stream, 'something'); $this->client->download(Argument::any(), Argument::any())->willReturn($stream); $this->assertInternalType('array', $this->dropboxAdapter->read('something')); } /** @test */ public function it_can_read_using_a_stream() { $stream = tmpfile(); fwrite($stream, 'something'); $this->client->download(Argument::any(), Argument::any())->willReturn($stream); $this->assertInternalType('array', $this->dropboxAdapter->readStream('something')); fclose($stream); } /** @test */ public function it_returns_false_when_it_cant_read_stream() { $stream = tmpfile(); fwrite($stream, 'something'); $this->client->download(Argument::any())->willThrow(new BadRequest(new Response(409))); $this->assertFalse($this->dropboxAdapter->readStream('something')); fclose($stream); } /** @test */ public function it_can_delete_stuff() { $this->client->delete('/prefix/something')->willReturn(['.tag' => 'file']); $this->assertTrue($this->dropboxAdapter->delete('something')); $this->assertTrue($this->dropboxAdapter->deleteDir('something')); } /** @test */ public function it_returns_true_when_it_cant_delete_stuff() { $this->client->delete('/prefix/something')->willReturn(['.tag' => 'path_lookup']); $this->assertTrue($this->dropboxAdapter->delete('something')); $this->assertTrue($this->dropboxAdapter->deleteDir('something')); } /** @test */ public function it_can_create_a_directory() { $this->client->createFolder('/prefix/fail/please')->willThrow(new BadRequest(new Response(409))); $this->client->createFolder('/prefix/pass/please')->willReturn([ '.tag' => 'folder', 'path_display' => '/prefix/pass/please', ]); $this->assertFalse($this->dropboxAdapter->createDir('fail/please', new Config())); $expected = ['path' => 'pass/please', 'type' => 'dir']; $this->assertEquals($expected, $this->dropboxAdapter->createDir('pass/please', new Config())); } /** @test */ public function it_can_list_contents() { $this->client->listFolder(Argument::type('string'), Argument::any())->willReturn( ['entries' => [ ['.tag' => 'folder', 'path_display' => 'dirname'], ['.tag' => 'file', 'path_display' => 'dirname/file'], ]] ); $result = $this->dropboxAdapter->listContents('', true); $this->assertCount(2, $result); } /** @test */ public function it_return_false_when_it_cant_list_contents() { $this->client->listFolder(Argument::type('string'), Argument::any())->willThrow(new BadRequest(new Response(409))); $result = $this->dropboxAdapter->listContents('', true); $this->assertFalse($result); } /** @test */ public function it_can_rename_stuff() { $this->client->move(Argument::type('string'), Argument::type('string'))->willReturn(['.tag' => 'file', 'path' => 'something']); $this->assertTrue($this->dropboxAdapter->rename('something', 'something')); } /** @test */ public function it_will_return_false_when_a_rename_has_failed() { $this->client->move('/prefix/something', '/prefix/something')->willThrow(new BadRequest(new Response(409))); $this->assertFalse($this->dropboxAdapter->rename('something', 'something')); } /** @test */ public function it_can_copy_a_file() { $this->client->copy(Argument::type('string'), Argument::type('string'))->willReturn(['.tag' => 'file', 'path' => 'something']); $this->assertTrue($this->dropboxAdapter->copy('something', 'something')); } /** @test */ public function it_will_return_false_when_the_copy_process_has_failed() { $this->client->copy(Argument::any(), Argument::any())->willThrow(new BadRequest(new Response(409))); $this->assertFalse($this->dropboxAdapter->copy('something', 'something')); } /** @test */ public function it_can_get_temporary_link() { $this->client->getTemporaryLink(Argument::type('string'))->willReturn('something'); $this->assertNotEmpty($this->dropboxAdapter->getTemporaryLink('something')); } /** @test */ public function it_will_return_false_when_get_temporary_link_process_has_failed() { $this->client->getTemporaryLink(Argument::type('string'))->willThrow(new BadRequest(new Response(409))); $this->expectException(\Exception::class); $this->assertFalse($this->dropboxAdapter->getTemporaryLink('something')); } /** @test */ public function it_can_get_thumbail() { $this->client->getThumbnail(Argument::type('string'), Argument::type('string'), Argument::type('string'))->willReturn('something'); $this->assertNotEmpty($this->dropboxAdapter->getThumbnail('something')); } /** @test */ public function it_will_return_false_when_get_thumbnail_process_has_failed() { $this->client->getThumbnail(Argument::type('string'), Argument::type('string'), Argument::type('string'))->willThrow(new BadRequest(new Response(409))); $this->expectException(\Exception::class); $this->assertFalse($this->dropboxAdapter->getThumbnail('something')); } /** @test */ public function it_can_get_a_client() { $this->assertInstanceOf(Client::class, $this->dropboxAdapter->getClient()); } }