Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
80.00% |
4 / 5 |
CRAP | |
93.10% |
27 / 29 |
DataPercentSerie | |
0.00% |
0 / 1 |
|
80.00% |
4 / 5 |
9.03 | |
93.10% |
27 / 29 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
10 / 10 |
|||
collect | |
100.00% |
1 / 1 |
1 | |
100.00% |
8 / 8 |
|||
getDataSerie | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getTotalPercentDataSerie | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
validate | |
0.00% |
0 / 1 |
5.27 | |
77.78% |
7 / 9 |
<?php | |
namespace Alxvng\QATracker\DataProvider\Model; | |
use Alxvng\QATracker\DataProvider\Finder\ProviderFinder; | |
use DateTime; | |
use JsonException; | |
use Symfony\Component\String\Slugger\AsciiSlugger; | |
use function Symfony\Component\String\u; | |
class DataPercentSerie extends AbstractDataSerie | |
{ | |
protected AbstractDataSerie $dataSerie; | |
protected AbstractDataSerie $totalPercentDataSerie; | |
/** | |
* DataProvider constructor. | |
* | |
* @param array $config | |
* @param string $generatedDir | |
* @param array $dataSeriesStack | |
* | |
* @throws JsonException | |
*/ | |
public function __construct(array $config, string $generatedDir, array $dataSeriesStack) | |
{ | |
$slugger = new AsciiSlugger(); | |
$this->slug = u($slugger->slug($config['id']))->lower(); | |
$storageDir = $generatedDir.'/'.static::PROVIDERS_DIR; | |
$this->storageFilePath = $storageDir.'/'.$this->getSlug().'.json'; | |
$this->id = $config['id']; | |
$this->dataSerie = ProviderFinder::findById($config['provider'], $dataSeriesStack); | |
$this->totalPercentDataSerie = ProviderFinder::findById($config['totalPercentProvider'], $dataSeriesStack); | |
$this->validate(); | |
$this->load(); | |
} | |
/** | |
* @param DateTime $trackDate | |
* | |
* @throws JsonException | |
*/ | |
public function collect(DateTime $trackDate): void | |
{ | |
$dataSerie = $this->getDataSerie(); | |
$totalPercentProvider = $this->getTotalPercentDataSerie(); | |
$value = $dataSerie->getInstance()->fetchData(); | |
$total = $totalPercentProvider->getInstance()->fetchData(); | |
$percent = $value * 100 / $total; | |
$this->addData($percent, $trackDate); | |
$this->save(); | |
} | |
public function getDataSerie(): AbstractDataSerie | |
{ | |
return $this->dataSerie; | |
} | |
public function getTotalPercentDataSerie(): AbstractDataSerie | |
{ | |
return $this->totalPercentDataSerie; | |
} | |
protected function validate(): void | |
{ | |
if (!$this->dataSerie instanceof DataStandardSerie) { | |
throw new \RuntimeException(sprintf('Unable to collect data. %s expect data serie, got %s', DataStandardSerie::class, get_class($this->dataSerie))); | |
} | |
if ($this->dataSerie->getId() === $this->getId()) { | |
throw new \RuntimeException('You can\'t refer the data serie itself.'); | |
} | |
if (!$this->totalPercentDataSerie instanceof DataStandardSerie) { | |
throw new \RuntimeException(sprintf('Unable to collect data. %s expect data serie, got %s', DataStandardSerie::class, get_class($this->totalPercentDataSerie))); | |
} | |
if ($this->totalPercentDataSerie->getId() === $this->getId()) { | |
throw new \RuntimeException('You can\'t refer the data serie itself.'); | |
} | |
} | |
} |