Skip to content

Commit e96b0d8

Browse files
MAGETWO-66656: Fix retrieval of old value in config import
1 parent e55555e commit e96b0d8

File tree

6 files changed

+292
-165
lines changed

6 files changed

+292
-165
lines changed

app/code/Magento/Analytics/Model/FlagManager.php

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,36 +5,23 @@
55
*/
66
namespace Magento\Analytics\Model;
77

8-
use Magento\Framework\FlagFactory;
9-
use Magento\Framework\Flag\FlagResource;
10-
use Magento\Framework\Flag;
11-
128
/**
139
* Service that allows to handle a flag object as a scalar value.
1410
*/
1511
class FlagManager
1612
{
1713
/**
18-
* @var FlagFactory
19-
*/
20-
private $flagFactory;
21-
22-
/**
23-
* @var FlagResource
14+
* @var \Magento\Framework\FlagManager
2415
*/
25-
private $flagResource;
16+
private $flagManager;
2617

2718
/**
28-
* FlagManager constructor.
29-
* @param FlagFactory $flagFactory
30-
* @param FlagResource $flagResource
19+
* @param \Magento\Framework\FlagManager $flagManager
3120
*/
3221
public function __construct(
33-
FlagFactory $flagFactory,
34-
FlagResource $flagResource
22+
\Magento\Framework\FlagManager $flagManager
3523
) {
36-
$this->flagFactory = $flagFactory;
37-
$this->flagResource = $flagResource;
24+
$this->flagManager = $flagManager;
3825
}
3926

4027
/**
@@ -44,7 +31,7 @@ public function __construct(
4431
*/
4532
public function getFlagData($flagCode)
4633
{
47-
return $this->getFlagObject($flagCode)->getFlagData();
34+
return $this->flagManager->getFlagData($flagCode);
4835
}
4936

5037
/**
@@ -55,10 +42,7 @@ public function getFlagData($flagCode)
5542
*/
5643
public function saveFlag($flagCode, $value)
5744
{
58-
$flag = $this->getFlagObject($flagCode);
59-
$flag->setFlagData($value);
60-
$this->flagResource->save($flag);
61-
return true;
45+
return $this->flagManager->saveFlag($flagCode, $value);
6246
}
6347

6448
/**
@@ -69,25 +53,6 @@ public function saveFlag($flagCode, $value)
6953
*/
7054
public function deleteFlag($flagCode)
7155
{
72-
$flag = $this->getFlagObject($flagCode);
73-
if ($flag->getId()) {
74-
$this->flagResource->delete($flag);
75-
}
76-
return true;
77-
}
78-
79-
/**
80-
* Returns flag object
81-
*
82-
* @param string $flagCode
83-
* @return Flag
84-
*/
85-
private function getFlagObject($flagCode)
86-
{
87-
/** @var Flag $flag */
88-
$flag = $this->flagFactory
89-
->create(['data' => ['flag_code' => $flagCode]]);
90-
$this->flagResource->load($flag, $flagCode, 'flag_code');
91-
return $flag;
56+
return $this->flagManager->deleteFlag($flagCode);
9257
}
9358
}

app/code/Magento/Analytics/Test/Unit/Model/FlagManagerTest.php

Lines changed: 19 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -6,118 +6,57 @@
66
namespace Magento\Analytics\Test\Unit\Model;
77

88
use Magento\Analytics\Model\FlagManager;
9-
use Magento\Framework\FlagFactory;
10-
use Magento\Framework\Flag\FlagResource;
11-
use Magento\Framework\Flag;
129

