Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
RemoteSynchronizedCacheTest.php
Go to the documentation of this file.
1 <?php
8 
9 class RemoteSynchronizedCacheTest extends \PHPUnit\Framework\TestCase
10 {
14  protected $objectManager;
15 
16  protected function setUp()
17  {
18  $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
19  }
20 
28  {
29  $this->objectManager->getObject(
30  \Magento\Framework\Cache\Backend\RemoteSynchronizedCache::class,
31  [
32  'options' => $options,
33  ]
34  );
35  }
36 
41  {
42  return [
43  'empty_backend_option' => [
44  'options' => [
45  'remote_backend' => null,
46  'local_backend' => null,
47  ],
48  ],
49  'empty_remote_backend_option' => [
50  'options' => [
51  'remote_backend' => \Magento\Framework\Cache\Backend\Database::class,
52  'local_backend' => null,
53  ],
54  ],
55  'empty_local_backend_option' => [
56  'options' => [
57  'remote_backend' => null,
58  'local_backend' => \Cm_Cache_Backend_File::class,
59  ],
60  ],
61  ];
62  }
63 
70  {
71  $result = $this->objectManager->getObject(
72  \Magento\Framework\Cache\Backend\RemoteSynchronizedCache::class,
73  [
74  'options' => $options,
75  ]
76  );
77  $this->assertInstanceOf(\Magento\Framework\Cache\Backend\RemoteSynchronizedCache::class, $result);
78  }
79 
84  {
85  $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
86  ->disableOriginalConstructor()
87  ->getMock();
88 
89  return [
90  'not_empty_backend_option' => [
91  'options' => [
92  'remote_backend' => \Magento\Framework\Cache\Backend\Database::class,
93  'remote_backend_options' => [
94  'adapter_callback' => '',
95  'data_table' => 'data_table',
96  'data_table_callback' => 'data_table_callback',
97  'tags_table' => 'tags_table',
98  'tags_table_callback' => 'tags_table_callback',
99  'store_data' => '',
100  'adapter' => $connectionMock,
101  ],
102  'local_backend' => \Cm_Cache_Backend_File::class,
103  'local_backend_options' => [
104  'cache_dir' => '/tmp',
105  ],
106  ],
107  ],
108  ];
109  }
110 
117  public function testLoad($options, $expected)
118  {
120  $database = $this->objectManager->getObject(
121  \Magento\Framework\Cache\Backend\RemoteSynchronizedCache::class,
122  [
123  'options' => $options,
124  ]
125  );
126 
127  $this->assertEquals($expected, $database->load(5));
128  }
129 
133  public function loadDataProvider()
134  {
135  return [
136  'cacheInvalidationTime_is_less_than_that_dataModificationTime' => [
137  'options' => [
138  'remote_backend' => $this->getDatabaseMock(444),
139  'local_backend' => $this->getFileMock(555, 'loaded_value'),
140  ],
141  'expected' => 'loaded_value',
142  ],
143  'cacheInvalidationTime_is_greater_than_that_dataModificationTime' => [
144  'options' => [
145  'remote_backend' => $this->getDatabaseMock(444),
146  'local_backend' => $this->getFileMock(333, 'loaded_value'),
147  ],
148  'expected' => false,
149  ],
150  'cacheInvalidationTime_is_equal_to_the_dataModificationTime' => [
151  'options' => [
152  'remote_backend' => $this->getDatabaseMock(444),
153  'local_backend' => $this->getFileMock(444, 'loaded_value'),
154  ],
155  'expected' => 'loaded_value',
156  ],
157  ];
158  }
159 
164  public function getDatabaseMock($cacheInvalidationTime)
165  {
166  $databaseMock = $this->getMockBuilder(\Magento\Framework\Cache\Backend\Database::class)
167  ->setMethods(['load'])
168  ->disableOriginalConstructor()
169  ->getMock();
170  $databaseMock->expects($this->once())
171  ->method('load')
172  ->will($this->returnValue($cacheInvalidationTime));
173 
174  return $databaseMock;
175  }
176 
181  public function getFileMock($dataModificationTime, $cacheResult)
182  {
183  $fileMock = $this->getMockBuilder(\Cm_Cache_Backend_File::class)
184  ->setMethods(['test', 'load'])
185  ->disableOriginalConstructor()
186  ->getMock();
187  $fileMock->expects($this->once())
188  ->method('test')
189  ->will($this->returnValue($dataModificationTime));
190  $fileMock->expects($this->any())
191  ->method('load')
192  ->will($this->returnValue($cacheResult));
193 
194  return $fileMock;
195  }
196 
197  public function testRemove()
198  {
199  $databaseMock = $this->getMockBuilder(\Magento\Framework\Cache\Backend\Database::class)
200  ->setMethods(['save'])
201  ->disableOriginalConstructor()
202  ->getMock();
203  $databaseMock->expects($this->once())
204  ->method('save')
205  ->will($this->returnValue(true));
206 
207  $fileMock = $this->getMockBuilder(\Cm_Cache_Backend_File::class)
208  ->setMethods(['remove'])
209  ->disableOriginalConstructor()
210  ->getMock();
211  $fileMock->expects($this->once())
212  ->method('remove')
213  ->will($this->returnValue(true));
214 
216  $database = $this->objectManager->getObject(
217  \Magento\Framework\Cache\Backend\RemoteSynchronizedCache::class,
218  [
219  'options' => [
220  'remote_backend' => $databaseMock,
221  'local_backend' => $fileMock,
222  ]
223  ]
224  );
225 
226  $this->assertEquals(true, $database->remove(5));
227  }
228 
229  public function testClean()
230  {
231  $databaseMock = $this->getMockBuilder(\Magento\Framework\Cache\Backend\Database::class)
232  ->setMethods(['save'])
233  ->disableOriginalConstructor()
234  ->getMock();
235  $databaseMock->expects($this->once())
236  ->method('save')
237  ->will($this->returnValue(true));
238 
239  $fileMock = $this->getMockBuilder(\Cm_Cache_Backend_File::class)
240  ->setMethods(['clean'])
241  ->disableOriginalConstructor()
242  ->getMock();
243  $fileMock->expects($this->once())
244  ->method('clean')
245  ->will($this->returnValue(true));
246 
248  $database = $this->objectManager->getObject(
249  \Magento\Framework\Cache\Backend\RemoteSynchronizedCache::class,
250  [
251  'options' => [
252  'remote_backend' => $databaseMock,
253  'local_backend' => $fileMock,
254  ]
255  ]
256  );
257 
258  $this->assertEquals(true, $database->clean());
259  }
260 }