Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
88.89% covered (warning)
88.89%
8 / 9
CRAP
95.00% covered (success)
95.00%
19 / 20
AbstractDataSerie
0.00% covered (danger)
0.00%
0 / 1
88.89% covered (warning)
88.89%
8 / 9
13
95.00% covered (success)
95.00%
19 / 20
 isStandard
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 isPercent
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 addData
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
5 / 5
 save
0.00% covered (danger)
0.00%
0 / 1
3.07
80.00% covered (warning)
80.00%
4 / 5
 getSlug
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 getStorageFilePath
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 getId
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 getData
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 collect
n/a
0 / 0
1
n/a
0 / 0
 load
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
<?php
namespace Alxvng\QATracker\DataProvider\Model;
use DateTime;
use JsonException;
use RuntimeException;
abstract class AbstractDataSerie
{
    public const PROVIDERS_DIR = 'providers-data';
    public const DATE_FORMAT = 'YmdHis';
    protected string $storageFilePath;
    protected string $id;
    protected string $slug;
    protected array $data = [];
    public static function isStandard(array $providerConfig): bool
    {
        return isset($providerConfig['class'], $providerConfig['arguments']);
    }
    public static function isPercent(array $providerConfig): bool
    {
        return isset($providerConfig['provider'], $providerConfig['totalPercentProvider']);
    }
    /**
     * @param $value
     * @param DateTime $trackDate
     */
    public function addData($value, DateTime $trackDate): void
    {
        $this->data[$trackDate->format(static::DATE_FORMAT)] = round($value, 2);
        $data = $this->data;
        ksort($data);
        $this->data = $data;
    }
    /**
     * @throws JsonException
     */
    public function save()
    {
        $dir = dirname($this->getStorageFilePath());
        if (!is_dir($dir) && !mkdir($dir, 0777, true)) {
            throw new RuntimeException(sprintf('Directory "%s" was not created', $dir));
        }
        file_put_contents($this->getStorageFilePath(), json_encode($this->data, JSON_THROW_ON_ERROR, 512));
    }
    public function getSlug(): string
    {
        return $this->slug;
    }
    public function getStorageFilePath(): string
    {
        return $this->storageFilePath;
    }
    public function getId(): string
    {
        return $this->id;
    }
    public function getData(): array
    {
        return $this->data;
    }
    abstract public function collect(DateTime $trackDate): void;
    /**
     * @throws JsonException
     */
    protected function load()
    {
        if (!file_exists($this->getStorageFilePath())) {
            return;
        }
        $this->data = json_decode(file_get_contents($this->getStorageFilePath()), true, 512, JSON_THROW_ON_ERROR);
    }
}