13-
/**
14-
* Class FlagManagerTest
15-
*/
1610
class FlagManagerTest extends \PHPUnit_Framework_TestCase
1711
{
18-
/**
19-
* @var FlagFactory|\PHPUnit_Framework_MockObject_MockObject
20-
*/
21-
private $flagFactoryMock;
22-
2312
/**
2413
* @var FlagManager
2514
*/
2615
private $flagManager;
2716

2817
/**
29-
* @var Flag|\PHPUnit_Framework_MockObject_MockObject
18+
* @var \Magento\Framework\FlagManager|\PHPUnit_Framework_MockObject_MockObject
3019
*/
31-
private $flagMock;
20+
private $flagManagerMock;
3221

3322
/**
34-
* @var FlagResource|\PHPUnit_Framework_MockObject_MockObject
23+
* @inheritdoc
3524
*/
36-
private $flagResourceMock;
37-
3825
protected function setUp()
3926
{
40-
$this->flagFactoryMock = $this->getMockBuilder(FlagFactory::class)
41-
->disableOriginalConstructor()
42-
->getMock();
43-
$this->flagResourceMock = $this->getMockBuilder(FlagResource::class)
44-
->disableOriginalConstructor()
45-
->getMock();
46-
$this->flagMock = $this->getMockBuilder(Flag::class)
27+
$this->flagManagerMock = $this->getMockBuilder(\Magento\Framework\FlagManager::class)
4728
->disableOriginalConstructor()
4829
->getMock();
30+
4931
$this->flagManager = new FlagManager(
50-
$this->flagFactoryMock,
51-
$this->flagResourceMock
32+
$this->flagManagerMock
5233
);
5334
}
5435

5536
public function testGetFlagData()
5637
{
57-
$flagCode = "flag";
58-
$this->setupFlagObject($flagCode);
59-
$this->flagMock->expects($this->once())
38+
$this->flagManagerMock->expects($this->once())
6039
->method('getFlagData')
61-
->willReturn(10);
62-
$this->assertEquals($this->flagManager->getFlagData($flagCode), 10);
40+
->with('someCode');
41+
42+
$this->flagManager->getFlagData('someCode');
6343
}
6444

6545
public function testSaveFlag()
6646
{
67-
$flagCode = "flag";
68-
$this->setupFlagObject($flagCode);
69-
$this->flagMock->expects($this->once())
70-
->method('setFlagData')
71-
->with(10);
72-
$this->flagResourceMock->expects($this->once())
73-
->method('save')
74-
->with($this->flagMock);
75-
$this->assertTrue($this->flagManager->saveFlag($flagCode, 10));
76-
}
47+
$this->flagManagerMock->expects($this->once())
48+
->method('saveFlag')
49+
->with('someCode', 'someValue');
7750

78-
/**
79-
* @dataProvider flagExistDataProvider
80-
*
81-
* @param bool $isFlagExist
82-
*/
83-
public function testDeleteFlag($isFlagExist)
84-
{
85-
$flagCode = "flag";
86-
$this->setupFlagObject($flagCode);
87-
$this->flagMock
88-
->expects($this->once())
89-
->method('getId')
90-
->willReturn($isFlagExist);
91-
if ($isFlagExist) {
92-
$this->flagResourceMock
93-
->expects($this->once())
94-
->method('delete')
95-
->with($this->flagMock);
96-
}
97-
$this->assertTrue($this->flagManager->deleteFlag($flagCode));
51+
return $this->flagManager->saveFlag('someCode', 'someValue');
9852
}
9953

100-
private function setupFlagObject($flagCode)
54+
public function testDeleteFlag()
10155
{
102-
$this->flagFactoryMock->expects($this->once())
103-
->method('create')
104-
->with(['data' => ['flag_code' => $flagCode]])
105-
->willReturn($this->flagMock);
106-
$this->flagResourceMock->expects($this->once())
107-
->method('load')
108-
->with($this->flagMock, $flagCode, 'flag_code');
109-
}
56+
$this->flagManagerMock->expects($this->once())
57+
->method('deleteFlag')
58+
->with('someCode');
11059

111-
/**
112-
* Provide variations of the flag existence.
113-
*
114-
* @return array
115-
*/
116-
public function flagExistDataProvider()
117-
{
118-
return [
119-
[true],
120-
[false]
121-
];
60+
return $this->flagManager->deleteFlag('someCode');
12261
}
12362
}

app/code/Magento/Config/App/Config/Source/InitialSnapshotConfigSource.php

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<?php
22
/**
3-
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
3+
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
66
namespace Magento\Config\App\Config\Source;
77

88
use Magento\Framework\App\Config\ConfigSourceInterface;
99
use Magento\Framework\DataObjectFactory;
10-
use Magento\Framework\FlagFactory;
10+
use Magento\Framework\FlagManager;
1111

1212
/**
1313
* The source with previously imported configuration.
@@ -17,9 +17,9 @@ class InitialSnapshotConfigSource implements ConfigSourceInterface
1717
/**
1818
* The factory of Flag instances.
1919
*
20-
* @var FlagFactory
20+
* @var FlagManager
2121
*/
22-
private $flagFactory;
22+
private $flagManager;
2323

2424
/**
2525
* The factory of DataObject instances.
@@ -29,12 +29,12 @@ class InitialSnapshotConfigSource implements ConfigSourceInterface
2929
private $dataObjectFactory;
3030

3131
/**
32-
* @param FlagFactory $flagFactory The factory of Flag instances
32+
* @param FlagManager $flagManager The factory of Flag instances
3333
* @param DataObjectFactory $dataObjectFactory The factory of DataObject instances
3434
*/
35-
public function __construct(FlagFactory $flagFactory, DataObjectFactory $dataObjectFactory)
35+
public function __construct(FlagManager $flagManager, DataObjectFactory $dataObjectFactory)
3636
{
37-
$this->flagFactory = $flagFactory;
37+
$this->flagManager = $flagManager;
3838
$this->dataObjectFactory = $dataObjectFactory;
3939
}
4040

