From 6c9ba0d2b67ec0f71aa635c4dda9d29bffbf42ee Mon Sep 17 00:00:00 2001 From: Chauncey McAskill Date: Thu, 9 Apr 2020 16:04:38 -0400 Subject: [PATCH] [!] Refactor support for values in file properties Improve support for multilingual/multiple values across various methods of FileProperty. Validation will now (correctly) log a message if a value (a file) is missing, is unparsable, is a rejected MIME type, or exceeds a maximum file size. Breaking Changes: - Removed deprecated accessor methods in favour of get-prefix variants - Refactored validation methods to focus on values (files) directly - Moved default MIME types to allow overriding in media-specific properties Added: - Option "fallbackFilename" to customize generated filename (defaults to property label) - Method `hasAcceptedMimetypes()` to check if any custom or fallback MIME types are specified - Method `getDefaultAcceptedMimetypes()` to distinguish between custom and fallback MIME types in property variants like ImageProperty and AudioProperty - Method `assertValidUploadPath()` to ensure upload path exists (or creates it) and checks if writable - Methods `isAcceptedMimeType()` and `isAcceptedFilesize()` - Methods `generateExtensionFromFile()`, `generateExtensionFromMimeType()`, and `resolveExtensionFromMimeType()` - Method `formatFilesize()` to format bytes into a human-readable unit - Method `pathFor()` to make an absolute path to a directory or file - Method `parseValAsFileList()` to flatten value object to simplify validation and parsing of values Removed: - Aliases `filesize()`, `mimetype()`, `mimetypeFor()` in favour of their get-prefixed methods Changed: - Bump branch-alias to 0.11 - Moved default MIME types from `getAcceptedMimeTypes()` to new `getDefaultAcceptedMimetypes()` for ImageProperty and AudioProperty - Fallback in method `getMimetype()` to retrieve the MIME type of the first value - Fallback in method `getFilesize()` to retrieve the MIME type of the first value - Renamed validation methods and internal routines to validate MIME type and size of available values (ignoring `getMimetype()` and `getFilesize`) - Unified methods `dataUpload()` and `fileUpload()` to throw exceptions - Unified methods `saveDataUploads()` and `saveDataUploads()` to catch exceptions and log errors - Replaced validation methods with new `isAccepted*()` methods inside `dataUpload()` and `fileUpload()` - Method `dataUpload()` to generate filename and extension before calling `uploadTarget()` - Method `uploadTarget()` to simplify making of filename - Method `generateFilename()` to use "fallbackFilename" and sanitize value Fixed: - Edge case where MIME type resolution returns "inode/x-empty" or empty string - Edge cases where a string is expected --- composer.json | 6 +- src/Charcoal/Property/AudioProperty.php | 39 +- src/Charcoal/Property/FileProperty.php | 787 +++++++++++++----- src/Charcoal/Property/ImageProperty.php | 28 +- tests/Charcoal/FixturesTrait.php | 30 + .../Property/AbstractFilePropertyTestCase.php | 359 ++++++++ tests/Charcoal/Property/AudioPropertyTest.php | 129 ++- tests/Charcoal/Property/ContainerProvider.php | 4 +- tests/Charcoal/Property/FilePropertyTest.php | 545 ++++++++++-- .../Charcoal/Property/Fixture/files/blank.txt | 0 .../Property/Fixture/files/buzzer.mp3 | Bin 0 -> 16512 bytes tests/Charcoal/Property/Fixture/files/cat.jpg | Bin 0 -> 1128 bytes .../Property/Fixture/files/document.txt | 7 + .../Charcoal/Property/Fixture/files/draft.txt | 1 + .../Charcoal/Property/Fixture/files/panda.png | Bin 0 -> 170276 bytes .../Property/Fixture/files/scream.wav | Bin 0 -> 43914 bytes .../Charcoal/Property/Fixture/files/stuff.txt | 1 + .../Charcoal/Property/Fixture/files/todo.txt | 5 + tests/Charcoal/Property/ImagePropertyTest.php | 122 ++- 19 files changed, 1676 insertions(+), 387 deletions(-) create mode 100644 tests/Charcoal/FixturesTrait.php create mode 100644 tests/Charcoal/Property/AbstractFilePropertyTestCase.php create mode 100644 tests/Charcoal/Property/Fixture/files/blank.txt create mode 100644 tests/Charcoal/Property/Fixture/files/buzzer.mp3 create mode 100644 tests/Charcoal/Property/Fixture/files/cat.jpg create mode 100644 tests/Charcoal/Property/Fixture/files/document.txt create mode 100644 tests/Charcoal/Property/Fixture/files/draft.txt create mode 100644 tests/Charcoal/Property/Fixture/files/panda.png create mode 100644 tests/Charcoal/Property/Fixture/files/scream.wav create mode 100644 tests/Charcoal/Property/Fixture/files/stuff.txt create mode 100644 tests/Charcoal/Property/Fixture/files/todo.txt diff --git a/composer.json b/composer.json index 0535a25b..86e40776 100644 --- a/composer.json +++ b/composer.json @@ -19,14 +19,14 @@ "prefer-stable": true, "extra": { "branch-alias": { - "dev-master": "0.10.x-dev" + "dev-master": "0.11.x-dev" } }, "require": { "php": ">=5.6.0 || >=7.0", "ext-fileinfo": "*", - "ext-PDO": "*", - "ext-SimpleXML": "*", + "ext-pdo": "*", + "ext-simplexml": "*", "psr/log": "^1.0", "psr/cache": "^1.0", "locomotivemtl/charcoal-config": "~0.9", diff --git a/src/Charcoal/Property/AudioProperty.php b/src/Charcoal/Property/AudioProperty.php index 2611c08c..2112baa8 100644 --- a/src/Charcoal/Property/AudioProperty.php +++ b/src/Charcoal/Property/AudioProperty.php @@ -85,38 +85,35 @@ public function getMaxLength() } /** + * Retrieves the default list of acceptable MIME types for uploaded files. + * + * This method should be overriden. + * * @return string[] */ - public function getAcceptedMimetypes() + public function getDefaultAcceptedMimetypes() { return [ 'audio/mp3', 'audio/mpeg', 'audio/ogg', + 'audio/webm', 'audio/wav', + 'audio/wave', 'audio/x-wav', + 'audio/x-pn-wav', ]; } /** - * Generate the file extension from the property's value. + * Resolve the file extension from the given MIME type. * - * @param string $file The file to parse. - * @return string The extension based on the MIME type. + * @param string $type The MIME type to resolve. + * @return string|null The extension based on the MIME type. */ - public function generateExtension($file = null) + protected function resolveExtensionFromMimeType($type) { - if (is_string($file)) { - if (in_array($file, $this->getAcceptedMimetypes())) { - $mime = $file; - } else { - $mime = $this->getMimetypeFor($file); - } - } else { - $mime = $this->getMimetype(); - } - - switch ($mime) { + switch ($type) { case 'audio/mp3': case 'audio/mpeg': return 'mp3'; @@ -124,12 +121,16 @@ public function generateExtension($file = null) case 'audio/ogg': return 'ogg'; + case 'audio/webm': + return 'webm'; + case 'audio/wav': + case 'audio/wave': case 'audio/x-wav': + case 'audio/x-pn-wav': return 'wav'; - - default: - return ''; } + + return null; } } diff --git a/src/Charcoal/Property/FileProperty.php b/src/Charcoal/Property/FileProperty.php index 22b190cd..3c2bc8ba 100644 --- a/src/Charcoal/Property/FileProperty.php +++ b/src/Charcoal/Property/FileProperty.php @@ -78,7 +78,7 @@ class FileProperty extends AbstractProperty * * @var string[] */ - private $acceptedMimetypes = []; + private $acceptedMimetypes; /** * Current file mimetype @@ -101,6 +101,11 @@ class FileProperty extends AbstractProperty */ private $filesize; + /** + * @var string + */ + private $fallbackFilename; + /** * The filesystem to use while uploading a file. * @@ -203,24 +208,72 @@ public function getOverwrite() } /** - * @param string[] $mimetypes The accepted mimetypes. + * Sets the acceptable MIME types for uploaded files. + * + * @param mixed $types One or many MIME types. + * @throws InvalidArgumentException If the $types argument is not NULL or a list. * @return self */ - public function setAcceptedMimetypes(array $mimetypes) + public function setAcceptedMimetypes($types) { - $this->acceptedMimetypes = $mimetypes; + if (is_array($types)) { + $types = array_filter($types); + if (empty($types)) { + $types = null; + } + } + + if ($types !== null && !is_array($types)) { + throw new InvalidArgumentException( + 'Must be an array of acceptable MIME types or NULL' + ); + } + + $this->acceptedMimetypes = $types; return $this; } /** + * Determines if any acceptable MIME types are defined. + * + * @return boolean + */ + public function hasAcceptedMimetypes() + { + if (!empty($this->acceptedMimetypes)) { + return true; + } + + return !empty($this->getDefaultAcceptedMimetypes()); + } + + /** + * Retrieves a list of acceptable MIME types for uploaded files. + * * @return string[] */ public function getAcceptedMimetypes() { + if ($this->acceptedMimetypes === null) { + return $this->getDefaultAcceptedMimetypes(); + } + return $this->acceptedMimetypes; } + /** + * Retrieves the default list of acceptable MIME types for uploaded files. + * + * This method should be overriden. + * + * @return string[] + */ + public function getDefaultAcceptedMimetypes() + { + return []; + } + /** * Set the MIME type. * @@ -232,78 +285,70 @@ public function setMimetype($type) { if ($type === null || $type === false) { $this->mimetype = null; - return $this; } if (!is_string($type)) { throw new InvalidArgumentException( - 'Mimetype must be a string' + 'MIME type must be a string' ); } $this->mimetype = $type; - return $this; } /** - * Retrieve the MIME type. + * Retrieve the MIME type of the property value. * - * @return string + * @todo Refactor to support multilingual/multiple files. + * + * @return integer Returns the MIME type for the first value. */ public function getMimetype() { - if (!$this->mimetype) { - $val = $this->val(); + if ($this->mimetype === null) { + $files = $this->parseValAsFileList($this->val()); + if (empty($files)) { + return null; + } - if (!$val) { - return ''; + $file = reset($files); + $type = $this->getMimetypeFor($file); + if ($type === null) { + return null; } - $this->setMimetype($this->getMimetypeFor(strval($val))); + $this->setMimetype($type); } return $this->mimetype; } - /** - * Alias of {@see self::getMimetype()}. - * - * @return string - */ - public function mimetype() - { - return $this->getMimetype(); - } - /** * Extract the MIME type from the given file. * - * @uses finfo * @param string $file The file to check. - * @return string|null Returns the given file's MIME type or FALSE if an error occurred. + * @return integer|null Returns the file's MIME type, + * or NULL in case of an error or the file is missing. */ public function getMimetypeFor($file) { + if (!$this->isAbsolutePath($file)) { + $file = $this->pathFor($file); + } + if (!$this->fileExists($file)) { return null; } $info = new finfo(FILEINFO_MIME_TYPE); + $type = $info->file($file); + if (empty($type) || $type === 'inode/x-empty') { + return null; + } - return $info->file($file); - } - - /** - * Alias of {@see self::getMimetypeFor()}. - * - * @param string $file The file to check. - * @return string|false - */ - public function mimetypeFor($file) - { - return $this->getMimetypeFor($file); + return $type; } /** @@ -367,41 +412,92 @@ public function maxFilesizeAllowedByPhp(&$iniDirective = null) */ public function setFilesize($size) { - if (!is_int($size)) { + if (!is_int($size) && $size !== null) { throw new InvalidArgumentException( - 'Filesize must be an integer, in bytes.' + 'File size must be an integer in bytes' ); } - $this->filesize = $size; + $this->filesize = $size; return $this; } /** - * @return integer + * Retrieve the size of the property value. + * + * @todo Refactor to support multilingual/multiple files. + * + * @return integer Returns the size in bytes for the first value. */ public function getFilesize() { - if (!$this->filesize) { - $val = $this->val(); - if (!$val || !$this->fileExists($val)) { + if ($this->filesize === null) { + $files = $this->parseValAsFileList($this->val()); + if (empty($files)) { + return 0; + } + + $file = reset($files); + $size = $this->getFilesizeFor($file); + if ($size === null) { return 0; - } else { - $this->filesize = filesize($val); } + + $this->setFilesize($size); } return $this->filesize; } /** - * Alias of {@see self::getFilesize()}. + * Extract the size of the given file. * - * @return integer + * @param string $file The file to check. + * @return integer|null Returns the file size in bytes, + * or NULL in case of an error or the file is missing. */ - public function filesize() + public function getFilesizeFor($file) { - return $this->getFilesize(); + if (!$this->isAbsolutePath($file)) { + $file = $this->pathFor($file); + } + + if (!$this->fileExists($file)) { + return null; + } + + $size = filesize($file); + if ($size === false) { + return null; + } + + return $size; + } + + /** + * Convert number of bytes to largest human-readable unit. + * + * @param integer $bytes Number of bytes. + * @param integer $decimals Precision of number of decimal places. Default 0. + * @return string|null Returns the formatted number or NULL. + */ + public function formatFilesize($bytes, $decimals = 2) + { + if ($bytes === 0) { + $factor = 0; + } else { + $factor = floor((strlen($bytes) - 1) / 3); + } + + $unit = [ 'B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB' ]; + + $factor = floor((strlen($bytes) - 1) / 3); + + if (!isset($unit[$factor])) { + $factor = 0; + } + + return sprintf('%.'.$decimals.'f', ($bytes / pow(1024, $factor))).' '.$unit[$factor]; } /** @@ -412,15 +508,18 @@ public function validationMethods() $parentMethods = parent::validationMethods(); return array_merge($parentMethods, [ - 'acceptedMimetypes', - 'maxFilesize', + 'mimetypes', + 'filesizes', ]); } /** - * @return boolean + * Validates the MIME types for the property's value(s). + * + * @return boolean Returns TRUE if all values are valid. + * Otherwise, returns FALSE and reports issues. */ - public function validateAcceptedMimetypes() + public function validateMimetypes() { $acceptedMimetypes = $this['acceptedMimetypes']; if (empty($acceptedMimetypes)) { @@ -428,49 +527,116 @@ public function validateAcceptedMimetypes() return true; } - if ($this->mimetype) { - $mimetype = $this->mimetype; - } else { - $val = $this->val(); - if (!$val || !$this->fileExists($val)) { - return true; - } - $mimetype = $this->getMimetypeFor($val); + $files = $this->parseValAsFileList($this->val()); + + if (empty($files)) { + return true; } - $valid = false; - foreach ($acceptedMimetypes as $m) { - if ($m === $mimetype) { - $valid = true; - break; + + $valid = true; + + foreach ($files as $file) { + $mime = $this->getMimetypeFor($file); + + if ($mime === null) { + $valid = false; + + $this->validator()->error(sprintf( + 'File [%s] not found or MIME type unrecognizable', + $file + ), 'acceptedMimetypes'); + } elseif (!in_array($mime, $acceptedMimetypes)) { + $valid = false; + + $this->validator()->error(sprintf( + 'File [%s] has unacceptable MIME type [%s]', + $file, + $mime + ), 'acceptedMimetypes'); } } - if (!$valid) { - $this->validator()->error('Accepted mimetypes error', 'acceptedMimetypes'); - } return $valid; } /** - * @return boolean + * Validates the file sizes for the property's value(s). + * + * @return boolean Returns TRUE if all values are valid. + * Otherwise, returns FALSE and reports issues. */ - public function validateMaxFilesize() + public function validateFilesizes() { $maxFilesize = $this['maxFilesize']; - if ($maxFilesize == 0) { + if (empty($maxFilesize)) { // No max size rule = always true return true; } - $filesize = $this->filesize(); - $valid = ($filesize <= $maxFilesize); - if (!$valid) { - $this->validator()->error('Max filesize error', 'maxFilesize'); + $files = $this->parseValAsFileList($this->val()); + + if (empty($files)) { + return true; + } + + $valid = true; + + foreach ($files as $file) { + $filesize = $this->getFilesizeFor($file); + + if ($filesize === null) { + $valid = false; + + $this->validator()->error(sprintf( + 'File [%s] not found or size unknown', + $file + ), 'maxFilesize'); + } elseif (($filesize > $maxFilesize)) { + $valid = false; + + $this->validator()->error(sprintf( + 'File [%s] exceeds maximum file size [%s]', + $file, + $this->formatFilesize($maxFilesize) + ), 'maxFilesize'); + } } return $valid; } + /** + * Parse a multi-dimensional array of value(s) into a single level. + * + * This method flattens a value object that is "l10n" or "multiple". + * Empty or duplicate values are removed. + * + * @param mixed $value A multi-dimensional variable. + * @return string[] The array of values. + */ + public function parseValAsFileList($value) + { + $files = []; + + if ($value instanceof Translation) { + $value = $value->data(); + } + + $array = $this->parseValAsMultiple($value); + array_walk_recursive($array, function ($item) use (&$files) { + $array = $this->parseValAsMultiple($item); + $files = array_merge($files, $array); + }); + + $files = array_filter($files, function ($file) { + return is_string($file) && isset($file[0]); + }); + $files = array_unique($files); + $files = array_values($files); + + return $files; + } + /** * Get the SQL type (Storage format) * @@ -566,9 +732,21 @@ protected function saveDataUploads($values) $parsed = []; foreach ($values as $value) { if ($this->isDataArr($value) || $this->isDataUri($value)) { - $path = $this->dataUpload($value); - if ($path !== null) { - $parsed[] = $path; + try { + $path = $this->dataUpload($value); + if ($path !== null) { + $parsed[] = $path; + + $this->logger->notice(sprintf( + 'File [%s] uploaded succesfully', + $path + )); + } + } catch (Exception $e) { + $this->logger->warning(sprintf( + 'Upload error on data URI: %s', + $e->getMessage() + )); } } elseif (is_string($value) && !empty($value)) { $parsed[] = $value; @@ -594,9 +772,22 @@ protected function saveFileUploads($files) $parsed = []; foreach ($files as $file) { if (isset($file['error'])) { - $path = $this->fileUpload($file); - if ($path !== null) { - $parsed[] = $path; + try { + $path = $this->fileUpload($file); + if ($path !== null) { + $parsed[] = $path; + + $this->logger->notice(sprintf( + 'File [%s] uploaded succesfully', + $path + )); + } + } catch (Exception $e) { + $this->logger->warning(sprintf( + 'Upload error on file [%s]: %s', + $file['name'], + $e->getMessage() + )); } } } @@ -633,13 +824,14 @@ protected function parseSavedValues($saved, $default = null) * * @param mixed $data A data URI. * @throws Exception If data content decoding fails. - * @throws InvalidArgumentException If the $data is invalid. + * @throws InvalidArgumentException If the input $data is invalid. + * @throws Exception If the upload fails or the $data is bad. * @return string|null The file path to the uploaded data. */ public function dataUpload($data) { $filename = null; - $content = false; + $contents = false; if (is_array($data)) { if (!isset($data['id'], $data['name'])) { @@ -658,40 +850,57 @@ public function dataUpload($data) )); } - $content = file_get_contents($tmpFile); - $filename = empty($data['name']) ? null : $data['name']; + $contents = file_get_contents($tmpFile); + + if (strlen($data['name']) > 0) { + $filename = $data['name']; + } // delete tmp file unlink($tmpFile); } elseif (is_string($data)) { - $content = file_get_contents($data); + $contents = file_get_contents($data); } - if ($content === false) { + if ($contents === false) { throw new Exception( - 'File content could not be decoded' + 'File content could not be decoded for data URI' ); } $info = new finfo(FILEINFO_MIME_TYPE); - $this->setMimetype($info->buffer($content)); - $this->setFilesize(strlen($content)); - if (!$this->validateAcceptedMimetypes() || !$this->validateMaxFilesize()) { - return null; + $mime = $info->buffer($contents); + if (!$this->isAcceptedMimeType($mime)) { + throw new Exception(sprintf( + 'Unacceptable MIME type [%s]', + $mime + )); + } + + $size = strlen($contents); + if (!$this->isAcceptedFilesize($size)) { + throw new Exception(sprintf( + 'Maximum file size exceeded [%s]', + $this->formatFilesize($this['maxFilesize']) + )); + } + + if ($filename === null) { + $extension = $this->generateExtensionFromMimeType($mime); + $filename = $this->generateFilename($extension); } $targetPath = $this->uploadTarget($filename); - $result = file_put_contents($targetPath, $content); + $result = file_put_contents($targetPath, $contents); if ($result === false) { - $this->logger->warning(sprintf( + throw new Exception(sprintf( 'Failed to write file to %s', $targetPath )); - return null; } - $basePath = $this->basePath(); + $basePath = $this->basePath(); $targetPath = str_replace($basePath, '', $targetPath); return $targetPath; @@ -704,7 +913,8 @@ public function dataUpload($data) * Adapted from slim/slim. * * @param array $file A single $_FILES entry. - * @throws InvalidArgumentException If the $file is invalid. + * @throws InvalidArgumentException If the input $file is invalid. + * @throws Exception If the upload fails or the $file is bad. * @return string|null The file path to the uploaded file. */ public function fileUpload(array $file) @@ -717,54 +927,51 @@ public function fileUpload(array $file) } if ($file['error'] !== UPLOAD_ERR_OK) { - $this->logger->warning(sprintf( - 'Upload error on file %s: %s', - $file['name'], - self::ERROR_MESSAGES[$this->error] - )); + $errorCode = $file['error']; + throw new Exception( + self::ERROR_MESSAGES[$errorCode] + ); + } - return null; + if (!file_exists($file['tmp_name'])) { + throw new Exception( + 'File does not exist' + ); } - if (file_exists($file['tmp_name'])) { - $info = new finfo(FILEINFO_MIME_TYPE); - $this->setMimetype($info->file($file['tmp_name'])); - $this->setFilesize(filesize($file['tmp_name'])); - if (!$this->validateAcceptedMimetypes() || !$this->validateMaxFilesize()) { - return null; - } - } else { - $this->logger->warning(sprintf( - 'File %s does not exists', - $file['tmp_name'] - )); - return null; + if (!is_uploaded_file($file['tmp_name'])) { + throw new Exception( + 'File was not uploaded' + ); } - $targetPath = $this->uploadTarget($file['name']); + $info = new finfo(FILEINFO_MIME_TYPE); + $mime = $info->file($file['tmp_name']); + if (!$this->isAcceptedMimeType($mime)) { + throw new Exception(sprintf( + 'Unacceptable MIME type [%s]', + $mime + )); + } - if (!is_uploaded_file($file['tmp_name'])) { - $this->logger->warning(sprintf( - '%s is not a valid uploaded file', - $file['tmp_name'] + $size = filesize($file['tmp_name']); + if (!$this->isAcceptedFilesize($size)) { + throw new Exception(sprintf( + 'Maximum file size exceeded [%s]', + $this->formatFilesize($this['maxFilesize']) )); - return null; } - if (!move_uploaded_file($file['tmp_name'], $targetPath)) { - $this->logger->warning(sprintf( - 'Error moving uploaded file %s to %s', - $file['tmp_name'], + $targetPath = $this->uploadTarget($file['name']); + + $result = move_uploaded_file($file['tmp_name'], $targetPath); + if ($result === false) { + throw new Exception(sprintf( + 'Failed to move uploaded file to %s', $targetPath )); - return null; } - $this->logger->notice(sprintf( - 'File %s uploaded succesfully', - $targetPath - )); - $basePath = $this->basePath(); $targetPath = str_replace($basePath, '', $targetPath); @@ -772,41 +979,37 @@ public function fileUpload(array $file) } /** - * @param string $filename Optional. The filename to save. If unset, a default filename will be generated. - * @throws Exception If the target path is not writeable. + * Parse the uploaded file path. + * + * This method will create the file's directory path and will sanitize the file's name + * or generate a unique name if none provided (such as data URIs). + * + * @param string|null $filename Optional. The filename to save as. + * If NULL, a default filename will be generated. * @return string */ public function uploadTarget($filename = null) { - $uploadPath = $this->basePath().$this['uploadPath']; + $this->assertValidUploadPath(); - if (!file_exists($uploadPath)) { - // @todo: Feedback - $this->logger->debug( - 'Path does not exist. Attempting to create path '.$uploadPath.'.', - [ get_called_class().'::'.__FUNCTION__ ] - ); - mkdir($uploadPath, 0777, true); - } + $uploadPath = $this->pathFor($this['uploadPath']); - if (!is_writable($uploadPath)) { - throw new Exception( - 'Error: upload directory is not writeable' - ); + if ($filename === null) { + $filename = $this->generateFilename(); + } else { + $filename = $this->sanitizeFilename($filename); } - $filename = empty($filename) ? $this->generateFilename() : $this->sanitizeFilename($filename); - $targetPath = $uploadPath.$filename; + $targetPath = $uploadPath.'/'.$filename; if ($this->fileExists($targetPath)) { if ($this['overwrite'] === true) { return $targetPath; - } else { - $targetPath = $uploadPath.$this->generateUniqueFilename($filename); - while ($this->fileExists($targetPath)) { - $targetPath = $uploadPath.$this->generateUniqueFilename($filename); - } } + + do { + $targetPath = $uploadPath.'/'.$this->generateUniqueFilename($filename); + } while ($this->fileExists($targetPath)); } return $targetPath; @@ -815,8 +1018,9 @@ public function uploadTarget($filename = null) /** * Checks whether a file or directory exists. * - * PHP built-in's `file_exists` is only case-insensitive on case-insensitive filesystem (such as Windows) - * This method allows to have the same validation across different platforms / filesystem. + * PHP built-in's `file_exists` is only case-insensitive on + * a case-insensitive filesystem (such as Windows). This method allows + * to have the same validation across different platforms / filesystems. * * @param string $file The full file to check. * @param boolean $caseInsensitive Case-insensitive by default. @@ -824,8 +1028,10 @@ public function uploadTarget($filename = null) */ public function fileExists($file, $caseInsensitive = true) { + $file = (string)$file; + if (!$this->isAbsolutePath($file)) { - $file = $this->basePath().$file; + $file = $this->pathFor($file); } if (file_exists($file)) { @@ -852,17 +1058,24 @@ public function fileExists($file, $caseInsensitive = true) /** * Sanitize a filename by removing characters from a blacklist and escaping dot. * - * @param string $filename The filename to sanitize. + * @param string $filename The filename to sanitize. + * @throws Exception If the filename is invalid. * @return string The sanitized filename. */ public function sanitizeFilename($filename) { // Remove blacklisted caharacters $blacklist = [ '/', '\\', '\0', '*', ':', '?', '"', '<', '>', '|', '#', '&', '!', '`', ' ' ]; - $filename = str_replace($blacklist, '_', $filename); + $filename = str_replace($blacklist, '_', (string)$filename); + + // Avoid hidden file or trailing dot + $filename = trim($filename, '.'); - // Avoid hidden file - $filename = ltrim($filename, '.'); + if (strlen($filename) === 0) { + throw new Exception( + 'Bad file name after sanitization' + ); + } return $filename; } @@ -917,18 +1130,19 @@ public function renderFileRenamePattern($from, $to, $args = null) /** * Generate a new filename from the property. * + * @param string|null $extension An extension to append to the generated filename. * @return string */ - public function generateFilename() + public function generateFilename($extension = null) { - $filename = $this['label'].' '.date('Y-m-d H-i-s'); - $extension = $this->generateExtension(); + $filename = $this->sanitizeFilename($this['fallbackFilename']); + $filename = $filename.' '.date('Y-m-d\TH-i-s'); - if ($extension) { + if ($extension !== null) { return $filename.'.'.$extension; - } else { - return $filename; } + + return $filename; } /** @@ -940,22 +1154,22 @@ public function generateFilename() */ public function generateUniqueFilename($filename) { - if (!is_string($filename) && !is_array($filename)) { - throw new InvalidArgumentException(sprintf( - 'The target must be a string or an array from [pathfino()], received %s', - (is_object($filename) ? get_class($filename) : gettype($filename)) - )); - } - if (is_string($filename)) { $info = pathinfo($filename); } else { $info = $filename; } + if (!isset($info['filename']) || strlen($info['filename']) === 0) { + throw new InvalidArgumentException(sprintf( + 'File must be a string [file path] or an array [pathfino()], received %s', + (is_object($filename) ? get_class($filename) : gettype($filename)) + )); + } + $filename = $info['filename'].'-'.uniqid(); - if (isset($info['extension']) && $info['extension']) { + if (isset($info['extension']) && strlen($info['extension']) > 0) { $filename .= '.'.$info['extension']; } @@ -963,35 +1177,106 @@ public function generateUniqueFilename($filename) } /** - * Generate the file extension from the property's value. + * Generate the file extension from the property value. + * + * @todo Refactor to support multilingual/multiple files. + * + * @return string Returns the file extension based on the MIME type for the first value. + */ + public function generateExtension() + { + $type = $this->getMimetype(); + + return $this->resolveExtensionFromMimeType($type); + } + + /** + * Generate a file extension from the given file path. * * @param string $file The file to parse. - * @return string The extension based on the MIME type. + * @return string|null The extension based on the file's MIME type. */ - public function generateExtension($file = null) + public function generateExtensionFromFile($file) { - if ($file === null) { - $file = $this->val(); + if ($this->hasAcceptedMimetypes()) { + $type = $this->getMimetypeFor($file); + + return $this->resolveExtensionFromMimeType($type); + } + + if (!is_string($file) || !defined('FILEINFO_EXTENSION')) { + return null; } // PHP 7.2 - if (is_string($file) && defined('FILEINFO_EXTENSION')) { - $info = new finfo(FILEINFO_EXTENSION); - $ext = $info->file($file); + $info = new finfo(FILEINFO_EXTENSION); + $ext = $info->file($file); - if ($ext === '???') { - return ''; - } + if ($ext === '???') { + return null; + } - if (strpos($ext, '/') !== false) { - $ext = explode('/', $ext); - $ext = reset($ext); - } + if (strpos($ext, '/') !== false) { + $ext = explode('/', $ext); + $ext = reset($ext); + } + + return $ext; + } + + /** + * Generate a file extension from the given MIME type. + * + * @param string $type The MIME type to parse. + * @return string|null The extension based on the MIME type. + */ + public function generateExtensionFromMimeType($type) + { + if (in_array($type, $this->getAcceptedMimetypes())) { + return $this->resolveExtensionFromMimeType($type); + } + + return null; + } - return $ext; + /** + * Resolve the file extension from the given MIME type. + * + * This method should be overriden to provide available extensions. + * + * @param string $type The MIME type to resolve. + * @return string|null The extension based on the MIME type. + */ + protected function resolveExtensionFromMimeType($type) + { + switch ($type) { + case 'text/plain': + return 'txt'; + } + + return null; + } + + /** + * @param mixed $fallback The fallback filename. + * @return self + */ + public function setFallbackFilename($fallback) + { + $this->fallbackFilename = $this->translator()->translation($fallback); + return $this; + } + + /** + * @return Translation|null + */ + public function getFallbackFilename() + { + if ($this->fallbackFilename === null) { + return $this['label']; } - return ''; + return $this->fallbackFilename; } /** @@ -1023,11 +1308,12 @@ protected function setDependencies(Container $container) { parent::setDependencies($container); - $this->basePath = $container['config']['base_path']; + $this->basePath = $container['config']['base_path']; $this->publicPath = $container['config']['public_path']; } + /** - * Retrieve the path to the storage directory. + * Retrieve the base path to the storage directory. * * @return string */ @@ -1035,8 +1321,60 @@ protected function basePath() { if ($this['publicAccess']) { return $this->publicPath; - } else { - return $this->basePath; + } + + return $this->basePath; + } + + /** + * Build the path for a named route including the base path. + * + * The {@see self::basePath() base path} will be prepended to the given $path. + * + * If the given $path does not start with the {@see self::getUploadPath() upload path}, + * it will be prepended. + * + * @param string $path The end path. + * @return string + */ + protected function pathFor($path) + { + $path = trim($path, '/'); + $uploadPath = trim($this['uploadPath'], '/'); + $basePath = rtrim($this->basePath(), '/'); + + if (strpos($path, $uploadPath) !== 0) { + $basePath .= '/'.$uploadPath; + } + + return $basePath.'/'.$path; + } + + /** + * Attempts to create the upload path. + * + * @throws Exception If the upload path is unavailable. + * @return void + */ + protected function assertValidUploadPath() + { + $uploadPath = $this->pathFor($this['uploadPath']); + + if (!file_exists($uploadPath)) { + $this->logger->debug(sprintf( + '[%s] Upload directory [%s] does not exist; attempting to create path', + [ get_called_class().'::'.__FUNCTION__ ], + $uploadPath + )); + + mkdir($uploadPath, 0777, true); + } + + if (!is_writable($uploadPath)) { + throw new Exception(sprintf( + 'Upload directory [%s] is not writeable', + $uploadPath + )); } } @@ -1055,7 +1393,7 @@ protected function parseIniSize($size) if (!is_string($size)) { throw new InvalidArgumentException( - 'Size must be an integer (in bytes, e.g.: 1024) or a string (e.g.: 1M).' + 'Size must be an integer (in bytes, e.g.: 1024) or a string (e.g.: 1M)' ); } @@ -1071,7 +1409,51 @@ protected function parseIniSize($size) } /** - * Determine if the given file path is am absolute path. + * Determine if the given MIME type is acceptable. + * + * @param string $type A MIME type. + * @param string[] $accepted One or many acceptable MIME types. + * Defaults to the property's "acceptedMimetypes". + * @return boolean Returns TRUE if the MIME type is acceptable. + * Otherwise, returns FALSE. + */ + protected function isAcceptedMimeType($type, array $accepted = null) + { + if ($accepted === null) { + $accepted = $this['acceptedMimetypes']; + } + + if (empty($accepted)) { + return true; + } + + return in_array($type, $accepted); + } + + /** + * Determine if the given file size is acceptable. + * + * @param integer $size Number of bytes. + * @param integer $max The maximum number of bytes allowed. + * Defaults to the property's "maxFilesize". + * @return boolean Returns TRUE if the size is acceptable. + * Otherwise, returns FALSE. + */ + protected function isAcceptedFilesize($size, $max = null) + { + if ($max === null) { + $max = $this['maxFilesize']; + } + + if (empty($max)) { + return true; + } + + return ($size <= $max); + } + + /** + * Determine if the given file path is an absolute path. * * Note: Adapted from symfony\filesystem. * @@ -1082,6 +1464,8 @@ protected function parseIniSize($size) */ protected function isAbsolutePath($file) { + $file = (string)$file; + return strspn($file, '/\\', 0, 1) || (strlen($file) > 3 && ctype_alpha($file[0]) @@ -1155,6 +1539,7 @@ private function renamePatternArgs($path, $args = null) $defaults = [ '{{property}}' => $this->ident(), '{{label}}' => $this['label'], + '{{fallback}}' => $this['fallbackFilename'], '{{extension}}' => $info['extension'], '{{basename}}' => $info['basename'], '{{filename}}' => $info['filename'], diff --git a/src/Charcoal/Property/ImageProperty.php b/src/Charcoal/Property/ImageProperty.php index 491eb6cf..425d5954 100644 --- a/src/Charcoal/Property/ImageProperty.php +++ b/src/Charcoal/Property/ImageProperty.php @@ -262,13 +262,13 @@ public function processEffects($value, array $effects = null, ImageInterface $im } /** - * Provides the accepted mimetypes for the image properties. + * Retrieves the default list of acceptable MIME types for uploaded files. * - * Overrides FileProperty's getAcceptedMimetypes() method. + * This method should be overriden. * * @return string[] */ - public function getAcceptedMimetypes() + public function getDefaultAcceptedMimetypes() { return [ 'image/gif', @@ -282,24 +282,14 @@ public function getAcceptedMimetypes() } /** - * Generate the file extension from the property's value. + * Resolve the file extension from the given MIME type. * - * @param string $file The file to parse. - * @return string The extension based on the MIME type. + * @param string $type The MIME type to resolve. + * @return string|null The extension based on the MIME type. */ - public function generateExtension($file = null) + protected function resolveExtensionFromMimeType($type) { - if (is_string($file)) { - if (in_array($file, $this['acceptedMimetypes'])) { - $mime = $file; - } else { - $mime = $this->getMimetypeFor($file); - } - } else { - $mime = $this->getMimetype(); - } - - switch ($mime) { + switch ($type) { case 'image/gif': return 'gif'; @@ -317,6 +307,8 @@ public function generateExtension($file = null) case 'image/webp': return 'webp'; } + + return null; } /** diff --git a/tests/Charcoal/FixturesTrait.php b/tests/Charcoal/FixturesTrait.php new file mode 100644 index 00000000..442b79f1 --- /dev/null +++ b/tests/Charcoal/FixturesTrait.php @@ -0,0 +1,30 @@ +getPathToFixtures().'/'.ltrim($file, '/'); + } + + /** + * Retrieve the path to the fixtures directory. + * + * @return string The path to the fixtures directory relative to the base directory. + */ + public function getPathToFixtures() + { + return 'tests/Charcoal/Property/Fixture'; + } +} diff --git a/tests/Charcoal/Property/AbstractFilePropertyTestCase.php b/tests/Charcoal/Property/AbstractFilePropertyTestCase.php new file mode 100644 index 00000000..3ce44c41 --- /dev/null +++ b/tests/Charcoal/Property/AbstractFilePropertyTestCase.php @@ -0,0 +1,359 @@ + + */ + private $fileMapOfFixtures; + + /** + * @return void + */ + public function setUp() + { + $this->obj = $this->createProperty(); + } + + /** + * @return array + */ + public function getFileMapOfFixtures() + { + if ($this->fileMapOfFixtures === null) { + $this->fileMapOfFixtures = []; + foreach (self::FIXTURES as $filename) { + $this->fileMapOfFixtures[$filename] = $this->getPathToFixture('files/'.$filename); + } + } + + return $this->fileMapOfFixtures; + } + + /** + * Reports an error identified by $message if $validator does not have the $results. + * + * @param array $expected The expected results. + * @param array $actual The actual results. + * @return void + */ + public function assertValidatorHasResults($expected, $actual) + { + foreach ($actual as $level => $results) { + $this->assertArrayHasKey( + $level, + $expected, + sprintf( + 'Failed asserting that validator results has the level \'%s\'.', + $level + ) + ); + + foreach ($results as $i => $result) { + $this->assertArrayHasKey( + $i, + $expected[$level], + 'Failed asserting that validator results contains an expected message.' + ); + + $this->assertStringMatchesFormat( + $expected[$level][$i], + $result->message() + ); + } + } + } + + /** + * Asserts that the property implements {@see FileProperty}. + * + * @coversNothing + * @return void + */ + public function testFilePropertyInterface() + { + $this->assertInstanceOf(FileProperty::class, $this->obj); + } + + /** + * Asserts that the property adheres to file property defaults. + * + * @return void + */ + public function testPropertyDefaults() + { + $obj = $this->obj; + + $this->assertEquals(FileProperty::DEFAULT_UPLOAD_PATH, $obj['uploadPath']); + $this->assertEquals(FileProperty::DEFAULT_FILESYSTEM, $obj['filesystem']); + $this->assertEquals(FileProperty::DEFAULT_PUBLIC_ACCESS, $obj['publicAccess']); + $this->assertEquals(FileProperty::DEFAULT_OVERWRITE, $obj['overwrite']); + $this->assertEquals($obj['defaultAcceptedMimetypes'], $obj['acceptedMimetypes']); + $this->assertEquals($obj->maxFilesizeAllowedByPhp(), $obj['maxFilesize']); + } + + /** + * Asserts that the file property will generate + * the expected extension from a given dataset. + * + * @dataProvider provideDataForGenerateExtension + * + * @param string $mime A MIME type. + * @param string $ext The expected file extension. + * @return void + */ + public function testGenerateExtensionFromDataProvider($mime, $ext) + { + $this->obj['mimetype'] = $mime; + $this->assertEquals($mime, $this->obj['mimetype']); + $this->assertEquals($ext, $this->obj->generateExtension()); + } + + /** + * Asserts that the file property will generate an extension + * for all default accepted MIME types. + * + * @return void + */ + public function testGenerateExtensionFromDefaultAcceptedMimeTypes() + { + $mimes = $this->obj['defaultAcceptedMimetypes']; + if (empty($mimes)) { + // PHPUnit 7+ + # $this->expectNotToPerformAssertions(); + // PHPUnit 5/6 + $this->assertTrue(true); + return; + } + + foreach ($mimes as $mime) { + $this->obj['mimetype'] = $mime; + $this->assertEquals($mime, $this->obj['mimetype']); + + $ext = $this->obj->generateExtension(); + $this->assertInternalType('string', $ext); + $this->assertNotEmpty($ext); + } + } + + /** + * Asserts that the uploadPath always ends with a trailing "/". + * + * @return void + */ + public function testUploadPath() + { + $obj = $this->obj; + + $return = $obj->setUploadPath('storage/path/a'); + $this->assertSame($obj, $return); + $this->assertEquals('storage/path/a/', $obj->getUploadPath()); + + $obj['uploadPath'] = 'uploads/path/b///'; + $this->assertEquals('uploads/path/b/', $obj['uploadPath']); + + $this->expectException(InvalidArgumentException::class); + $obj->setUploadPath(42); + } + + /** + * Asserts that the property can store a filesize. + * + * @covers \Charcoal\Property\FileProperty::setFilesize() + * @covers \Charcoal\Property\FileProperty::getFilesize() + * @return void + */ + public function testFilesize() + { + $return = $this->obj->setFilesize(1024); + $this->assertSame($this->obj, $return); + $this->assertEquals(1024, $this->obj->getFilesize()); + + $this->obj->setFilesize(null); + $this->assertEquals(0, $this->obj->getFilesize()); + + $this->expectException(InvalidArgumentException::class); + $this->obj->setFilesize(false); + } + + /** + * Asserts that the property returns NULL if it can not resolve the filesize from its value. + * + * @covers \Charcoal\Property\FileProperty::getFilesize() + * @return void + */ + public function testFilesizeFromBadVal() + { + $obj = $this->obj; + + $obj['uploadPath'] = $this->getPathToFixtures().'/files'; + $obj['val'] = $this->getPathToFixture('files/blank.txt'); + + $this->assertEquals(0, $obj['filesize']); + } + + /** + * Asserts that the property can store a MIME type. + * + * @covers \Charcoal\Property\FileProperty::setMimetype() + * @covers \Charcoal\Property\FileProperty::getMimetype() + * @return void + */ + public function testMimetype() + { + $return = $this->obj->setMimetype('foo'); + $this->assertSame($this->obj, $return); + $this->assertEquals('foo', $this->obj->getMimetype()); + + $this->obj->setMimetype(null); + $this->assertNull($this->obj->getMimetype()); + + $this->obj['mimetype'] = false; + $this->assertNull($this->obj['mimetype']); + + $this->expectException(InvalidArgumentException::class); + $this->obj->setMimetype([]); + } + + /** + * Asserts that the property returns NULL if it can not resolve the MIME type from its value. + * + * @covers \Charcoal\Property\FileProperty::getMimetype() + * @return void + */ + public function testMimetypeFromBadVal() + { + $obj = $this->obj; + + $obj['uploadPath'] = $this->getPathToFixtures().'/files'; + $obj['val'] = $this->getPathToFixture('files/blank.txt'); + + $this->assertNull($obj['mimetype']); + } + + /** + * Asserts that the property supports accepted MIME types. + * + * @covers \Charcoal\Property\FileProperty::setAcceptedMimetypes() + * @covers \Charcoal\Property\FileProperty::getAcceptedMimetypes() + * @return void + */ + public function testAcceptedMimeTypes() + { + $obj = $this->obj; + + $return = $obj->setAcceptedMimetypes([ 'text/plain', 'text/csv', 'text/html' ]); + $this->assertSame($obj, $return); + + $accpetedMimeTypes = $obj->getAcceptedMimetypes(); + $this->assertInternalType('array', $accpetedMimeTypes); + $this->assertCount(3, $accpetedMimeTypes); + $this->assertContains('text/plain', $accpetedMimeTypes); + $this->assertContains('text/csv', $accpetedMimeTypes); + $this->assertContains('text/html', $accpetedMimeTypes); + + $obj->setAcceptedMimetypes([ 'text/css', 0 ]); + + $accpetedMimeTypes = $obj->getAcceptedMimetypes(); + $this->assertCount(1, $accpetedMimeTypes); + $this->assertContains('text/css', $accpetedMimeTypes); + + $obj->setAcceptedMimetypes([]); + + $accpetedMimeTypes = $obj->getAcceptedMimetypes(); + $this->assertEquals($obj->getDefaultAcceptedMimetypes(), $accpetedMimeTypes); + + $this->expectException(InvalidArgumentException::class); + $obj->setAcceptedMimetypes('text/plain'); + } + + /** + * Asserts that the property adheres to file property defaults. + * + * @covers \Charcoal\Property\FileProperty::getDefaultAcceptedMimetypes() + * @return void + */ + abstract public function testDefaulAcceptedMimeTypes(); + + /** + * Asserts that the property properly checks if + * any acceptable MIME types are available. + * + * @covers \Charcoal\Property\FileProperty::hasAcceptedMimetypes() + * @return void + */ + abstract public function testHasAcceptedMimeTypes(); + + /** + * Asserts that the property can resolve a filesize from its value. + * + * @return void + */ + abstract public function testFilesizeFromVal(); + + /** + * Asserts that the property can resolve a MIME type from its value. + * + * @return void + */ + abstract public function testMimetypeFromVal(); + + /** + * Asserts that the `type()` method is "file". + * + * @covers \Charcoal\Property\FileProperty::type() + * @return void + */ + abstract public function testPropertyType(); + + /** + * Create a file property instance. + * + * @return PropertyInterface + */ + abstract public function createProperty(); + + /** + * Provide property data for {@see FileProperty::generateExtension()}. + * + * @used-by self::testGenerateExtension() + * @return array Format: `[ "mime-type", "extension" ]` + */ + abstract public function provideDataForGenerateExtension(); +} diff --git a/tests/Charcoal/Property/AudioPropertyTest.php b/tests/Charcoal/Property/AudioPropertyTest.php index 7f17f71a..5ef4c208 100644 --- a/tests/Charcoal/Property/AudioPropertyTest.php +++ b/tests/Charcoal/Property/AudioPropertyTest.php @@ -2,51 +2,113 @@ namespace Charcoal\Tests\Property; +// From 'charcoal-property' use Charcoal\Property\AudioProperty; -use Charcoal\Tests\AbstractTestCase; /** - * ## TODOs - * - 2015-03-12: + * */ -class AudioPropertyTest extends AbstractTestCase +class AudioPropertyTest extends AbstractFilePropertyTestCase { - use \Charcoal\Tests\Property\ContainerIntegrationTrait; - - /** - * @var AudioProperty - */ - public $obj; - /** - * @return void + * Create a file property instance. + * + * @return AudioProperty */ - public function setUp() + public function createProperty() { $container = $this->getContainer(); - $this->obj = new AudioProperty([ + return new AudioProperty([ 'database' => $container['database'], 'logger' => $container['logger'], 'translator' => $container['translator'], + 'container' => $container, ]); } /** + * Asserts that the `type()` method is "file". + * + * @covers \Charcoal\Property\AudioProperty::type() + * @return void + */ + public function testPropertyType() + { + $this->assertEquals('audio', $this->obj->type()); + } + + /** + * Asserts that the property adheres to file property defaults. + * * @return void */ - public function testDefauls() + public function testPropertyDefaults() { + parent::testPropertyDefaults(); + $this->assertEquals(0, $this->obj['minLength']); $this->assertEquals(0, $this->obj['maxLength']); } /** + * Asserts that the property adheres to file property defaults. + * + * @covers \Charcoal\Property\AudioProperty::getDefaultAcceptedMimetypes() * @return void */ - public function testType() + public function testDefaulAcceptedMimeTypes() { - $this->assertEquals('audio', $this->obj->type()); + $this->assertInternalType('array', $this->obj['defaultAcceptedMimetypes']); + $this->assertNotEmpty($this->obj['defaultAcceptedMimetypes']); + } + + /** + * Asserts that the property properly checks if + * any acceptable MIME types are available. + * + * @covers \Charcoal\Property\AudioProperty::hasAcceptedMimetypes() + * @return void + */ + public function testHasAcceptedMimeTypes() + { + $this->assertTrue($this->obj->hasAcceptedMimetypes()); + + $this->obj->setAcceptedMimetypes([ 'audio/wav' ]); + $this->assertTrue($this->obj->hasAcceptedMimetypes()); + } + + /** + * Asserts that the property can resolve a filesize from its value. + * + * @return void + */ + public function testFilesizeFromVal() + { + $obj = $this->obj; + + $obj['uploadPath'] = $this->getPathToFixtures().'/files'; + $obj['val'] = $this->getPathToFixture('files/buzzer.mp3'); + + $this->assertEquals(16512, $obj['filesize']); + } + + /** + * Asserts that the property can resolve a MIME type from its value. + * + * @return void + */ + public function testMimetypeFromVal() + { + $obj = $this->obj; + + $obj['uploadPath'] = $this->getPathToFixtures().'/files'; + $obj['val'] = $this->getPathToFixture('files/buzzer.mp3'); + + $this->assertThat($obj['mimetype'], $this->logicalOr( + $this->equalTo('audio/mp3'), + $this->equalTo('audio/mpeg') + )); } /** @@ -124,29 +186,24 @@ public function testAcceptedMimetypes() } /** - * @dataProvider mimeExtensionProvider + * Provide property data for {@see AudioProperty::generateExtension()}. * - * @param string $mime A MIME type. - * @param string $ext A file format. - * @return void - */ - public function testGenerateExtension($mime, $ext) - { - $this->obj->setMimetype($mime); - $this->assertEquals($mime, $this->obj['mimetype']); - $this->assertEquals($ext, $this->obj->generateExtension()); - } - - /** - * @return array + * @used-by AbstractFilePropertyTestCase::testGenerateExtensionFromDataProvider() + * @return array */ - public function mimeExtensionProvider() + public function provideDataForGenerateExtension() { return [ - ['audio/mp3', 'mp3'], - ['audio/mpeg', 'mp3'], - ['audio/wav', 'wav'], - ['audio/x-wav', 'wav'], + [ 'audio/mp3', 'mp3' ], + [ 'audio/mpeg', 'mp3' ], + [ 'audio/ogg', 'ogg' ], + [ 'audio/webm', 'webm' ], + [ 'audio/wav', 'wav' ], + [ 'audio/wave', 'wav' ], + [ 'audio/x-wav', 'wav' ], + [ 'audio/x-pn-wav', 'wav' ], + [ 'audio/x-foo', null ], + [ 'video/webm', null ], ]; } } diff --git a/tests/Charcoal/Property/ContainerProvider.php b/tests/Charcoal/Property/ContainerProvider.php index cb2f1558..59512fc7 100644 --- a/tests/Charcoal/Property/ContainerProvider.php +++ b/tests/Charcoal/Property/ContainerProvider.php @@ -65,8 +65,8 @@ public function registerBaseServices(Container $container) public function registerConfig(Container $container) { $container['config'] = [ - 'base_path' => realpath(__DIR__.'/../../..'), - 'public_path' => '' + 'base_path' => realpath(__DIR__.'/../../..'), + 'public_path' => realpath(__DIR__.'/../../..'), ]; } diff --git a/tests/Charcoal/Property/FilePropertyTest.php b/tests/Charcoal/Property/FilePropertyTest.php index 2594d3e3..e8729af1 100644 --- a/tests/Charcoal/Property/FilePropertyTest.php +++ b/tests/Charcoal/Property/FilePropertyTest.php @@ -6,33 +6,27 @@ use InvalidArgumentException; use ReflectionClass; +// From 'charcoal-core' +use Charcoal\Validator\ValidatorInterface as Validator; + // From 'charcoal-property' use Charcoal\Property\FileProperty; -use Charcoal\Tests\AbstractTestCase; -use Charcoal\Tests\ReflectionsTrait; -use Charcoal\Tests\Property\ContainerIntegrationTrait; /** * */ -class FilePropertyTest extends AbstractTestCase +class FilePropertyTest extends AbstractFilePropertyTestCase { - use ReflectionsTrait; - use ContainerIntegrationTrait; - /** - * @var FileProperty - */ - public $obj; - - /** - * @return void + * Create a file property instance. + * + * @return FileProperty */ - public function setUp() + public function createProperty() { $container = $this->getContainer(); - $this->obj = new FileProperty([ + return new FileProperty([ 'database' => $container['database'], 'logger' => $container['logger'], 'translator' => $container['translator'], @@ -41,27 +35,81 @@ public function setUp() } /** + * Asserts that the `type()` method is "file". + * + * @covers \Charcoal\Property\FileProperty::type() * @return void */ - public function testConstructor() + public function testPropertyType() + { + $this->assertEquals('file', $this->obj->type()); + } + + /** + * Asserts that the property adheres to file property defaults. + * + * @covers \Charcoal\Property\FileProperty::getDefaultAcceptedMimetypes() + * @return void + */ + public function testDefaulAcceptedMimeTypes() + { + $this->assertInternalType('array', $this->obj['defaultAcceptedMimetypes']); + $this->assertEmpty($this->obj['defaultAcceptedMimetypes']); + } + + /** + * Asserts that the property properly checks if + * any acceptable MIME types are available. + * + * @covers \Charcoal\Property\FileProperty::hasAcceptedMimetypes() + * @return void + */ + public function testHasAcceptedMimeTypes() { $obj = $this->obj; - $this->assertInstanceOf('\Charcoal\Property\FileProperty', $obj); - $this->assertEquals('uploads/', $obj['uploadPath']); - $this->assertFalse($obj['overwrite']); - $this->assertEquals([], $obj['acceptedMimetypes']); - $this->assertEquals($obj->maxFilesizeAllowedByPhp(), $obj['maxFilesize']); + + $explicitMimeTypes = $this->getPropertyValue($obj, 'acceptedMimetypes'); + $fallbackMimeTypes = $obj->getDefaultAcceptedMimetypes(); + if (!empty($explicitMimeTypes) || !empty($fallbackMimeTypes)) { + $this->assertTrue($obj->hasAcceptedMimetypes()); + } else { + $this->assertFalse($obj->hasAcceptedMimetypes()); + } + + if (empty($explicitMimeTypes)) { + $obj->setAcceptedMimetypes([ 'text/plain', 'text/html', 'text/css' ]); + $this->assertTrue($obj->hasAcceptedMimetypes()); + } } /** - * Asserts that the `type()` method is "file". + * Asserts that the property can resolve a filesize from its value. * * @return void */ - public function testType() + public function testFilesizeFromVal() { $obj = $this->obj; - $this->assertEquals('file', $obj->type()); + + $obj['uploadPath'] = $this->getPathToFixtures().'/files'; + $obj['val'] = $this->getPathToFixture('files/document.txt'); + + $this->assertEquals(743, $obj['filesize']); + } + + /** + * Asserts that the property can resolve a MIME type from its value. + * + * @return void + */ + public function testMimetypeFromVal() + { + $obj = $this->obj; + + $obj['uploadPath'] = $this->getPathToFixtures().'/files'; + $obj['val'] = $this->getPathToFixture('files/document.txt'); + + $this->assertEquals('text/plain', $obj['mimetype']); } /** @@ -74,7 +122,7 @@ public function testSetData() 'public_access' => true, 'uploadPath' => 'uploads/foobar/', 'overwrite' => true, - 'acceptedMimetypes' => ['image/x-foobar'], + 'acceptedMimetypes' => [ 'image/x-foobar' ], 'maxFilesize' => (32 * 1024 * 1024), ]); $this->assertSame($ret, $obj); @@ -86,32 +134,6 @@ public function testSetData() $this->assertEquals((32 * 1024 * 1024), $this->obj['maxFilesize']); } - /** - * Asserts that the uploadPath method - * - defaults to 'uploads/' - * - always append a "/" - * - * @return void - */ - public function testSetUploadPath() - { - $obj = $this->obj; - $this->assertEquals('uploads/', $this->obj['uploadPath']); - - $ret = $obj->setUploadPath('foobar'); - $this->assertSame($ret, $obj); - $this->assertEquals('foobar/', $obj['uploadPath']); - - $this->obj['upload_path'] = 'foo'; - $this->assertEquals('foo/', $obj['uploadPath']); - - $this->obj->set('upload_path', 'bar'); - $this->assertEquals('bar/', $obj['upload_path']); - - $this->expectException(\InvalidArgumentException::class); - $obj->setUploadPath(42); - } - /** * @return void */ @@ -133,29 +155,83 @@ public function testSetOverwrite() */ public function testVaidationMethods() { + $methods = $this->obj->validationMethods(); + $this->assertContains('mimetypes', $methods); + $this->assertContains('filesizes', $methods); + } + + /** + * Test validation file MIME types on property. + * + * @dataProvider provideDataForValidateMimetypes + * + * @param mixed $val The value(s) to be validated. + * @param boolean $l10n Whether the property value is multilingual. + * @param boolean $multiple Whether the property accepts zero or more values. + * @param mixed $acceptedMimetypes The accepted MIME types. + * @param boolean $expectedReturn The expected return value of the method. + * @param array $expectedResults The expected validation results. + * @return void + */ + public function testValidateMimetypes( + $val, + $l10n, + $multiple, + $acceptedMimetypes, + $expectedReturn, + array $expectedResults = [] + ) { $obj = $this->obj; - $ret = $obj->validationMethods(); - $this->assertContains('acceptedMimetypes', $ret); - $this->assertContains('maxFilesize', $ret); + + $obj['uploadPath'] = $this->getPathToFixtures().'/files'; + $obj['acceptedMimetypes'] = $acceptedMimetypes; + $obj['l10n'] = $l10n; + $obj['multiple'] = $multiple; + $obj['val'] = $val; + + $this->assertSame($expectedReturn, $obj->validateMimetypes()); + + $this->assertValidatorHasResults( + $expectedResults, + $obj->validator()->results() + ); } /** + * Test validation file sizes on property. + * + * @dataProvider provideDataForValidateFilesizes + * + * @param mixed $val The value(s) to be validated. + * @param boolean $l10n Whether the property value is multilingual. + * @param boolean $multiple Whether the property accepts zero or more values. + * @param integer $maxFilesize The maximum file size accepted. + * @param boolean $expectedReturn The expected return value of the method. + * @param array $expectedResults The expected validation results. * @return void */ - public function testValidateAcceptedMimetypes() - { + public function testValidateFilesizes( + $val, + $l10n, + $multiple, + $maxFilesize, + $expectedReturn, + array $expectedResults = [] + ) { $obj = $this->obj; - $obj->setMimetype('image/x-foobar'); - $this->assertTrue($obj->validateAcceptedMimetypes()); - $this->assertEmpty($obj['acceptedMimetypes']); - $this->assertTrue($obj->validateAcceptedMimetypes()); + $obj['uploadPath'] = $this->getPathToFixtures().'/files'; + $obj['maxFilesize'] = $maxFilesize; + $obj['l10n'] = $l10n; + $obj['multiple'] = $multiple; + $obj['val'] = $val; - $obj->setAcceptedMimetypes(['image/x-barbaz']); - $this->assertFalse($obj->validateAcceptedMimetypes()); + $this->assertSame($expectedReturn, $obj->validateFilesizes()); - $obj->setAcceptedMimetypes(['image/x-foobar']); - $this->assertTrue($obj->validateAcceptedMimetypes()); + $this->assertValidatorHasResults( + $expectedResults, + $obj->validator()->results() + ); } /** @@ -227,16 +303,6 @@ public function filenameProvider() ]; } - /** - * @return void - */ - // public function testGenerateFilenameWithoutIdentThrowsException() - // { - // $obj = $this->obj; - // $this->expectException('\Exception'); - // $obj->generateFilename(); - // } - /** * @return void */ @@ -270,22 +336,6 @@ public function testFilesystem() $this->assertEquals('foo', $this->obj['filesystem']); } - public function testSetMimetype() - { - $ret = $this->obj->setMimetype('foo'); - $this->assertSame($ret, $this->obj); - $this->assertEquals('foo', $this->obj->mimetype()); - - $this->obj->setMimetype(null); - $this->assertEquals('', $this->obj->mimetype()); - - $this->obj->setMimetype(false); - $this->assertEquals('', $this->obj->mimetype()); - - $this->expectException(InvalidArgumentException::class); - $this->obj->setMimetype([]); - } - /** * @return void */ @@ -313,4 +363,319 @@ public function testSqlPdoType() { $this->assertEquals(PDO::PARAM_STR, $this->obj->sqlPdoType()); } + + /** + * Provide property data for {@see FileProperty::validateMimetypes()}. + * + * @used-by self::testValidateMimetypes() + * @return array + */ + public function provideDataForValidateMimetypes() + { + $paths = $this->getFileMapOfFixtures(); + + return [ + 'any MIME types, no value' => [ + 'propertyValues' => null, + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'acceptedMimetypes' => null, + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'any MIME types, text file' => [ + 'propertyValues' => $paths['document.txt'], + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'acceptedMimetypes' => null, + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'any MIME types, image file' => [ + 'propertyValues' => $paths['panda.png'], + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'acceptedMimetypes' => null, + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'text/plain, no value' => [ + 'propertyValues' => null, + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'acceptedMimetypes' => [ 'text/plain' ], + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'text/plain, single text file' => [ + 'propertyValues' => $paths['document.txt'], + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'acceptedMimetypes' => [ 'text/plain' ], + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'text/plain, single image file' => [ + 'propertyValues' => $paths['panda.png'], + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'acceptedMimetypes' => [ 'text/plain' ], + 'assertValidationReturn' => false, + 'assertValidationResults' => [ + Validator::ERROR => [ + 'File ['.$paths['panda.png'].'] has unacceptable MIME type [image/png]', + ], + ], + ], + 'text/plain, nonexistent file' => [ + 'propertyValues' => $paths['nonexistent.txt'], + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'acceptedMimetypes' => [ 'text/plain' ], + 'assertValidationReturn' => false, + 'assertValidationResults' => [ + Validator::ERROR => [ + 'File ['.$paths['nonexistent.txt'].'] not found or MIME type unrecognizable', + ], + ], + ], + 'text/plain, l10n, text file' => [ + 'propertyValues' => $paths['document.txt'], + 'propertyL10n' => true, + 'propertyMultiple' => false, + 'acceptedMimetypes' => [ 'text/plain' ], + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'text/plain, l10n, text + image file' => [ + 'propertyValues' => [ + 'en' => $paths['document.txt'], + 'fr' => $paths['panda.png'], + ], + 'propertyL10n' => true, + 'propertyMultiple' => false, + 'acceptedMimetypes' => [ 'text/plain' ], + 'assertValidationReturn' => false, + 'assertValidationResults' => [ + Validator::ERROR => [ + 'File ['.$paths['panda.png'].'] has unacceptable MIME type [image/png]', + ], + ], + ], + 'text/plain, multiple, text files' => [ + 'propertyValues' => [ + $paths['document.txt'], + $paths['todo.txt'], + ], + 'propertyL10n' => false, + 'propertyMultiple' => true, + 'acceptedMimetypes' => [ 'text/plain' ], + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'text/plain, multiple, text + image file' => [ + 'propertyValues' => [ + $paths['document.txt'], + $paths['panda.png'], + ], + 'propertyL10n' => false, + 'propertyMultiple' => true, + 'acceptedMimetypes' => [ 'text/plain' ], + 'assertValidationReturn' => false, + 'assertValidationResults' => [ + Validator::ERROR => [ + 'File ['.$paths['panda.png'].'] has unacceptable MIME type [image/png]', + ], + ], + ], + 'text/plain, l10n + multiple #1' => [ + 'propertyValues' => [ + 'en' => $paths['document.txt'].','.$paths['todo.txt'], + 'fr' => [ $paths['stuff.txt'], $paths['draft.txt'] ], + ], + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'acceptedMimetypes' => [ 'text/plain' ], + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'text/plain, l10n + multiple #2' => [ + 'propertyValues' => [ + 'en' => $paths['document.txt'].','.$paths['scream.wav'], + 'fr' => [ $paths['stuff.txt'], $paths['cat.jpg'] ], + ], + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'acceptedMimetypes' => [ 'text/plain' ], + 'assertValidationReturn' => false, + 'assertValidationResults' => [ + Validator::ERROR => [ + 'File ['.$paths['scream.wav'].'] has unacceptable MIME type [audio/%s]', + 'File ['.$paths['cat.jpg'].'] has unacceptable MIME type [image/%s]', + ], + ], + ], + ]; + } + + /** + * Provide property data for {@see FileProperty::validateFilesizes()}. + * + * @used-by self::testValidateFilesizes() + * @return array + */ + public function provideDataForValidateFilesizes() + { + $paths = $this->getFileMapOfFixtures(); + + return [ + 'any size, no value' => [ + 'propertyValues' => null, + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'maxFilesize' => 0, + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'any size, text file' => [ + 'propertyValues' => $paths['document.txt'], + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'maxFilesize' => 0, + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'max 10kB, no value' => [ + 'propertyValues' => null, + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'maxFilesize' => 10240, + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'max 10kB, single text file' => [ + 'propertyValues' => $paths['document.txt'], + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'maxFilesize' => 10240, + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'max 10kB, single image file' => [ + 'propertyValues' => $paths['panda.png'], + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'maxFilesize' => 10240, + 'assertValidationReturn' => false, + 'assertValidationResults' => [ + Validator::ERROR => [ + 'File ['.$paths['panda.png'].'] exceeds maximum file size [%s]', + ], + ], + ], + 'max 10kB, nonexistent file' => [ + 'propertyValues' => $paths['nonexistent.txt'], + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'maxFilesize' => 10240, + 'assertValidationReturn' => false, + 'assertValidationResults' => [ + Validator::ERROR => [ + 'File ['.$paths['nonexistent.txt'].'] not found or size unknown', + ], + ], + ], + 'max 10kB, l10n, text file' => [ + 'propertyValues' => $paths['document.txt'], + 'propertyL10n' => true, + 'propertyMultiple' => false, + 'maxFilesize' => 10240, + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'max 10kB, l10n, text + image file' => [ + 'propertyValues' => [ + 'en' => $paths['document.txt'], + 'fr' => $paths['panda.png'], + ], + 'propertyL10n' => true, + 'propertyMultiple' => false, + 'maxFilesize' => 10240, + 'assertValidationReturn' => false, + 'assertValidationResults' => [ + Validator::ERROR => [ + 'File ['.$paths['panda.png'].'] exceeds maximum file size [%s]', + ], + ], + ], + 'max 10kB, multiple, text files' => [ + 'propertyValues' => [ + $paths['document.txt'], + $paths['todo.txt'], + ], + 'propertyL10n' => false, + 'propertyMultiple' => true, + 'maxFilesize' => 10240, + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'max 10kB, multiple, text + image file' => [ + 'propertyValues' => [ + $paths['document.txt'], + $paths['panda.png'], + ], + 'propertyL10n' => false, + 'propertyMultiple' => true, + 'maxFilesize' => 10240, + 'assertValidationReturn' => false, + 'assertValidationResults' => [ + Validator::ERROR => [ + 'File ['.$paths['panda.png'].'] exceeds maximum file size [%s]', + ], + ], + ], + 'max 10kB, l10n + multiple #1' => [ + 'propertyValues' => [ + 'en' => $paths['document.txt'].','.$paths['todo.txt'], + 'fr' => [ $paths['stuff.txt'], $paths['draft.txt'] ], + ], + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'maxFilesize' => 10240, + 'assertValidationReturn' => true, + 'assertValidationResults' => [], + ], + 'max 10kB, l10n + multiple #2' => [ + 'propertyValues' => [ + 'en' => $paths['document.txt'].','.$paths['scream.wav'], + 'fr' => [ $paths['stuff.txt'], $paths['panda.png'] ], + ], + 'propertyL10n' => false, + 'propertyMultiple' => false, + 'maxFilesize' => 10240, + 'assertValidationReturn' => false, + 'assertValidationResults' => [ + Validator::ERROR => [ + 'File ['.$paths['scream.wav'].'] exceeds maximum file size [%s]', + 'File ['.$paths['panda.png'].'] exceeds maximum file size [%s]', + ], + ], + ], + ]; + } + + /** + * Provide property data for {@see ImageProperty::generateExtension()}. + * + * @used-by AbstractFilePropertyTestCase::testGenerateExtensionFromDataProvider() + * @return array + */ + public function provideDataForGenerateExtension() + { + return [ + [ 'text/plain', 'txt' ], + [ 'text/html', null ], + [ 'image/x-foo', null ], + ]; + } } diff --git a/tests/Charcoal/Property/Fixture/files/blank.txt b/tests/Charcoal/Property/Fixture/files/blank.txt new file mode 100644 index 00000000..e69de29b diff --git a/tests/Charcoal/Property/Fixture/files/buzzer.mp3 b/tests/Charcoal/Property/Fixture/files/buzzer.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0f940e05c619a940a5d29b47fbbad2f2343e313a GIT binary patch literal 16512 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 O3Tpqk2LIl>iT(%gc5Si% literal 0 HcmV?d00001 diff --git a/tests/Charcoal/Property/Fixture/files/cat.jpg b/tests/Charcoal/Property/Fixture/files/cat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..998b4255832214d437be2d3c922897bbb219da71 GIT binary patch literal 1128 zcmex=iT)VJX|U&Ton2&Ye3R{i@q(vCeW2e{xmtM7>KF1C8fi zyvO7v_;%Gv)>Q{TzH;OT+Aj{W8_9B@D;Swrz*aK}06AWkRx8_jOp~&ntXaDss9plB z9z_Eq6EiDV12afNw(^Znf)|^Y9?N_Lr;JK=p$w(Hby3Ph#!F(7+3^Zg%k|~ z*#v|Yj2xBNMMM(|8y7zO2=z0gJp)t2nlO#uN8@4-Co@h9{?qVVeZyMoK<@{qw`cdS zd(`p0F;06=$V9D_s5g>$M|x&As$d-`xvbm?h#B~97C ze&V7JtFzlLtx>7)DKa>-^OfBOS0}F(EYH@lEHX2kR~T0CD-EQH zh3>>eu_rY%rkuw; zm&%L<2UK{fnI1moq1_tzE0Mt=A!Nx6C%nMYR)Z z3_MjXzw7V0w3|oR>%dRTmv3*dnO(^JdB;K|VC5hGtIX$k^Ae-CR~tJ#tqRa-NniQt zz+1n+;(Phnr)8VY+9ny~Y3u7_z_{XNpXmOjF2~$YSEgK4+b(r-Juu8>ZeHGDQR`G4G38q0i>IvhKtq&4 zhA^?Rq8cKkz$~ET7|5b%V7L&HbU_A%SWSBI_Uy)%bBzsi{cgIp>{xJ<&xY~4!7R2{ WP5w)MX^G00004XF*Lt006O% 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

qRRy%mkWb%_vGn4Xxcj)1LbonE> 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 ztN$H?&!w}getContainer(); - $this->obj = new ImageProperty([ + return new ImageProperty([ 'database' => $container['database'], 'logger' => $container['logger'], 'translator' => $container['translator'], + 'container' => $container, ]); } - public function testDefaults() + /** + * Asserts that the `type()` method is "file". + * + * @covers \Charcoal\Property\ImageProperty::type() + * @return void + */ + public function testPropertyType() { - $this->assertEquals([], $this->obj['effects']); + $this->assertEquals('image', $this->obj->type()); + } + + /** + * Asserts that the property adheres to file property defaults. + * + * @return void + */ + public function testPropertyDefaults() + { + parent::testPropertyDefaults(); + + $this->assertInternalType('array', $this->obj['effects']); + $this->assertEmpty($this->obj['effects']); + $this->assertEquals(ImageProperty::DEFAULT_DRIVER_TYPE, $this->obj['driverType']); + $this->assertEquals(ImageProperty::DEFAULT_APPLY_EFFECTS, $this->obj['applyEffects']); } + /** + * Asserts that the property adheres to file property defaults. + * + * @covers \Charcoal\Property\ImageProperty::getDefaultAcceptedMimetypes() * @return void */ - public function testType() + public function testDefaulAcceptedMimeTypes() { - $this->assertEquals('image', $this->obj->type()); + $this->assertInternalType('array', $this->obj['defaultAcceptedMimetypes']); + $this->assertNotEmpty($this->obj['defaultAcceptedMimetypes']); + } + + /** + * Asserts that the property properly checks if + * any acceptable MIME types are available. + * + * @covers \Charcoal\Property\ImageProperty::hasAcceptedMimetypes() + * @return void + */ + public function testHasAcceptedMimeTypes() + { + $this->assertTrue($this->obj->hasAcceptedMimetypes()); + + $this->obj->setAcceptedMimetypes([ 'image/gif' ]); + $this->assertTrue($this->obj->hasAcceptedMimetypes()); + } + + /** + * Asserts that the property can resolve a filesize from its value. + * + * @return void + */ + public function testFilesizeFromVal() + { + $obj = $this->obj; + + $obj['uploadPath'] = $this->getPathToFixtures().'/files'; + $obj['val'] = $this->getPathToFixture('files/panda.png'); + + $this->assertEquals(170276, $obj['filesize']); + } + + /** + * Asserts that the property can resolve a MIME type from its value. + * + * @return void + */ + public function testMimetypeFromVal() + { + $obj = $this->obj; + + $obj['uploadPath'] = $this->getPathToFixtures().'/files'; + $obj['val'] = $this->getPathToFixture('files/panda.png'); + + $this->assertEquals('image/png', $obj['mimetype']); } /** @@ -132,4 +197,25 @@ public function testAcceptedMimetypes() $this->assertContains('image/png', $ret); $this->assertContains('image/jpg', $ret); } + + /** + * Provide property data for {@see ImageProperty::generateExtension()}. + * + * @used-by AbstractFilePropertyTestCase::testGenerateExtensionFromDataProvider() + * @return array + */ + public function provideDataForGenerateExtension() + { + return [ + [ 'image/gif', 'gif' ], + [ 'image/jpg', 'jpg' ], + [ 'image/jpeg', 'jpg' ], + [ 'image/pjpeg', 'jpg' ], + [ 'image/png', 'png' ], + [ 'image/svg+xml', 'svg' ], + [ 'image/webp', 'webp' ], + [ 'image/x-foo', null ], + [ 'video/webm', null ], + ]; + } }