137 lines
4.6 KiB
PHP
137 lines
4.6 KiB
PHP
<?php
|
|
|
|
namespace Tests\Unit\Storage;
|
|
|
|
use CodeIgniter\HTTP\DownloadResponse;
|
|
use Tests\Support\Storage\StorageTestCase;
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
final class FileStorageServiceTest extends StorageTestCase
|
|
{
|
|
public function testResolveKeyWithSubFolder(): void
|
|
{
|
|
$key = storage()->resolveKey('policy', 'policy_pdf', 'abc.pdf');
|
|
|
|
$this->assertSame('uploads/policy/policy_pdf/abc.pdf', $key);
|
|
}
|
|
|
|
public function testResolveKeyWithoutSubFolder(): void
|
|
{
|
|
$key = storage()->resolveKey('endorsement', '', 'original.pdf');
|
|
|
|
$this->assertSame('uploads/endorsement/original.pdf', $key);
|
|
}
|
|
|
|
public function testUploadModuleFileStoresPolicyPdf(): void
|
|
{
|
|
$file = $this->createUploadedFile('%PDF', 'policy.pdf', 'application/pdf');
|
|
|
|
$storedName = storage()->uploadModuleFile($file, 'policy', 'policy_pdf');
|
|
|
|
$this->assertNotSame('', $storedName);
|
|
$this->assertTrue(storage()->exists('policy', 'policy_pdf', $storedName));
|
|
}
|
|
|
|
public function testReadWriteAndDeleteByModule(): void
|
|
{
|
|
storage()->put(storage()->resolveKey('policy', 'policy_md', 'doc.md'), '# md');
|
|
|
|
$this->assertTrue(storage()->exists('policy', 'policy_md', 'doc.md'));
|
|
$this->assertSame('# md', storage()->read('policy', 'policy_md', 'doc.md'));
|
|
|
|
$this->assertTrue(storage()->delete('policy', 'policy_md', 'doc.md'));
|
|
$this->assertFalse(storage()->exists('policy', 'policy_md', 'doc.md'));
|
|
}
|
|
|
|
public function testGetLocalPathForProcessingPointsToWritableFile(): void
|
|
{
|
|
$fileName = 'local-path.pdf';
|
|
storage()->put(storage()->resolveKey('policy', 'policy_pdf', $fileName), 'local');
|
|
|
|
$path = storage()->getLocalPathForProcessing('policy', 'policy_pdf', $fileName);
|
|
|
|
$this->assertFileExists($path);
|
|
$this->assertSame('local', file_get_contents($path));
|
|
}
|
|
|
|
public function testCopyBetweenKeys(): void
|
|
{
|
|
storage()->put(storage()->resolveKey('policy', 'policy_pdf', 'from.pdf'), 'from');
|
|
storage()->copy('policy', 'policy_pdf', 'from.pdf', 'policy', 'policy_pdf', 'to.pdf');
|
|
|
|
$this->assertSame('from', storage()->read('policy', 'policy_pdf', 'to.pdf'));
|
|
}
|
|
|
|
public function testDownloadReturnsAttachmentResponse(): void
|
|
{
|
|
storage()->put(storage()->resolveKey('policy', 'policy_pdf', 'dl.pdf'), 'download');
|
|
|
|
$response = storage()->download('policy', 'policy_pdf', 'dl.pdf');
|
|
|
|
$this->assertInstanceOf(DownloadResponse::class, $response);
|
|
$this->assertDownloadHeaders($response, 'attachment');
|
|
$this->assertGreaterThan(0, $response->getContentLength());
|
|
}
|
|
|
|
public function testGetTemporaryUrlForLocalUsesBaseUrl(): void
|
|
{
|
|
storage()->put(storage()->resolveKey('policy', 'policy_pdf', 'url.pdf'), 'url');
|
|
|
|
$url = storage()->getTemporaryUrl('policy', 'policy_pdf', 'url.pdf');
|
|
|
|
$this->assertStringContainsString('uploads/policy/policy_pdf/url.pdf', $url);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
final class StorageHelperTest extends StorageTestCase
|
|
{
|
|
public function testStorageUploadIfValidReturnsNullForInvalidFile(): void
|
|
{
|
|
$this->assertNull(storage_upload_if_valid(null, 'policy', 'policy_pdf'));
|
|
}
|
|
|
|
public function testStorageExistsReturnsFalseForEmptyFileName(): void
|
|
{
|
|
$this->assertFalse(storage_exists('policy', 'policy_pdf', ''));
|
|
}
|
|
|
|
public function testStoragePutAndReadRoundTrip(): void
|
|
{
|
|
storage_put('policy', 'policy_md', 'helper.md', '# helper');
|
|
|
|
$this->assertTrue(storage_exists('policy', 'policy_md', 'helper.md'));
|
|
$this->assertSame('# helper', storage_read('policy', 'policy_md', 'helper.md'));
|
|
}
|
|
|
|
public function testStorageDeleteRemovesFile(): void
|
|
{
|
|
storage_put('endorsement', 'endorsement_pdf', 'delete-me.pdf', 'pdf');
|
|
$this->assertTrue(storage_delete('endorsement', 'endorsement_pdf', 'delete-me.pdf'));
|
|
$this->assertFalse(storage_exists('endorsement', 'endorsement_pdf', 'delete-me.pdf'));
|
|
}
|
|
|
|
public function testStorageInlineSetsInlineDisposition(): void
|
|
{
|
|
storage_put('policy', 'policy_pdf', 'inline.pdf', 'inline');
|
|
|
|
$response = storage_inline('policy', 'policy_pdf', 'inline.pdf');
|
|
|
|
$this->assertStringContainsString('inline', $response->getHeaderLine('Content-Disposition'));
|
|
}
|
|
|
|
public function testStorageLocalPathMatchesStoredFile(): void
|
|
{
|
|
storage_put('policy', 'policy_pdf', 'process.pdf', 'process');
|
|
|
|
$path = storage_local_path('policy', 'policy_pdf', 'process.pdf');
|
|
|
|
$this->assertFileExists($path);
|
|
$this->assertSame('process', file_get_contents($path));
|
|
}
|
|
}
|