6
6
7
7
namespace tests \verification \Tests ;
8
8
9
- use Magento \Framework \Module \Dir ;
10
9
use Magento \FunctionalTestingFramework \Suite \SuiteGenerator ;
11
- use Magento \FunctionalTestingFramework \Util \TestManifest ;
10
+ use Magento \FunctionalTestingFramework \Util \Filesystem \DirSetupUtil ;
11
+ use Magento \FunctionalTestingFramework \Util \Manifest \ParallelTestManifest ;
12
+ use Magento \FunctionalTestingFramework \Util \Manifest \TestManifestFactory ;
12
13
use Symfony \Component \Yaml \Yaml ;
13
14
use tests \util \MftfTestCase ;
14
15
15
16
class SuiteGenerationTest extends MftfTestCase
16
17
{
17
18
const RESOURCES_DIR = TESTS_BP . DIRECTORY_SEPARATOR . 'verification ' . DIRECTORY_SEPARATOR . 'Resources ' ;
18
19
const CONFIG_YML_FILE = FW_BP . DIRECTORY_SEPARATOR . SuiteGenerator::YAML_CODECEPTION_CONFIG_FILENAME ;
20
+ const GENERATE_RESULT_DIR = TESTS_BP .
21
+ DIRECTORY_SEPARATOR .
22
+ "verification " .
23
+ DIRECTORY_SEPARATOR .
24
+ "_generated " .
25
+ DIRECTORY_SEPARATOR ;
19
26
20
27
/**
21
28
* Flag to track existence of config.yml file
@@ -41,9 +48,9 @@ public static function setUpBeforeClass()
41
48
return ;
42
49
}
43
50
44
- // destroy manifest file if it exists
45
- if (file_exists (self ::getManifestFilePath () )) {
46
- unlink (self ::getManifestFilePath () );
51
+ // destroy _generated if it exists
52
+ if (file_exists (self ::GENERATE_RESULT_DIR )) {
53
+ DirSetupUtil:: rmdirRecursive (self ::GENERATE_RESULT_DIR );
47
54
}
48
55
49
56
$ configYml = fopen (self ::CONFIG_YML_FILE , "w " );
@@ -55,7 +62,7 @@ public static function setUpBeforeClass()
55
62
*/
56
63
public function testSuiteGeneration1 ()
57
64
{
58
- $ groupName = 'functionalSuite1 ' ;
65
+ $ groupName = 'functionalSuite1 ' ;
59
66
60
67
$ expectedContents = [
61
68
'additionalTestCest.php ' ,
@@ -75,11 +82,159 @@ public function testSuiteGeneration1()
75
82
$ yml = Yaml::parse (file_get_contents (self ::CONFIG_YML_FILE ));
76
83
$ this ->assertArrayHasKey ($ groupName , $ yml ['groups ' ]);
77
84
78
- $ suiteResultBaseDir = TESTS_BP .
85
+ $ suiteResultBaseDir = self :: GENERATE_RESULT_DIR .
79
86
DIRECTORY_SEPARATOR .
80
- "verification " .
87
+ $ groupName .
88
+ DIRECTORY_SEPARATOR ;
89
+
90
+ // Validate tests have been generated
91
+ $ dirContents = array_diff (scandir ($ suiteResultBaseDir ), ['.. ' , '. ' ]);
92
+
93
+ foreach ($ expectedContents as $ expectedFile ) {
94
+ $ this ->assertTrue (in_array ($ expectedFile , $ dirContents ));
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Test generation of parallel suite groups
100
+ */
101
+ public function testSuiteGenerationParallel ()
102
+ {
103
+ $ groupName = 'functionalSuite1 ' ;
104
+
105
+ $ expectedGroups = [
106
+ 'functionalSuite1_0 ' ,
107
+ 'functionalSuite1_1 ' ,
108
+ 'functionalSuite1_2 ' ,
109
+ 'functionalSuite1_3 '
110
+ ];
111
+
112
+ $ expectedContents = [
113
+ 'additionalTestCest.php ' ,
114
+ 'additionalIncludeTest2Cest.php ' ,
115
+ 'IncludeTest2Cest.php ' ,
116
+ 'IncludeTestCest.php '
117
+ ];
118
+
119
+ //createParallelManifest
120
+ /** @var ParallelTestManifest $parallelManifest */
121
+ $ parallelManifest = TestManifestFactory::makeManifest ("parallel " , ["functionalSuite1 " => []]);
122
+
123
+ // Generate the Suite
124
+ $ parallelManifest ->createTestGroups (1 );
125
+ SuiteGenerator::getInstance ()->generateAllSuites ($ parallelManifest );
126
+
127
+ // Validate console message and add group name for later deletion
128
+ $ this ->expectOutputRegex ('/Suite .* generated to .*/ ' );
129
+ self ::$ TEST_GROUPS [] = $ groupName ;
130
+
131
+ // Validate Yaml file updated
132
+ $ yml = Yaml::parse (file_get_contents (self ::CONFIG_YML_FILE ));
133
+ $ this ->assertEquals (array_intersect ($ expectedGroups , array_keys ($ yml ['groups ' ])), $ expectedGroups );
134
+
135
+ foreach ($ expectedGroups as $ expectedFolder ) {
136
+ $ suiteResultBaseDir = self ::GENERATE_RESULT_DIR .
137
+ DIRECTORY_SEPARATOR .
138
+ $ expectedFolder .
139
+ DIRECTORY_SEPARATOR ;
140
+
141
+ // Validate tests have been generated
142
+ $ dirContents = array_diff (scandir ($ suiteResultBaseDir ), ['.. ' , '. ' ]);
143
+
144
+ //Validate only one test has been added to each group since lines are set to 1
145
+ $ this ->assertEquals (1 , count ($ dirContents ));
146
+ $ this ->assertContains (array_values ($ dirContents )[0 ], $ expectedContents );
147
+ }
148
+ }
149
+
150
+ /**
151
+ * Test hook groups generated during suite generation
152
+ */
153
+ public function testSuiteGenerationHooks ()
154
+ {
155
+ $ groupName = 'functionalSuiteHooks ' ;
156
+
157
+ $ expectedContents = [
158
+ 'IncludeTestCest.php '
159
+ ];
160
+
161
+ // Generate the Suite
162
+ SuiteGenerator::getInstance ()->generateSuite ($ groupName );
163
+
164
+ // Validate console message and add group name for later deletion
165
+ $ this ->expectOutputRegex ('/Suite .* generated to .*/ ' );
166
+ self ::$ TEST_GROUPS [] = $ groupName ;
167
+
168
+ // Validate Yaml file updated
169
+ $ yml = Yaml::parse (file_get_contents (self ::CONFIG_YML_FILE ));
170
+ $ this ->assertArrayHasKey ($ groupName , $ yml ['groups ' ]);
171
+
172
+ $ suiteResultBaseDir = self ::GENERATE_RESULT_DIR .
81
173
DIRECTORY_SEPARATOR .
82
- "_generated " .
174
+ $ groupName .
175
+ DIRECTORY_SEPARATOR ;
176
+
177
+ // Validate tests have been generated
178
+ $ dirContents = array_diff (scandir ($ suiteResultBaseDir ), ['.. ' , '. ' ]);
179
+
180
+ foreach ($ expectedContents as $ expectedFile ) {
181
+ $ this ->assertTrue (in_array ($ expectedFile , $ dirContents ));
182
+ }
183
+
184
+ //assert group file created and contains correct contents
185
+ $ groupFile = PROJECT_ROOT .
186
+ DIRECTORY_SEPARATOR .
187
+ "src " .
188
+ DIRECTORY_SEPARATOR .
189
+ "Magento " .
190
+ DIRECTORY_SEPARATOR .
191
+ "FunctionalTestingFramework " .
192
+ DIRECTORY_SEPARATOR .
193
+ "Group " .
194
+ DIRECTORY_SEPARATOR .
195
+ $ groupName .
196
+ ".php " ;
197
+
198
+ $ this ->assertTrue (file_exists ($ groupFile ));
199
+ $ this ->assertFileEquals (
200
+ self ::RESOURCES_PATH . DIRECTORY_SEPARATOR . $ groupName . ".txt " ,
201
+ $ groupFile
202
+ );
203
+
204
+ }
205
+
206
+ /**
207
+ * Test generation of parallel suite groups
208
+ */
209
+ public function testSuiteGenerationSingleRun ()
210
+ {
211
+ //using functionalSuite2 to avoid directory caching
212
+ $ groupName = 'functionalSuite2 ' ;
213
+
214
+ $ expectedContents = [
215
+ 'additionalTestCest.php ' ,
216
+ 'additionalIncludeTest2Cest.php ' ,
217
+ 'IncludeTest2Cest.php ' ,
218
+ 'IncludeTestCest.php '
219
+ ];
220
+
221
+ //createParallelManifest
222
+ /** @var ParallelTestManifest $parallelManifest */
223
+ $ singleRunManifest = TestManifestFactory::makeManifest ("singleRun " , ["functionalSuite2 " => []]);
224
+
225
+ // Generate the Suite
226
+ SuiteGenerator::getInstance ()->generateAllSuites ($ singleRunManifest );
227
+ $ singleRunManifest ->generate ();
228
+
229
+ // Validate console message and add group name for later deletion
230
+ $ this ->expectOutputRegex ('/Suite .* generated to .*/ ' );
231
+ self ::$ TEST_GROUPS [] = $ groupName ;
232
+
233
+ // Validate Yaml file updated
234
+ $ yml = Yaml::parse (file_get_contents (self ::CONFIG_YML_FILE ));
235
+ $ this ->assertArrayHasKey ($ groupName , $ yml ['groups ' ]);
236
+
237
+ $ suiteResultBaseDir = self ::GENERATE_RESULT_DIR .
83
238
DIRECTORY_SEPARATOR .
84
239
$ groupName .
85
240
DIRECTORY_SEPARATOR ;
@@ -90,25 +245,38 @@ public function testSuiteGeneration1()
90
245
foreach ($ expectedContents as $ expectedFile ) {
91
246
$ this ->assertTrue (in_array ($ expectedFile , $ dirContents ));
92
247
}
248
+
249
+ $ expectedManifest = "dev/tests/verification/_generated/default/ " . PHP_EOL . "-g functionalSuite2 " . PHP_EOL ;
250
+
251
+ $ this ->assertEquals ($ expectedManifest , file_get_contents (self ::getManifestFilePath ()));
93
252
}
94
253
95
254
/**
96
255
* revert any changes made to config.yml
256
+ * remove _generated directory
97
257
*/
98
- public static function tearDownAfterClass ()
258
+ public function tearDown ()
99
259
{
100
260
// restore config if we see there was an original codeception.yml file
101
261
if (self ::$ YML_EXISTS_FLAG ) {
102
262
$ yml = Yaml::parse (file_get_contents (self ::CONFIG_YML_FILE ));
103
263
foreach (self ::$ TEST_GROUPS as $ testGroup ) {
104
- unset($ yml ['group ' ][$ testGroup ]);
264
+ unset($ yml ['groups ' ][$ testGroup ]);
105
265
}
106
266
107
267
file_put_contents (self ::CONFIG_YML_FILE , Yaml::dump ($ yml , 10 ));
108
- return ;
109
268
}
269
+ DirSetupUtil::rmdirRecursive (self ::GENERATE_RESULT_DIR );
270
+ }
110
271
111
- unlink (self ::CONFIG_YML_FILE );
272
+ /**
273
+ * Remove yml if created during tests and did not exist before
274
+ */
275
+ public static function tearDownAfterClass ()
276
+ {
277
+ if (!self ::$ YML_EXISTS_FLAG ) {
278
+ unlink (self ::CONFIG_YML_FILE );
279
+ }
112
280
}
113
281
114
282
/**
0 commit comments