You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.9 KiB
82 lines
2.9 KiB
11 months ago
|
<?php
|
||
|
|
||
|
namespace AlibabaCloud\Tea\FileForm\Tests;
|
||
|
|
||
|
use AlibabaCloud\Tea\FileForm\FileForm;
|
||
|
use AlibabaCloud\Tea\FileForm\FileForm\FileField;
|
||
|
use AlibabaCloud\Tea\FileForm\FileFormStream;
|
||
|
use GuzzleHttp\Psr7\Stream;
|
||
|
use PHPUnit\Framework\TestCase;
|
||
|
|
||
|
/**
|
||
|
* @internal
|
||
|
* @coversNothing
|
||
|
*/
|
||
|
class FileFormTest extends TestCase
|
||
|
{
|
||
|
public function testFileFromStream()
|
||
|
{
|
||
|
$boundary = FileForm::getBoundary();
|
||
|
$stream = FileForm::toFileForm([], $boundary);
|
||
|
$this->assertTrue($stream instanceof FileFormStream);
|
||
|
$stream->write($boundary);
|
||
|
$this->assertTrue(\strlen($boundary) === $stream->getSize());
|
||
|
}
|
||
|
|
||
|
public function testSet()
|
||
|
{
|
||
|
$fileField = new FileField([
|
||
|
'filename' => 'fake filename',
|
||
|
'contentType' => 'content type',
|
||
|
'content' => null,
|
||
|
]);
|
||
|
|
||
|
$this->assertEquals('fake filename', $fileField->filename);
|
||
|
$this->assertEquals('content type', $fileField->contentType);
|
||
|
}
|
||
|
|
||
|
public function testRead()
|
||
|
{
|
||
|
$fileField = new FileField();
|
||
|
$fileField->filename = 'haveContent';
|
||
|
$fileField->contentType = 'contentType';
|
||
|
$fileField->content = new Stream(fopen('data://text/plain;base64,' . base64_encode('This is file test. This sentence must be long'), 'r'));
|
||
|
|
||
|
$fileFieldNoContent = new FileField();
|
||
|
$fileFieldNoContent->filename = 'noContent';
|
||
|
$fileFieldNoContent->contentType = 'contentType';
|
||
|
$fileFieldNoContent->content = null;
|
||
|
|
||
|
$map = [
|
||
|
'key' => 'value',
|
||
|
'testKey' => 'testValue',
|
||
|
'haveFile' => $fileField,
|
||
|
'noFile' => $fileFieldNoContent,
|
||
|
];
|
||
|
|
||
|
$stream = FileForm::toFileForm($map, 'testBoundary');
|
||
|
|
||
|
$result = $stream->getContents();
|
||
|
$target = "--testBoundary\r\nContent-Disposition: form-data; name=\"key\"\r\n\r\nvalue\r\n--testBoundary\r\nContent-Disposition: form-data; name=\"testKey\"\r\n\r\ntestValue\r\n--testBoundary\r\nContent-Disposition: form-data; name=\"haveFile\"; filename=\"haveContent\"\r\nContent-Type: contentType\r\n\r\nThis is file test. This sentence must be long\r\n--testBoundary--\r\n";
|
||
|
|
||
|
$this->assertEquals($target, $result);
|
||
|
}
|
||
|
|
||
|
public function testReadFile()
|
||
|
{
|
||
|
$fileField = new FileField();
|
||
|
$fileField->filename = 'composer.json';
|
||
|
$fileField->contentType = 'application/json';
|
||
|
$fileField->content = new Stream(fopen(__DIR__ . '/../composer.json', 'r'));
|
||
|
$map = [
|
||
|
'name' => 'json_file',
|
||
|
'type' => 'application/json',
|
||
|
'json_file' => $fileField,
|
||
|
];
|
||
|
|
||
|
$boundary = FileForm::getBoundary();
|
||
|
$fileStream = FileForm::toFileForm($map, $boundary);
|
||
|
$this->assertTrue(false !== strpos($fileStream->getContents(), 'json_file'));
|
||
|
}
|
||
|
}
|