Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
CRAP
63.64% covered (warning)
63.64%
7 / 11
AbstractJsonPathProvider
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
6.20
63.64% covered (warning)
63.64%
7 / 11
 __construct
0.00% covered (danger)
0.00%
0 / 1
6.20
63.64% covered (warning)
63.64%
7 / 11
<?php
namespace Alxvng\QATracker\DataProvider;
use JsonException;
use Symfony\Component\Filesystem\Filesystem;
abstract class AbstractJsonPathProvider implements DataProviderInterface
{
    public const MIME_TYPES = [
        'application/json',
        'text/plain',
    ];
    protected string $inputFilePath;
    protected string $jsonPathQuery;
    /**
     * XpathProvider constructor.
     *
     * @param string $baseDir
     * @param string $inputFilePath
     * @param string $jsonPathQuery
     */
    public function __construct(string $baseDir, string $inputFilePath, string $jsonPathQuery)
    {
        $fs = new Filesystem();
        $this->inputFilePath = $fs->isAbsolutePath($inputFilePath) ? $inputFilePath : $baseDir.'/'.$inputFilePath;
        $this->jsonPathQuery = $jsonPathQuery;
        if (!file_exists($this->inputFilePath)) {
            throw new \RuntimeException(sprintf('Unable to find file at %s', $this->inputFilePath));
        }
        if (!in_array(mime_content_type($this->inputFilePath), static::MIME_TYPES, true)) {
            throw new \RuntimeException(sprintf('The file %s (%s) must have one the mime types : %s', $this->inputFilePath, mime_content_type($this->inputFilePath), implode(',', static::MIME_TYPES)));
        }
        try {
            json_decode(file_get_contents($this->inputFilePath), true, 512, JSON_THROW_ON_ERROR);
        } catch (JsonException $e) {
            throw new \RuntimeException(sprintf('The file %s seems does not contain valid json data', $this->inputFilePath));
        }
    }
}