77
88namespace Magento \Catalog \Test \Unit \Ui \DataProvider \Product \Form \Modifier ;
99
10- use Magento \Catalog \Model \ResourceModel \Category \Collection as CategoryCollection ;
11- use Magento \Catalog \Model \ResourceModel \Category \CollectionFactory as CategoryCollectionFactory ;
1210use Magento \Catalog \Ui \DataProvider \Product \Form \Modifier \Categories ;
11+ use Magento \Catalog \Model \ResourceModel \Category \CollectionFactory as CategoryCollectionFactory ;
12+ use Magento \Catalog \Model \ResourceModel \Category \Collection as CategoryCollection ;
1313use Magento \Framework \AuthorizationInterface ;
1414use Magento \Framework \DB \Helper as DbHelper ;
1515use Magento \Framework \UrlInterface ;
1616use Magento \Store \Model \Store ;
17+ use Magento \Backend \Model \Auth \Session ;
18+ use Magento \Authorization \Model \Role ;
19+ use Magento \User \Model \User ;
1720use PHPUnit \Framework \MockObject \MockObject ;
1821
1922/**
@@ -51,6 +54,11 @@ class CategoriesTest extends AbstractModifierTest
5154 */
5255 private $ authorizationMock ;
5356
57+ /**
58+ * @var Session|MockObject
59+ */
60+ private $ sessionMock ;
61+
5462 protected function setUp (): void
5563 {
5664 parent ::setUp ();
@@ -72,7 +80,10 @@ protected function setUp(): void
7280 $ this ->authorizationMock = $ this ->getMockBuilder (AuthorizationInterface::class)
7381 ->disableOriginalConstructor ()
7482 ->getMockForAbstractClass ();
75-
83+ $ this ->sessionMock = $ this ->getMockBuilder (Session::class)
84+ ->setMethods (['getUser ' ])
85+ ->disableOriginalConstructor ()
86+ ->getMock ();
7687 $ this ->categoryCollectionFactoryMock ->expects ($ this ->any ())
7788 ->method ('create ' )
7889 ->willReturn ($ this ->categoryCollectionMock );
@@ -88,6 +99,26 @@ protected function setUp(): void
8899 $ this ->categoryCollectionMock ->expects ($ this ->any ())
89100 ->method ('getIterator ' )
90101 ->willReturn (new \ArrayIterator ([]));
102+
103+ $ roleAdmin = $ this ->getMockBuilder (Role::class)
104+ ->setMethods (['getId ' ])
105+ ->disableOriginalConstructor ()
106+ ->getMock ();
107+ $ roleAdmin ->expects ($ this ->any ())
108+ ->method ('getId ' )
109+ ->willReturn (0 );
110+
111+ $ userAdmin = $ this ->getMockBuilder (User::class)
112+ ->setMethods (['getRole ' ])
113+ ->disableOriginalConstructor ()
114+ ->getMock ();
115+ $ userAdmin ->expects ($ this ->any ())
116+ ->method ('getRole ' )
117+ ->willReturn ($ roleAdmin );
118+
119+ $ this ->sessionMock ->expects ($ this ->any ())
120+ ->method ('getUser ' )
121+ ->willReturn ($ userAdmin );
91122 }
92123
93124 /**
@@ -101,11 +132,28 @@ protected function createModel()
101132 'locator ' => $ this ->locatorMock ,
102133 'categoryCollectionFactory ' => $ this ->categoryCollectionFactoryMock ,
103134 'arrayManager ' => $ this ->arrayManagerMock ,
104- 'authorization ' => $ this ->authorizationMock
135+ 'authorization ' => $ this ->authorizationMock ,
136+ 'session ' => $ this ->sessionMock
105137 ]
106138 );
107139 }
108140
141+ /**
142+ * @param object $object
143+ * @param string $method
144+ * @param array $args
145+ * @return mixed
146+ * @throws \ReflectionException
147+ */
148+ private function invokeMethod ($ object , $ method , $ args = [])
149+ {
150+ $ class = new \ReflectionClass (Categories::class);
151+ $ method = $ class ->getMethod ($ method );
152+ $ method ->setAccessible (true );
153+
154+ return $ method ->invokeArgs ($ object , $ args );
155+ }
156+
109157 public function testModifyData ()
110158 {
111159 $ this ->assertSame ([], $ this ->getModel ()->modifyData ([]));
@@ -176,4 +224,44 @@ public function modifyMetaLockedDataProvider()
176224 {
177225 return [[true ], [false ]];
178226 }
227+
228+ /**
229+ * Asserts that a user with an ACL role ID of 0 and a user with an ACL role ID of 1 do not have the same cache IDs
230+ * Assumes a store ID of 0
231+ *
232+ * @throws \ReflectionException
233+ */
234+ public function testAclCacheIds ()
235+ {
236+ $ categoriesAdmin = $ this ->createModel ();
237+ $ cacheIdAdmin = $ this ->invokeMethod ($ categoriesAdmin , 'getCategoriesTreeCacheId ' , [0 ]);
238+
239+ $ roleAclUser = $ this ->getMockBuilder (Role::class)
240+ ->disableOriginalConstructor ()
241+ ->getMock ();
242+ $ roleAclUser ->expects ($ this ->any ())
243+ ->method ('getId ' )
244+ ->willReturn (1 );
245+
246+ $ userAclUser = $ this ->getMockBuilder (User::class)
247+ ->disableOriginalConstructor ()
248+ ->getMock ();
249+ $ userAclUser ->expects ($ this ->any ())
250+ ->method ('getRole ' )
251+ ->will ($ this ->returnValue ($ roleAclUser ));
252+
253+ $ this ->sessionMock = $ this ->getMockBuilder (Session::class)
254+ ->setMethods (['getUser ' ])
255+ ->disableOriginalConstructor ()
256+ ->getMock ();
257+
258+ $ this ->sessionMock ->expects ($ this ->any ())
259+ ->method ('getUser ' )
260+ ->will ($ this ->returnValue ($ userAclUser ));
261+
262+ $ categoriesAclUser = $ this ->createModel ();
263+ $ cacheIdAclUser = $ this ->invokeMethod ($ categoriesAclUser , 'getCategoriesTreeCacheId ' , [0 ]);
264+
265+ $ this ->assertNotEquals ($ cacheIdAdmin , $ cacheIdAclUser );
266+ }
179267}
0 commit comments