@@ -46,11 +46,10 @@ public function __construct(FlagFactory $flagFactory, DataObjectFactory $dataObj
4646
*/
4747
public function get($path = '')
4848
{
49-
$flag = $this->flagFactory->create();
50-
$flag->getResource()->load($flag, 'system_config_snapshot', 'flag_code');
49+
$flagData = (array)($this->flagManager->getFlagData('system_config_snapshot') ?: []);
5150

5251
$data = $this->dataObjectFactory->create(
53-
['data' => (array)($flag->getFlagData() ?: [])]
52+
['data' => $flagData]
5453
);
5554

5655
return $data->getData($path) ?: [];

app/code/Magento/Config/Test/Unit/App/Config/Source/InitialSnapshotConfigSourceTest.php

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
<?php
22
/**
3-
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
3+
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
66
namespace Magento\Config\Test\Unit\App\Config\Source;
77

88
use Magento\Config\App\Config\Source\InitialSnapshotConfigSource;
99
use Magento\Framework\DataObject;
1010
use Magento\Framework\DataObjectFactory;
11-
use Magento\Framework\Flag;
12-
use Magento\Framework\FlagFactory;
11+
use Magento\Framework\FlagManager;
1312
use PHPUnit_Framework_MockObject_MockObject as Mock;
1413

1514
/**
@@ -23,19 +22,9 @@ class InitialSnapshotConfigSourceTest extends \PHPUnit_Framework_TestCase
2322
private $model;
2423

2524
/**
26-
* @var FlagFactory
25+
* @var FlagManager|Mock
2726
*/
28-
private $flagFactoryMock;
29-
30-
/**
31-
* @var Flag|Mock
32-
*/
33-
private $flagMock;
34-
35-
/**
36-
* @var Flag\FlagResource|Mock
37-
*/
38-
private $flagResourceMock;
27+
private $flagManagerMock;
3928

4029
/**
4130
* @var DataObjectFactory|Mock
@@ -52,13 +41,7 @@ class InitialSnapshotConfigSourceTest extends \PHPUnit_Framework_TestCase
5241
*/
5342
protected function setUp()
5443
{
55-
$this->flagFactoryMock = $this->getMockBuilder(FlagFactory::class)
56-
->disableOriginalConstructor()
57-
->getMock();
58-
$this->flagMock = $this->getMockBuilder(Flag::class)
59-
->disableOriginalConstructor()
60-
->getMock();
61-
$this->flagResourceMock = $this->getMockBuilder(Flag\FlagResource::class)
44+
$this->flagManagerMock = $this->getMockBuilder(FlagManager::class)
6245
->disableOriginalConstructor()
6346
->getMock();
6447
$this->dataObjectFactoryMock = $this->getMockBuilder(DataObjectFactory::class)
@@ -69,27 +52,25 @@ protected function setUp()
6952
->disableOriginalConstructor()
7053
->getMock();
7154

72-
$this->flagFactoryMock->expects($this->any())
73-
->method('create')
74-
->willReturn($this->flagMock);
7555
$this->dataObjectFactoryMock->expects($this->any())
7656
->method('create')
7757
->willReturn($this->dataObjectMock);
7858

7959
$this->model = new InitialSnapshotConfigSource(
80-
$this->flagFactoryMock,
60+
$this->flagManagerMock,
8161
$this->dataObjectFactoryMock
8262
);
8363
}
8464

8565
public function testGet()
8666
{
87-
$this->flagMock->expects($this->exactly(2))
88-
->method('getResource')
89-
->willReturn($this->flagResourceMock);
90-
$this->flagResourceMock->expects($this->exactly(2))
91-
->method('load')
92-
->with($this->flagMock, 'system_config_snapshot', 'flag_code');
67+
$this->flagManagerMock->expects($this->exactly(2))
68+
->method('getFlagData')
69+
->with('system_config_snapshot')
70+
->willReturnOnConsecutiveCalls(
71+
['some' => 'data'],
72+
'data'
73+
);
9374
$this->dataObjectMock->expects($this->exactly(2))
9475
->method('getData')
9576
->willReturnOnConsecutiveCalls(

0 commit comments

Comments
 (0)