123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- <?php
- namespace spec\Gaufrette\Adapter;
- use MongoDB\BSON\UTCDateTime;
- use MongoDB\GridFS\Bucket;
- use MongoDB\GridFS\Exception\FileNotFoundException;
- use MongoDB\Model\BSONDocument;
- use PhpSpec\ObjectBehavior;
- use Prophecy\Argument;
- class GridFSSpec extends ObjectBehavior
- {
- private $resources = [];
- function let(Bucket $bucket)
- {
- $this->beConstructedWith($bucket);
- }
- function letGo()
- {
- array_map(function ($res) {
- @fclose($res);
- }, $this->resources);
- }
- function it_is_adapter()
- {
- $this->shouldHaveType('Gaufrette\Adapter');
- }
- function it_is_checksum_calculator()
- {
- $this->shouldHaveType('Gaufrette\Adapter\ChecksumCalculator');
- }
- function it_supports_metadata()
- {
- $this->shouldHaveType('Gaufrette\Adapter\MetadataSupporter');
- }
- function it_supports_native_list_keys()
- {
- $this->shouldHaveType('Gaufrette\Adapter\ListKeysAware');
- }
- function it_reads_file($bucket)
- {
- $this->resources[] = $readable = fopen('php://memory', 'rw');
- fwrite($readable, 'some content');
- fseek($readable, 0);
- $bucket
- ->openDownloadStreamByName('filename')
- ->shouldBeCalled()
- ->willReturn($readable)
- ;
- $this->read('filename')->shouldReturn('some content');
- }
- function it_does_not_fail_when_cannot_read($bucket)
- {
- $bucket->openDownloadStreamByName('filename')->willThrow(FileNotFoundException::class);
- $this->read('filename')->shouldReturn(false);
- }
- function it_checks_if_file_exists($bucket, BSONDocument $file)
- {
- $bucket
- ->findOne(['filename' => 'filename'])
- ->willReturn($file)
- ;
- $bucket
- ->findOne(['filename' => 'filename2'])
- ->willReturn(null)
- ;
- $this->exists('filename')->shouldReturn(true);
- $this->exists('filename2')->shouldReturn(false);
- }
- function it_deletes_file($bucket)
- {
- $bucket
- ->findOne(['filename' => 'filename'], ['projection' => ['_id' => 1]])
- ->willReturn($file = new BSONDocument(['_id' => 123]))
- ;
- $bucket->delete(123)->shouldBeCalled();
- $this->delete('filename')->shouldReturn(true);
- }
- function it_does_not_delete_file($bucket)
- {
- $bucket->findOne(['filename' => 'filename'], ['projection' => ['_id' => 1]])->willReturn(null);
- $this->delete('filename')->shouldReturn(false);
- }
- function it_writes_file($bucket)
- {
- $this->resources[] = $writable = fopen('php://memory', 'rw');
- $bucket
- ->openUploadStream('filename', ['metadata' => ['someother' => 'metadata']])
- ->willReturn($writable)
- ;
- $this->setMetadata('filename', ['someother' => 'metadata']);
- $this
- ->write('filename', 'some content')
- ->shouldReturn(12)
- ;
- }
- function it_renames_file($bucket)
- {
- $this->resources[] = $writable = fopen('php://memory', 'rw');
- $this->resources[] = $readable = fopen('php://memory', 'rw');
- fwrite($readable, 'some content');
- fseek($readable, 0);
- $bucket->openUploadStream('otherFilename', ['metadata' => ['some' => 'metadata']])->willReturn($writable);
- $bucket->downloadToStreamByName('filename', $writable)->shouldBeCalled();
- $bucket
- ->findOne(['filename' => 'filename'], ['projection' => ['_id' => 1]])
- ->willReturn($toDelete = new BSONDocument(['_id' => 1234]))
- ;
- $bucket->delete(1234)->shouldBeCalled();
- $this->setMetadata('filename', ['some' => 'metadata']);
- $this->rename('filename', 'otherFilename')->shouldReturn(true);
- }
- function it_fetches_keys($bucket)
- {
- $bucket
- ->find([], ['projection' => ['filename' => 1]])
- ->willReturn([new BSONDocument(['filename' => 'filename']), new BSONDocument(['filename' => 'otherFilename'])])
- ;
- $this->keys()->shouldReturn(['filename', 'otherFilename']);
- }
- function it_fetches_mtime($bucket)
- {
- $bucket
- ->findOne(['filename' => 'filename'], ['projection' => ['uploadDate' => 1]])
- ->willReturn(new BSONDocument(['uploadDate' => new UTCDateTime(12345000)]))
- ;
- $this->mtime('filename')->shouldReturn(12345);
- }
- function it_calculates_checksum($bucket)
- {
- $bucket
- ->findOne(['filename' => 'filename'], ['projection' => ['md5' => 1]])
- ->willReturn(new BSONDocument(['md5' => 'md5123']))
- ;
- $this->checksum('filename')->shouldReturn('md5123');
- }
- }
|