Make sure the attachment tests work.

This commit is contained in:
James Cole 2016-12-25 12:23:36 +01:00
parent 0ef9b5b462
commit 7894f1871e
No known key found for this signature in database
GPG Key ID: C16961E655E74B5E
4 changed files with 57 additions and 9 deletions

View File

@ -95,16 +95,12 @@ class AttachmentController extends Controller
* @throws FireflyException
*
*/
public function download(Attachment $attachment)
public function download(AttachmentRepositoryInterface $repository, Attachment $attachment)
{
// create a disk.
$disk = Storage::disk('upload');
$file = $attachment->fileName();
if ($disk->exists($file)) {
if ($repository->exists($attachment)) {
$content = $repository->getContent($attachment);
$quoted = sprintf('"%s"', addcslashes(basename($attachment->filename), '"\\'));
$content = Crypt::decrypt($disk->get($file));
Log::debug('Send file to user', ['file' => $quoted, 'size' => strlen($content)]);
@ -118,8 +114,8 @@ class AttachmentController extends Controller
->header('Cache-Control', 'must-revalidate, post-check=0, pre-check=0')
->header('Pragma', 'public')
->header('Content-Length', strlen($content));
}
throw new FireflyException('Could not find the indicated attachment. The file is no longer there.');
}

View File

@ -18,6 +18,7 @@ use FireflyIII\Helpers\Attachments\AttachmentHelperInterface;
use FireflyIII\Models\Attachment;
use FireflyIII\User;
use Illuminate\Support\Collection;
use Storage;
/**
* Class AttachmentRepository
@ -56,6 +57,19 @@ class AttachmentRepository implements AttachmentRepositoryInterface
return true;
}
/**
* @param Attachment $attachment
*
* @return bool
*/
public function exists(Attachment $attachment): bool
{
/** @var Storage $disk */
$disk = Storage::disk('upload');
return $disk->exists($attachment->fileName());
}
/**
* @return Collection
*/
@ -82,6 +96,26 @@ class AttachmentRepository implements AttachmentRepositoryInterface
return $query;
}
/**
* @param Attachment $attachment
*
* @return string
*/
public function getContent(Attachment $attachment): string
{
// create a disk.
$disk = Storage::disk('upload');
$file = $attachment->fileName();
if ($disk->exists($file)) {
$content = Crypt::decrypt($disk->get($file));
return $content;
}
return '';
}
/**
* @param Attachment $attachment
* @param array $data

View File

@ -37,6 +37,20 @@ interface AttachmentRepositoryInterface
*/
public function get(): Collection;
/**
* @param Attachment $attachment
*
* @return bool
*/
public function exists(Attachment $attachment): bool;
/**
* @param Attachment $attachment
*
* @return string
*/
public function getContent(Attachment $attachment): string;
/**
* @param Carbon $start
* @param Carbon $end

View File

@ -58,6 +58,10 @@ class AttachmentControllerTest extends TestCase
*/
public function testDownload()
{
$repository = $this->mock(AttachmentRepositoryInterface::class);
$repository->shouldReceive('exists')->once()->andReturn(true);
$repository->shouldReceive('getContent')->once()->andReturn('This is attachment number one.');
$this->be($this->user());
$this->call('GET', route('attachments.download', [1]));
$this->assertResponseStatus(200);