Skip to content

Commit d50683d

Browse files
committed
[Analytics] Code refactor & covered unit test
1 parent ba8fae3 commit d50683d

File tree

2 files changed

+189
-126
lines changed

2 files changed

+189
-126
lines changed

app/code/Magento/Analytics/ReportXml/QueryFactory.php

Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
use Magento\Analytics\ReportXml\DB\SelectBuilderFactory;
99
use Magento\Framework\App\CacheInterface;
1010
use Magento\Framework\ObjectManagerInterface;
11+
use Magento\Framework\App\ObjectManager;
12+
use Magento\Framework\Serialize\Serializer\Json;
13+
use Magento\Framework\DB\Select;
1114

1215
/**
1316
* Creates Query object according to configuration
@@ -45,36 +48,44 @@ class QueryFactory
4548
*/
4649
private $selectHydrator;
4750

51+
/**
52+
* @var Json|null
53+
*/
54+
private $jsonSerializer;
55+
4856
/**
4957
* QueryFactory constructor.
5058
*
51-
* @param CacheInterface $queryCache
52-
* @param SelectHydrator $selectHydrator
59+
* @param CacheInterface $queryCache
60+
* @param SelectHydrator $selectHydrator
5361
* @param ObjectManagerInterface $objectManager
54-
* @param SelectBuilderFactory $selectBuilderFactory
55-
* @param Config $config
56-
* @param array $assemblers
62+
* @param SelectBuilderFactory $selectBuilderFactory
63+
* @param Config $config
64+
* @param array $assemblers
65+
* @param Json|null $jsonSerializer
5766
*/
5867
public function __construct(
5968
CacheInterface $queryCache,
6069
SelectHydrator $selectHydrator,
6170
ObjectManagerInterface $objectManager,
6271
SelectBuilderFactory $selectBuilderFactory,
6372
Config $config,
64-
array $assemblers
73+
array $assemblers,
74+
Json $jsonSerializer = null
6575
) {
6676
$this->config = $config;
6777
$this->selectBuilderFactory = $selectBuilderFactory;
6878
$this->assemblers = $assemblers;
6979
$this->queryCache = $queryCache;
7080
$this->objectManager = $objectManager;
7181
$this->selectHydrator = $selectHydrator;
82+
$this->jsonSerializer = $jsonSerializer ?: ObjectManager::getInstance()->get(Json::class);
7283
}
7384

7485
/**
7586
* Returns query connection name according to configuration
7687
*
77-
* @param string $queryConfig
88+
* @param string $queryConfig
7889
* @return string
7990
*/
8091
private function getQueryConnectionName($queryConfig)
@@ -89,7 +100,7 @@ private function getQueryConnectionName($queryConfig)
89100
/**
90101
* Create query according to configuration settings
91102
*
92-
* @param string $queryName
103+
* @param string $queryName
93104
* @return Query
94105
*/
95106
private function constructQuery($queryName)
@@ -101,12 +112,29 @@ private function constructQuery($queryName)
101112
$selectBuilder = $assembler->assemble($selectBuilder, $queryConfig);
102113
}
103114
$select = $selectBuilder->create();
115+
return $this->createQueryObject(
116+
$select,
117+
$selectBuilder->getConnectionName(),
118+
$queryConfig
119+
);
120+
}
121+
122+
/**
123+
* Create query class using objectmanger
124+
*
125+
* @param Select $select
126+
* @param string $connection
127+
* @param array $queryConfig
128+
* @return Query
129+
*/
130+
private function createQueryObject($select, $connection, $queryConfig)
131+
{
104132
return $this->objectManager->create(
105133
Query::class,
106134
[
107135
'select' => $select,
108136
'selectHydrator' => $this->selectHydrator,
109-
'connectionName' => $selectBuilder->getConnectionName(),
137+
'connectionName' => $connection,
110138
'config' => $queryConfig
111139
]
112140
);
@@ -115,26 +143,25 @@ private function constructQuery($queryName)
115143
/**
116144
* Creates query by name
117145
*
118-
* @param string $queryName
146+
* @param string $queryName
119147
* @return Query
120148
*/
121149
public function create($queryName)
122150
{
123151
$cached = $this->queryCache->load($queryName);
124152
if ($cached) {
125-
$queryData = json_decode($cached, true);
126-
return $this->objectManager->create(
127-
Query::class,
128-
[
129-
'select' => $this->selectHydrator->recreate($queryData['select_parts']),
130-
'selectHydrator' => $this->selectHydrator,
131-
'connectionName' => $queryData['connectionName'],
132-
'config' => $queryData['config']
133-
]
153+
$queryData = $this->jsonSerializer->unserialize($cached);
154+
return $this->createQueryObject(
155+
$this->selectHydrator->recreate($queryData['select_parts']),
156+
$queryData['connectionName'],
157+
$queryData['config']
134158
);
135159
}
136160
$query = $this->constructQuery($queryName);
137-
$this->queryCache->save(json_encode($query), $queryName);
161+
$this->queryCache->save(
162+
$this->jsonSerializer->serialize($query),
163+
$queryName
164+
);
138165
return $query;
139166
}
140167
}

0 commit comments

Comments
 (0)