1313use Magento \Authorization \Model \RulesFactory ;
1414use Magento \Authorization \Model \UserContextInterface ;
1515use Magento \Framework \DataObject ;
16+ use Magento \TestFramework \Fixture \Api \DataMerger ;
1617use Magento \TestFramework \Fixture \Data \ProcessorInterface ;
1718use Magento \TestFramework \Fixture \RevertibleDataFixtureInterface ;
1819
@@ -25,13 +26,16 @@ class Role implements RevertibleDataFixtureInterface
2526 'role_name ' => 'Role Name %uniqid% ' ,
2627 'role_type ' => Group::ROLE_TYPE ,
2728 'user_id ' => 0 ,
28- 'user_type ' => UserContextInterface::USER_TYPE_ADMIN
29+ 'user_type ' => UserContextInterface::USER_TYPE_ADMIN ,
30+ 'pid ' => 0 ,
31+ 'gws_is_all ' => 1 ,
32+ 'gws_websites ' => null ,
33+ 'gws_store_groups ' => null ,
34+ 'resources ' => self ::RESOURCES
2935 ];
3036
31- private const DEFAULT_DATA_RULES = [
32- 'id ' => null ,
33- 'role_id ' => null ,
34- 'resources ' => ['Magento_Backend::all ' ]
37+ private const RESOURCES = [
38+ 'Magento_Backend::all '
3539 ];
3640
3741 /**
@@ -54,39 +58,59 @@ class Role implements RevertibleDataFixtureInterface
5458 */
5559 private $ rulesFactory ;
5660
61+ /**
62+ * @var DataMerger
63+ */
64+ private $ dataMerger ;
65+
5766 /**
5867 * @param RoleFactory $roleFactory
5968 * @param RoleResource $roleResourceModel
6069 * @param RulesFactory $rulesFactory
6170 * @param ProcessorInterface $dataProcessor
71+ * @param DataMerger $dataMerger
6272 */
6373 public function __construct (
6474 RoleFactory $ roleFactory ,
6575 RoleResource $ roleResourceModel ,
6676 RulesFactory $ rulesFactory ,
67- ProcessorInterface $ dataProcessor
77+ ProcessorInterface $ dataProcessor ,
78+ DataMerger $ dataMerger
6879 ) {
6980 $ this ->roleFactory = $ roleFactory ;
7081 $ this ->roleResourceModel = $ roleResourceModel ;
7182 $ this ->rulesFactory = $ rulesFactory ;
7283 $ this ->dataProcessor = $ dataProcessor ;
84+ $ this ->dataMerger = $ dataMerger ;
7385 }
7486
7587 /**
7688 * @inheritdoc
7789 */
7890 public function apply (array $ data = []): ?DataObject
7991 {
92+ $ data = $ this ->prepareData ($ data );
93+
94+ $ websites = $ this ->convertGwsWebsiteStoreGroups ($ data ['gws_websites ' ]);
95+ $ storeGroups = $ this ->convertGwsWebsiteStoreGroups ($ data ['gws_store_groups ' ]);
96+
8097 $ role = $ this ->roleFactory ->create ();
81- $ role ->setData ($ this ->prepareData (array_diff_key ($ data , self ::DEFAULT_DATA_RULES )));
82- $ this ->roleResourceModel ->save ($ role );
98+ $ role ->setRoleName ($ data ['role_name ' ])
99+ ->setRoleType ($ data ['role_type ' ])
100+ ->setPid ($ data ['pid ' ])
101+ ->setUserType ($ data ['user_type ' ])
102+ ->setGwsIsAll ($ data ['gws_is_all ' ])
103+ ->setGwsWebsites ($ websites )
104+ ->setGwsStoreGroups ($ storeGroups );
105+
106+ $ result = $ role ->save ();
83107
84- $ rules = $ this ->rulesFactory ->create ();
85- $ rules ->setRoleId ($ role -> getId () ?? null );
86- $ rules ->setResources ($ data ['resources ' ] ?? self ::DEFAULT_DATA_RULES [ ' resources ' ]);
87- $ rules ->saveRel ();
108+ $ this ->rulesFactory ->create ()
109+ ->setRoleId ($ result [ ' role_id ' ])
110+ ->setResources ($ data ['resources ' ] ?? self ::RESOURCES )
111+ ->saveRel ();
88112
89- return $ role ;
113+ return $ result ;
90114 }
91115
92116 /**
@@ -110,7 +134,26 @@ public function revert(DataObject $data): void
110134 */
111135 private function prepareData (array $ data ): array
112136 {
113- $ data = array_merge (self ::DEFAULT_DATA , $ data );
137+ $ data = $ this -> dataMerger -> merge (self ::DEFAULT_DATA , $ data );
114138 return $ this ->dataProcessor ->process ($ this , $ data );
115139 }
140+
141+ /**
142+ * Convert GWS websites and store groups to string
143+ *
144+ * @param $data
145+ * @return string|null
146+ */
147+ private function convertGwsWebsiteStoreGroups ($ data ): ?string
148+ {
149+ if (isset ($ data )) {
150+ if (is_array ($ data )) {
151+ return implode (', ' , $ data );
152+ }
153+ if (is_string ($ data )) {
154+ return $ data ;
155+ }
156+ }
157+ return null ;
158+ }
116159}
0 commit comments