|
4 | 4 |
|
5 | 5 | namespace GraphQLTests\Upload;
|
6 | 6 |
|
| 7 | +use Exception; |
7 | 8 | use GraphQL\Error\Error;
|
8 | 9 | use GraphQL\Error\InvariantViolation;
|
9 | 10 | use GraphQL\Language\AST\StringValueNode;
|
| 11 | +use GraphQL\Upload\UploadError; |
10 | 12 | use GraphQL\Upload\UploadType;
|
| 13 | +use GraphQL\Upload\Utility; |
11 | 14 | use GraphQLTests\Upload\Psr7\PsrUploadedFileStub;
|
12 | 15 | use PHPUnit\Framework\TestCase;
|
| 16 | +use Throwable; |
13 | 17 | use UnexpectedValueException;
|
14 | 18 |
|
15 | 19 | final class UploadTypeTest extends TestCase
|
@@ -49,4 +53,35 @@ public function testCanNeverParseLiteral(): void
|
49 | 53 | $this->expectExceptionMessage('`Upload` cannot be hardcoded in query, be sure to conform to GraphQL multipart request specification. Instead got: StringValue');
|
50 | 54 | $type->parseLiteral($node);
|
51 | 55 | }
|
| 56 | + |
| 57 | + /** |
| 58 | + * @param class-string<Throwable> $e |
| 59 | + * |
| 60 | + * @dataProvider providerUploadErrorWillThrow |
| 61 | + */ |
| 62 | + public function testUploadErrorWillThrow(int $errorStatus, string $expectedMessage, string $e = UploadError::class): void |
| 63 | + { |
| 64 | + $type = new UploadType(); |
| 65 | + $file = new PsrUploadedFileStub('image.jpg', 'image/jpeg', $errorStatus); |
| 66 | + |
| 67 | + $this->expectException($e); |
| 68 | + $this->expectExceptionMessage($expectedMessage); |
| 69 | + |
| 70 | + $type->parseValue($file); |
| 71 | + } |
| 72 | + |
| 73 | + /** |
| 74 | + * @return iterable<array{0: int, 1: string, 2?: class-string<Throwable>}> |
| 75 | + */ |
| 76 | + public static function providerUploadErrorWillThrow(): iterable |
| 77 | + { |
| 78 | + yield [UPLOAD_ERR_CANT_WRITE, 'Failed to write file to disk']; |
| 79 | + yield [UPLOAD_ERR_EXTENSION, 'A PHP extension stopped the upload']; |
| 80 | + yield [UPLOAD_ERR_FORM_SIZE, 'The file exceeds the `MAX_FILE_SIZE` directive that was specified in the HTML form']; |
| 81 | + yield [UPLOAD_ERR_INI_SIZE, 'The file exceeds the `upload_max_filesize` of ' . Utility::toMebibyte(Utility::getUploadMaxFilesize())]; |
| 82 | + yield [UPLOAD_ERR_NO_FILE, 'No file was uploaded']; |
| 83 | + yield [UPLOAD_ERR_NO_TMP_DIR, 'Missing a temporary folder']; |
| 84 | + yield [UPLOAD_ERR_PARTIAL, 'The file was only partially uploaded']; |
| 85 | + yield [5, 'Unsupported UPLOAD_ERR_* constant value: 5', Exception::class]; |
| 86 | + } |
52 | 87 | }
|
0 commit comments