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 * @throws FireflyException
* *
*/ */
public function download(Attachment $attachment) public function download(AttachmentRepositoryInterface $repository, Attachment $attachment)
{ {
// create a disk. if ($repository->exists($attachment)) {
$disk = Storage::disk('upload'); $content = $repository->getContent($attachment);
$file = $attachment->fileName();
if ($disk->exists($file)) {
$quoted = sprintf('"%s"', addcslashes(basename($attachment->filename), '"\\')); $quoted = sprintf('"%s"', addcslashes(basename($attachment->filename), '"\\'));
$content = Crypt::decrypt($disk->get($file));
Log::debug('Send file to user', ['file' => $quoted, 'size' => strlen($content)]); 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('Cache-Control', 'must-revalidate, post-check=0, pre-check=0')
->header('Pragma', 'public') ->header('Pragma', 'public')
->header('Content-Length', strlen($content)); ->header('Content-Length', strlen($content));
} }
throw new FireflyException('Could not find the indicated attachment. The file is no longer there.'); 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\Models\Attachment;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Storage;
/** /**
* Class AttachmentRepository * Class AttachmentRepository
@ -56,6 +57,19 @@ class AttachmentRepository implements AttachmentRepositoryInterface
return true; 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 * @return Collection
*/ */
@ -82,6 +96,26 @@ class AttachmentRepository implements AttachmentRepositoryInterface
return $query; 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 Attachment $attachment
* @param array $data * @param array $data

View File

@ -37,6 +37,20 @@ interface AttachmentRepositoryInterface
*/ */
public function get(): Collection; 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 $start
* @param Carbon $end * @param Carbon $end

View File

@ -58,6 +58,10 @@ class AttachmentControllerTest extends TestCase
*/ */
public function testDownload() 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->be($this->user());
$this->call('GET', route('attachments.download', [1])); $this->call('GET', route('attachments.download', [1]));
$this->assertResponseStatus(200); $this->assertResponseStatus(200);